2つ以上前のcommitにamendする
2つのパターンがある
今から作るcommitを、過去のcommitにamendしたい
既にあるcommitを、他のcommitにamendしたい
今から作るcommitを、過去のcommitにamendしたい
対象の変更をstagingに入れる
$ git fixup
選択肢が出るので、該当のcommitを選択
$ git rebase -i
正規の手順
対象の変更をstagingに入れる
$ git commit --fixup <target hash>
$ git rebase -i --autosquash <target hash>~
target commitの末尾にgitの~をつけて1つ前を指定する 2段階の省略ができる
commit hashを省略
--autosquashを省略
editorが開くが何もせずに閉じれば良い
--fixupの引数は、
対象のcommitのcommit hashでもいいし、
@^^^や@~3のようなheadからの相対でもいいし、
:/<targetのmessageの部分文字列>でも良い
e.g. 対象のcommitのcommit messageがhogepiyoなら:/hogeとか:/gepとか
こうしてcommitした場合、
commit messageは、fixup!: <対象のcommit message>のような表示になる
fixupを複数溜めてから後でまとめてautosquashしてもいい
--fixupを使わずとも、自分でcommit messageに「fixup!」と書いてもいい
付けると自動的にrebase表示時の場所を移動してくれるため、
特に何の編集も不要でeditorを閉じれば操作が完了する
いちいちautosquashを後でやるのがめんどいな?mrsekut.icon
これが一番ラクmrsekut.icon
既にあるcommitを、他のcommitにamendしたい
上と同じことを手動でやるイメージ
手順
$ git rebase -i <target hash>~
targetはamendする対象のことmrsekut.icon
fixupを指定する
普通のrebaseのときのように、targetの下に移動させる
code:log
pick 4917aae amend先のtargetとなるcommit
fixup 50689a2 今からamendしたいcommit
fixupを指定する
editorを閉じる
ちょいテク
まとめてsquashをやるgithub actionもあるらしい
globalなgit hookで同じことできないかな