A. 直前(1世代前)のコミットを書き換える
1. 編集する(修正する)
1 |
$ vim <file> |
2. 修正をステージングする
1 |
$ git add <file> |
3. コミットする(修正した内容でコミットをやり直す)
1 |
$ git commit --amend |
B. 2世代以上前のコミットを書き換える
リベースする
1 |
$ git rebase -i HEAD~3 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
pick eeb019d delete the fold lines pick 83235ee brush up the cutting lines pick 87ded2d update the version : 0.4.0 # Rebase f55fdf9..87ded2d onto f55fdf9 (3 commands) # # Commands: # p, pick = use commit # r, reword = use commit, but edit the commit message # e, edit = use commit, but stop for amending # s, squash = use commit, but meld into previous commit # f, fixup = like "squash", but discard this commit's log message # x, exec = run command (the rest of the line) using shell # d, drop = remove commit # # These lines can be re-ordered; they are executed from top to bottom. # # If you remove a line here THAT COMMIT WILL BE LOST. # # However, if you remove everything, the rebase will be aborted. # # Note that empty commits are commented out |
上から下へ 古いコミット ⇒ 新しいコミット の順にリストアップされる。 git log のリストアップ順序と逆。
- p, pick = コミットをありのまま使う。
- r, reword = コミットを使う。ただし、コミットメッセージだけは編集する。
- e, edit = コミットを編集する。amend でコミットをやり直すことができる。
- s, squash = コミットを使う。ただし直前のコミットと一本化する。コミットメッセージを編集(マージ)する手順あり。
- f, fixup = コミットを使う。ただし直前のコミットと一本化する。コミットメッセージを編集する手順なし。fixupがマークされたコミットメッセージは破棄する。
- d, drop = コミットを捨てる。
X. コミットにまとめる。一緒にする。
複数のコミットの歴史を1つにまとめるだけで、リベース後の結果は同一である。
行頭のpick を squash に書き換えて上書き保存する。
Y. コミットをやり直す。
過去のいずれかのコミットを別のコミット(修正)に差し替える。リベースの結果は異なる。ただし、コミットコメント『だけ』を変更したときはリベースの結果は同一である。
1. 修正する(やり直す)コミットを指定する。
行頭のpick を edit に書き換えて上書き保存する。
2. 編集する(修正する)。
1 |
$ vim <file> |
3. 修正をステージングする。
1 |
$ git add <file> |
4. コミットする(修正した内容でコミットをやり直す)。
1 |
$ git commit --amend |
5. リベースを継続する。
1 |
$ git rebase --continue |