コミットログ操作

直前のコミットの内容を修正したい

$ git commit --amend

--amend オプションを指定してコミットすると、現在のブランチの先頭のコミットに上書きすることができます。

発展編 【コミットの書き換え】 直前のコミットを修正する 発展編 【チュートリアル3 コミットを書き換えよう!】 1. commit --amend

直前のコミットのコメントだけを修正したい

$ git commit --amend

インデックスにファイルを登録していない状態で --amend オプションを指定して再コミットを行います。コメントの入力画面が表示されるので、コメントを修正します。

発展編 【コミットの書き換え】 直前のコミットを修正する 発展編 【チュートリアル3 コミットを書き換えよう!】 1. commit --amend

過去のコミットの内容を修正したい

$ git rebase -i <commit>

指定したコミットより後のコミットを指定すると、コミットの一覧が表示されます。その中から修正したいコミットを見つけてその行の pick の文字を edit に変更して保存・終了します。

次に、修正したいファイルを編集、保存した後に --amend オプションを指定してコミットを行います。

$ git commit --amend

最後に、--continueオプションを指定してrebaseを実行します。

$ git rebase --continue

発展編 【コミットの書き換え】 コミットの履歴を書き換える 発展編 【チュートリアル3 コミットを書き換えよう!】 6. rebase -i でコミットを修正する

過去のコミットのコメントだけを修正したい

$ git rebase -i <commit>

指定したコミットより後のコミットを指定すると、コミットの一覧が表示されます。その中からコメントを修正したいコミットを見つけてその行の pick の文字を edit に変更して保存・終了します。

次に、--amend オプションを指定してコミットを行います。コメントの入力画面が表示されるので、コメントを修正します。

$ git commit --amend

最後に、--continueオプションを指定してrebaseを実行します。

$ git rebase --continue

発展編 【コミットの書き換え】 コミットの履歴を書き換える 発展編 【チュートリアル3 コミットを書き換えよう!】 6. rebase -i でコミットを修正する

rebaseを途中で中止したい

$ git rebase --abort

--abort オプションを指定して rebase コマンドを実行すると rebase を取りやめることができます。

HEADの移動履歴を見たい

$ git reflog

reflog コマンドを実行することで、過去に HEAD が指していたコミットの一覧を見ることができます。

08084a5 HEAD@{0}: commit: pullの説明を追加
99daed2 HEAD@{1}: commit: commitの説明を追加
48eec1d HEAD@{2}: checkout: moving from master to issue1
326fc9f HEAD@{3}: commit: addの説明を追加
48eec1d HEAD@{4}: commit (initial): first commit

この一覧には削除したコミットや rebase 等によってまとめられたコミットなども表示されます。

ブランチの先頭の移動履歴を見たい

$ git reflog <ref>

<ref> にブランチ名を指定して reflog コマンドを実行することで、過去にそのブランチの先頭が指していたコミットの一覧を以下のような形式で見ることができます。

445e0ae issue1@{0}: commit (merge): Merge branch 'master' into issue1
1c904bd issue1@{1}: commit (amend): pullの説明を修正
08084a5 issue1@{2}: commit: pullの説明を追加
99daed2 issue1@{3}: commit: commitの説明を追加
48eec1d issue1@{4}: branch: Created from 48eec1ddf73a7fb508ef664efd6b3d873631742f

この一覧には削除したコミットや rebase 等によってまとめられたコミットなども表示されます。

直前のコミットをなかったことにしたい

rebaseをなかったことにしたい

$ git reset --hard <commit>

まず最初に reflog コマンドを使用して rebase する直前のコミットを探し、そのコミットのハッシュ値または「HEAD@{数字}」の値を確認します。 以下の履歴は update 2 のコミットをした後に rebase コマンドで2つのコミットをまとめた後の履歴ですが、71bdfbdおよびHEAD@{4}が適当なコミットです。

a51f8d2 HEAD@{0}: rebase -i (finish): returning to refs/heads/dev
a51f8d2 HEAD@{1}: rebase -i (squash): update 1
3a273e1 HEAD@{2}: rebase -i (squash): updating HEAD
f55ef69 HEAD@{3}: checkout: moving from dev to f55ef69
71bdfbd HEAD@{4}: commit: update 2
f55ef69 HEAD@{5}: commit (amend): update 1

見つけ出したそのハッシュ値または「HEAD@{数字}」の値を<commit>に指定して reset コマンドを実行します。

これは rebase によって移動したブランチの先頭の位置を rebase する前のコミットの位置に戻すことで、rebase をなかったことにしています。

直前のresetをなかったことにしたい

$ git reset --hard ORIG_HEAD

reset 前のコミットは ORIG_HEAD という名前で参照できるので、これを指定して reset します。

発展編 【コミットの書き換え】 コミットを捨てる 発展編 【チュートリアル3 コミットを書き換えよう!】 3. reset

ブランチを間違えてしまったコミットを移動したい

$ git cherry-pick "<commit>"

<commit>に指定したコミットを現在のブランチにコピーします。

発展編 【コミットの書き換え】 コミットを抜き取る 発展編 【チュートリアル3 コミットを書き換えよう!】 3. cherry-pick

特定のコメントを含むコミットを探したい

$ git log --grep "<pattern>"

<pattern>に指定した文字がコミットログに含まれるコミットだけを表示します。