Gitで親にするブランチを間違えて作業してコミットした時の対処法
この対処方法が使える時
ブランチ作成時、予定と違うブランチを親にしてしまった。なおかつコミットもしてしまった。
*方法1:git rebase --onto
作業ブランチの派生元を修正する方法
sourcetree上ではできない操作なので、ターミナルにおとなしくコマンドを打つ。
code:git
# git rebase --onto {本来親にしたかったブランチ} {間違って親にしてしまったブランチ名} {親を変更する作業ブランチ名}
$ git rebase --onto origin/master work/A work/B
このコマンドはコミットの改変に当たるので、すでにpush済のブランチではエラーの原因になる。
push済だったブランチの場合、リモートとローカルの履歴が不整合になるため普通にpushしようとしてもエラーになる。
-fオプションをつけて強制的にpushする必要がある。
$ git push -f origin work/B
一人で作業しているブランチなら問題ないが、他の人と共同で作業しているブランチで勝手に過去のコミットを改変するのはダメなので容量用法を守って作業しましょう。
方法2:git cherry-pick
方法1が難しければ、新しいブランチを作り直す。
新しい作業ブランチを正しく作っておき、git cherry-pickを使って欲しいコミットだけを適用する。
sourcetreeからでもできるので無理にコマンド打たなくてもよい。
code:git
# 正しくブランチを作り直す
$ git checkout -b work/B-new origin/develop
# work/B分の作業だけを適用する
# git cherry-pick {コミットID}
$ git cherry-pick abcdef