Gitチートシート:やりたいこと別のコマンド一覧
Gitチートシート
やりたいこと別Gitチートシート:コマンド、取り消し方法、npm | We.Inc
やりたいこと別にまとめた、検索できるGitチートシートです。開始、保存、ブランチ、マージ、同期、デプロイのコマンドに加えて、「やってしまった」ときの取り消しレシピ、変更がどこにあるかを示す図、よく使うnpmコマンドも紹介します。
日々のGitの作業は、ほとんどが6つのコマンドで済みます。変更を確認するgit status、変更をステージするgit add、保存するgit commit -m、ブランチを作るgit switch -c、更新を取り込むgit pull、そして共有するgit pushです。取り消したいときは、ファイルならgit restore、まだ手元にあるコミットならgit reset、すでにプッシュしたコミットならgit revertを使います。
取り消し方法の早見表
- ステージ
- git restore --staged file
- プッシュしていない直前のコミット
- git reset --soft HEAD~1
- プッシュ済みのコミット
- git revert <commit>
下にあるコマンドを検索し、どの行でもワンクリックでコピーできます。何かがうまくいかなくなったときは、レシピを参考にしてください。コマンドには、従来のチェックアウトが担っていた多くの役割をわかりやすく分けた後継のコマンド、git switchとgit restoreを使っています。
- 検索ボックスに「取り消し」「ブランチ」「タグ」のような言葉を入力します。
- コマンドをコピーし、ブランチ名やファイル名を自分のものに置き換えます。
- 図を見て、そのコマンドがどの場所からどの場所へ変更を移動させるのかを確認します。
- 履歴を書き換える操作の前と後には、必ず状態を確認するコマンドを実行しましょう。
- コミットは小さく、こまめに行いましょう。小さなコミットは取り消しやすく、レビューもしやすくなります。
- ほかの人が使っているブランチでは、リセットや強制プッシュは絶対にしないでください。代わりに打ち消しのコミットを使います。
- 強制プッシュには--forceではなく--force-with-leaseを使いましょう。ほかの誰かがプッシュしていた場合は、実行を拒否してくれます。
- コミットメッセージには、その変更が何をするのかを書きましょう。「変更」ではなく「予約フォームを追加」のように書きます。
- 秘密の情報は、最初のコミットのときから.gitignoreに記載した環境設定ファイルに保管しましょう。
よくある質問
git resetとgit revertの違いは何ですか?
リセットはブランチの位置を過去に戻し、履歴からコミットを取り除きます。手元だけの作業であれば、それで問題ありません。一方の打ち消しは、古いコミットの内容を元に戻す新しいコミットを追加し、履歴はそのまま残します。一度プッシュしたコミットに対しては、こちらが安全な選択です。
git switchとgit checkoutのどちらを使うべきですか?
どちらでも動きます。Git 2.23で、ブランチを切り替えるためのgit switchと、ファイルを元に戻すためのgit restoreが追加され、以前はチェックアウトが1つで担っていた2つの役割が分けられました。新しいコマンドのほうが読みやすく、使い方を間違えにくくなっています。
git fetchにできて、git pullにできないことは何ですか?
フェッチは新しいコミットをダウンロードするだけで、自分のブランチには何も変更を加えません。プルはフェッチを実行した後、取得したコミットを現在のブランチにマージ、またはリベースします。
失ったコミットを取り戻すには?
git reflogを実行します。どのブランチからも参照されていないコミットも含めて、HEADがこれまでに指していたすべての位置が一覧で表示されます。取り戻したいコミットを見つけたら、git switch -c rescue <sha>を実行してください。
npm installとnpm ciのどちらを使うべきですか?
開発中はnpm installを使います。こちらはロックファイルを更新することがあります。ビルドやCIではnpm ciを使います。こちらは既存のnode_modulesを削除してから、ロックファイルに書かれたとおりのものを正確にインストールします。package.jsonとロックファイルの内容が一致しない場合は、エラーで停止します。
変更はどこにあるのか
- Gitは4つの場所を意識しています。作業フォルダー、ステージングエリア(インデックスとも呼ばれます)、ローカルリポジトリ、そしてリモートです。追加のコマンドは変更をフォルダーからステージングエリアへ、コミットはステージングエリアからリポジトリへ、プッシュは自分のリポジトリからリモートへと移します。そしてプルは、リモートのコミットを手元に取り込みます。
コミットから公開中のWebサイトまで
- 多くのホスティングサービスは、ブランチにプッシュするとデプロイを行います。機能ごとのブランチで作業し、それをプッシュしてプレビューを確認し、mainにマージして公開します。リリースにはタグを付けておけば、問題のないことがわかっているバージョンへすぐに戻れます。
手順を追った修正方法
ブランチではなくmainにコミットしてしまった
いまいる位置でブランチを作り(これでコミットは残ります)、その後でmainをリモートと同じ位置まで戻します。これはプッシュする前にだけ行ってください。
マージのコンフリクトを解決する
Gitは処理を止め、衝突している行に印を付けます。各ファイルを自分が残したい内容に編集して印を取り除き、ステージしてから処理を完了させます。
秘密の情報を誤ってプッシュしてしまった
まず最初にキーを無効化して新しいものに交換してください。一度プッシュしたものは、すでにコピーされていると考えるべきです。その後、コードと履歴の両方から削除し、そのファイルを.gitignoreに追加します。
リポジトリのREADMEを書くなら、こちらも使ってください:
Markdownチートシート
- 作業フォルダー
- ステージングエリア
- ローカルリポジトリ
- リモート(GitHub、GitLab)
最初に一度だけ設定
- コミットに記録される名前
- コミットに記録されるメールアドレス
- 新しいリポジトリをmainブランチで始める
- プルのときにマージコミットを作らず、リベースする
プロジェクトを始める
- 現在のフォルダーをリポジトリにする
- リモートのリポジトリを手元のパソコンにコピーする
- ローカルのリポジトリをリモートに接続する
- リモートとそのURLを一覧表示する
作業を保存する
- 何が変わり、何がステージされているか
- 1つのファイルをステージする
- ファイルの一部を、変更のかたまりごとにステージする
- ステージした内容をコミットする
- まだステージしていない変更
- 次のコミットに向けてステージした変更
- ブランチを図で描いた、コンパクトな履歴
ブランチとマージ
- ブランチを作成して、そこへ移動する
- 既存のブランチへ移動する
- ローカルのブランチを一覧表示する
- そのブランチを現在のブランチにマージする
- 現在のブランチをmainの上に積み直す
- マージ済みのブランチを削除する(-Dで強制)
- 1つのコミットを現在のブランチにコピーする
同期とデプロイ
- 手元のファイルには触れずに、リモートの変更をダウンロードする
- フェッチしてから、現在のブランチにマージまたはリベースする
- 新しいブランチをプッシュし、プッシュ先を記憶させる
- 現在のブランチをプッシュする
- リリースに印を付ける
- そのタグをプッシュする(タグは初期設定ではプッシュされません)
作業をいったん退避する
- まだコミットしていない変更を脇に置いておく
- 退避している内容を確認する
- 最新の退避内容を元に戻し、一覧から削除する
やってしまった:取り消しレシピ
- ファイルへのステージしていない編集を破棄する(元に戻せません)
- 編集内容は残したまま、ファイルのステージを解除する
- プッシュする前に、直前のコミットのメッセージを修正する(またはステージしたファイルを追加する)
- 直前のコミットを取り消し、その変更はステージしたままにする
- 直前のコミットとその変更を削除する(ローカルのみ、プッシュしていない場合)
- プッシュ済みのコミットを新しいコミットで打ち消す。共有ブランチでも安全
- リセットやリベースの後に失ったコミットを見つけ、git switch -c rescue <sha>を実行する
- コンフリクトが起きたマージを中止する
- うまくいかなかったリベースを中止する
- 誤ってmainにコミットした:作業をブランチに移し、mainをリセットする
- 最後にフェッチしてから誰もプッシュしていない場合に限り、リモートのブランチを上書きする
- 追跡されていないファイルとフォルダーを確認してから削除する
- 初期設定のままpackage.jsonを作成する
- ロックファイルどおりにクリーンインストールする(CIで使用)
- 依存パッケージを追加する
- 開発時だけの依存パッケージを追加する
- 依存パッケージを削除する
- 新しいバージョンがあるパッケージを一覧表示する
- 既知の脆弱性を報告する
- パッケージのどのバージョンがなぜインストールされているかを表示する
- パッケージの最新の公開バージョン
- パッケージのコマンドをインストールせずに実行する
コマンド
内容
コピー
変更の置き場所
プルは、リモートのコミットを手元に取り込みます。
npmコマンド
やりたいこと別のコマンド
コマンドを検索
取り消し、ブランチ、タグ...
無料で始める · クレジットカード不要
関連: ガイド|Webマーケティングと集客を学ぶ
製品
ご利用いただける方
機能
リソース
会社情報
サイトマップを見る