慣れるまで大変なGit操作
Gitのコマンド、毎回検索していませんか?
慣れるまで大変ですよね……調べるせいで時間も取られます。
「
git stashどう戻すんだっけ?」
「コミットにした変更内容、どう直すんだっけ?」
「rebase中にコンフリクト出たけど、どうすればいいんだっけ?」
そんな個人的によく検索していたコマンドを、使用タイミングと一緒にまとめてみました。
👉 初期構築系(cloneなど)は除外しています!
👉「開発中によく使うコマンドだけ」に絞っているので見やすい!
本記事では、現場でよく使うGitコマンドを「用途別」にまとめています。
コピペでそのまま使えるので、手元に置いておくチートシートとして使えます。
対象読者
・Gitにまだ慣れていない人
・毎回コマンドを検索してしまう人
・現場でよく使うコマンドをまとめて確認したい人
この記事でできること
・よく使うGitコマンドを用途別に確認できる
・コマンドをコピペしてすぐ使える
・最低限の使い方をざっくり理解できる
・初学者によく使うGitコマンドを共有できる
💡このチートシートの使い方(初学者の方へ)
最初はすべて覚える必要はありません。
「困ったときにこの記事を開いて、該当するコマンドを探す」
という使い方でOKです。
少しずつ使う中で、自然と身についていきます。
コマンドは理解せずに使うと事故につながります。
気になるものはぜひ別途調べてみてください。
【タイミング問わず使うコマンド】~迷ったらこれ~
今の作業状況を確認する
git status
変更されているファイルや、コミット対象(ステージ済み)の状態を確認できる。
コンフリクトが発生した場合はその状態も確認できる。
困ったらまず実行すると、現在の状況と次に何をすべきかのヒントが得られる。
コミット履歴を確認する
git log
過去のコミット履歴を確認できる。
ファイル名を引数に指定することで、対象ファイルの変更履歴が表示される。
--onelineを引数に指定すると、履歴を1行で確認できて見やすい。
【作業前に使うコマンド】~ブランチ操作・最新化~
今いるブランチ(作業中のブランチ)を確認する
git branch
ローカルブランチの一覧を表示する。
現在いるブランチには * が付いて表示される。
使いたいブランチに切り替える
git checkout <ブランチ名>
指定したブランチが「作業中のブランチ」となる。
実はgit checkoutはブランチ切替以外にも機能がある。(紹介は割愛)
※私は普通に使っているが、古い書き方という意見もある。
git switch <ブランチ名>
こちらはブランチ切替専用コマンド。
用途がハッキリしている分、git checkoutより安全でわかりやすいという意見もある。
新規ブランチを作成する
git checkout -b <新規作成したいブランチ名>
作業ブランチから生える形で新規作成されるので、
あらかじめ地盤としたいブランチに移動しておくこと。
git switch -c <新規作成したいブランチ名>
こちらもgit switchver.が存在する。
引数(-c)がcreateなのもあり、直感的でわかりやすい気がする。
作業ブランチを最新状態にする(リモートと同じ状態にする)
①→②で実施すること。
①git fetch
まずリモートの最新情報を仕入れる。
情報を仕入れるだけなのでまだ反映はされていない。
②git merge
作業中のブランチに「関連付けられているブランチ」の内容が反映される。
「関連付けられているブランチ」以外のブランチの内容を反映したい場合は引数で指定する。
例: git merge origin/<ブランチ名>
または:git pull
上記①②を同時に実行する。
「関連付けられているブランチ」以外のブランチの内容を反映したい場合は、mergeコマンド同様に引数で指定する。
例: git pull origin/<ブランチ名>
土台となっているブランチを最新化する(生やしなおす)
初学者の方へ:以下git rebase関連は特に別途学習を推奨します。
git rebase <地盤にするブランチ名>
※イメージとしては、コミット(変更履歴)を一度外して、新しい土台の上に古い順番で積み直す操作。
例:
mainブランチから生やしているsampleブランチ
①git checkout main
②git pull←mainブランチを最新化
③git checkout sample←sampleブランチに移動
④git rebase main←最新化したmainブランチに生やしなおす
git rebase中にコンフリクトが発生したので、解消して続ける
git rebaseが完了するまで以下①②を繰り返す。
現在の状況はgit statusで確認できる。
①git add .
コンフリクト発生箇所を直し、ステージする。
※現在の変更全てではなく、ファイルを限りたい場合は引数で指定する。
②git rebase --continue
コンフリクト発生箇所を修正すると通せるようになる。
コミット編集画面が開くが、コミットメッセージなどを変更しない場合は以下でよい。
保存「Ctrl + S」⇒閉じる「Ctrl + X」
git pull や git rebase使用時、
--autostashを付けると変更途中でもエラーにならずに最新化できる。
① 作業中の変更を一時退避(stash)
② 最新の変更を取り込む(rebase)
③ 退避した変更を元に戻す(stash apply)
【作業中に使うコマンド】~コミット・一時退避~
修正した内容をコミットにする
①→②で実施すること。
①git add . ※修正内容全てを含むなら
まだコミットを作成する前の段階、「変更をステージする」と言う。
1ファイルの修正のみなど、含む対象を限る場合は引数で指定する。
例: git add <ファイルパス>
②git commit -m "<コミットメッセージ>"
①でステージした変更内容をコミットという形にまとめる。
どういう変更内容なのか一目でわかるコミットメッセージを付ける。
※コミットメッセージを付けないなら引数(-m "")は不要。
変更した内容を取り消す(変更前に戻す)
git restore .
未コミットの変更を全て元に戻す。
ファイル名を引数に指定すると、対象ファイルの変更内容(未コミット)のみ取り消す。
変更中の内容を一時退避させる(修正中に他ブランチに移動したい時など)
git stash
ステージ前の変更、ステージ済みの変更を一時保存する。
これを行えばコミットにしなくてもブランチ移動が可能になる。
git stash -m ""で名前も付けられる。
git stashした内容を確認する
git stash list
一時保存されている内容が一覧として表示される。
git stashした内容を元に戻す
git stashした内容が作業ブランチに反映される。
引数を指定しない場合、最新のものが反映される。
どちらもstash@{<listで確認した番号>}を引数に指定することで選べる。
git stash pop
取り出して、一時保存を解消
git stash apply
取り出して、一時保存を残す
【作業後に使うコマンド】~リモート反映~
現状の状態をリモートに反映させる(pushする)
git push
コミットにしておかないとpushしても反映されないので注意。
※引数なしだと「関連付けられているブランチ」に反映される。
git push -f
ローカルが絶対!としてリモートを強制上書きする。
※rebaseを行ったりpush済みのコミットをいじったりしていると普通にpushできないので、これで強制上書きする。
(-fは-forceでもよい。)
⚠️リモートの履歴を上書きするため、使用には要注意。
共有ブランチで実行すると、他人のコミットを消してしまう可能性あり。
基本的には個人ブランチのみで使う。
共有ブランチで強制上書きを行いたい場合は以下を使うべき。
git push --force-with-lease
最後にfetchした時とリモートの状態を比べて、リモートに変更があった場合は強制上書きを行わない。
⇒他の人が知らないうちにpushしていたコミットを消してしまうことがない。
※push直前にfetchを行うと通ってしまうので注意。
(pushするのが初めてで、「関連付けられているブランチ」がないとき)
git push --set-upstream origin <ブランチ名>
「関連付けられているブランチ」をリモートに作成しつつpushを行う。
普通にpushしようとすると上記コマンドを提案してくれるのでそれをコピペでもOK。
(git push -u origin <ブランチ名>でもよい。)
【何か起きた時に使うコマンド】~履歴操作など~
ちょっと抜けてた修正を直近コミットに含めたい
git commit --amend
※含めたい変更はステージしておくこと。
直近コミットを上書きするコマンド。(ステージした変更内容が直近コミットに含まれる。)
上書きになるので使用には要注意。
コミットメッセージの修正も一緒にできる。
直近コミットを解除したい
git reset HEAD~1
コミットが解除され、変更内容は未ステージ状態として残る。
※コミットだけ取り消して、作業内容は残すイメージ。
引数に応じて変更内容の状態が変わる。
引数なし:未ステージ状態(上記の通り)
--soft:ステージ済み
--hard:完全に削除 (危険)
⚠️git reset --hardは変更内容が完全に削除されるため、実行前に必ず確認する。
1つ以上前のコミットを修正したい
git rebase -i HEAD~<直近何コミット>
雑に説明すると以下のイメージ。
①修正したいコミットまで全部引っこ抜く
②修正する
③生やし直す
以下のような編集画面が出てくるので、pick部分を変えることで色々できる。
※変えた後は保存して閉じる。
pick aaa111 <コミットメッセージ1>
pick bbb222 <コミットメッセージ2>
pick ccc333 <コミットメッセージ3>
以下、個人的に使用したことある2つを記載するが他にもある。
reword
対象コミットのコミットメッセージを修正する。
pick aaa111 <コミットメッセージ1>
reword bbb222 <コミットメッセージ2>
pick ccc333 <コミットメッセージ3>
この後rewordを記入したコミットに関して編集画面が表示されるので、修正する。
squash
対象コミットが上にある(より古い)コミットに統合される。
pick aaa111 <コミットメッセージ1>
squash bbb222 <コミットメッセージ2>
pick ccc333 <コミットメッセージ3>
保存して閉じると、以下のような編集画面が表示される。
メッセージをそのままにすると複数のコミットメッセージが残るため、不要な部分は削除して整理するのが一般的。
# This is a combination of 2 commits.
# The first commit's message is:
コミットメッセージ1
# This is the 2nd commit message:
コミットメッセージ2
ローカルをリモートで上書きしたい(完全一致させたい)
①→②で実施すること。
①git fetch
リモートの最新情報を取得する。
②git reset --hard origin/<ブランチ名>
作業ブランチを、指定したブランチのリモート状態で上書きする。
ローカルの状態を完全リセットしたい時に使用する。
※git pullに-forceはない。
おわりに
Gitは慣れるまで「毎回調べる」が当たり前のツールだと思います。
この記事が、「調べる時間を減らして手を動かす時間を増やす」 きっかけになれば嬉しいです。
困った時にとりあえず開くチートシートとして、活用してみてください。
「うちではこれも使う!」「このコマンドも便利!」などあれば、コメントでぜひ教えてください🙏
いいね・ストックしておくと、サッと引けて便利です👍