読者です 読者をやめる 読者になる 読者になる

Gitでbranchを切らずにコミットしてしまった場合の対処

Gitでbranchを切るのを忘れて、masterや他のbranchにcommitしてしまった場合にcommitをそのまま移動させる方法。
commitが1つの場合はresetなどでcommitを取り消してworking treeをgit stashなどで保存してbranchを切れば良いが、commitを複数していた場合に、commitをそっくりそのまま移転させたい場合がある。
度々やらかしそうなので、メモとして残す。
参考は以下。
Gitでブランチを作るのを忘れてmasterにコミットしてしまったときの対処法 - Qiita

git branch newbranch commitnum

まず、移転先のbranchを作る。ここではnewbranchという名前で作っている。commit_numは本来branchをきるべきだった場所を差すコミット番号。もしくはbranch名を指定すればbranchの居るHEADから新しくbranchが切られる。

git checkout newbranch

何はともあれ移転先のbranchに移動する。

git cherry-pick commit_num1
git cherry-pick commit_num2

移転したいcommitのコミット番号をcherry-pickコマンドでコピーする。
コミット番号の指定は元のコミットの順番で行うこと。
つまり、commit_num1の方がcommit_num2より早くに行われたcommitである。
これでコピーされているので、git logなどで確認する。
後は、間違った方のcommitを消すだけ。

git checkout master
git reset --hard HEAD~n

masterは消したいcommitのbranch名で、nは消したいコミットの数。