revertでコミットを打ち消す事にする
- 履歴を改編して
push -f
すれば無かったことに出来るのでしょうがやりたくないのでrevertすることにしました。- ところがPullRequest運用で出来たMergeのコミットに対してSourceTreeから上手くrevert出来なかったのでブログに残しておきます。
エラー発生
単純に取り消したい所を選んで右クリックで「コミット適用前に戻す」をしたらエラーになった。
git revert --help
でみると-m
というのは-m parent-number, --mainline parent-number
となっていてどうやらMergeのコミットの場合は戻るべき親が複数あるので位置を指定するらしいです。
SourceTreeのグラフ(樹形図)でも見えますけど、
git log --oneline --graph
とすると以下の様なものがでます。
* 7469d7e Merge pull request #2 from gozuk16/feature/2 |\ | * 60b8bb2 revert test 2 |/ * 6167dcb Revert "revert test 2" * 9d2615c revert test 2 * f4466bb Merge pull request #1 from gozuk16/feature/1 |\ | * e98d717 revert test 1 |/ * dd65d81 ローカルで修正 * e8a97f6 Initial commit
7469d7e
をrevertしたいとすると、どちらが親か決めないといけないので-m 1
というように親を指定します。- 1と言うのは
60b8bb2
と6167dcb
のうち6167dcb
を指定していることになります。- グラフの左側から1, 2, 3・・・と数えるらしいです。
- 1と言うのは
revert
- SourceTreeではパラメータが指定できなかったので端末(コンソール)を押してコマンドでやります。
- 複数revertするときは新しいコミットから遡っていきます。
- 今回は、
dd65d81
に戻りたいので7469d7e
とf4466bb
の2つを打ち消します。
$ git revert -m 1 --no-edit 7469d7e [master 62644c2] Revert "Merge pull request #2 from gozuk16/feature/2" 1 file changed, 1 deletion(-) $ git revert -m 1 --no-edit f4466bb [master b1e918e] Revert "Merge pull request #1 from gozuk16/feature/1" 1 file changed, 5 insertions(+), 6 deletions(-)
- SourceTreeでみると
62644c2
とb1e918e
の打ち消しコミットが2つで来ています。- 一番新しい打ち消しコミットの
b1e918e
と元に戻りたいdd65d81
を選択すると差異が無いことがわかります。
- 一番新しい打ち消しコミットの
rebase
- 普段はめったにrebaseしないのですが、さすがに打ち消しコミットが2つあると後でわかりにくいのでrebaseします。
- Pushしてお終い。