0%

Safety rollback remote commit for git

Rollback changelist是很常做的事情,不過在git這種分散式控制系統就有點麻煩了
假設我們現在有這樣的Commit history

1
2
3
4
5
$ git log --oneline
e922d2b (HEAD -> master) ver 4
1b01602 ver 3
10dd293 ver 2
72d57f9 ver 1

而我們現在要退回ver 2該怎麼做

危險的作法

直接開大絕

1
2
$ git reset 10dd293 --hard
$ git push origin master

然而自己一個人玩玩還行,團體行動絕對沒有人建議這麼做

安全的作法

1
2
3
4
5
6
7
8
$ git checkout 10dd293 -b v2 # 切換新分支
$ git merge -s ours master
$ git log --oneline
ce6c1ea (HEAD -> v2) Merge branch 'master' into v2
e922d2b (master) ver 4
1b01602 ver 3
10dd293 ver 2
72d57f9 ver 1

可以看見HEAD指向v2的new commit了,比較一下

1
$ git diff HEAD..10dd293

然後可以把v2推向remote了

1
2
3
$ git push origin master
$ git push origin v2:master
$ git push origin HEAD:master

三者等價

Reference

安全地回滚远程分支