Post

Git Rollback Strategies

The difference between git revert and git reset, and when to use each for rolling back commits.

并不适合阅读的个人文档。

git revertgit reset 的区别

sourceTreerevert 译为提交回滚,作用为忽略你指定的版本,然后提交一个新的版本。新的版本中已近删除了你所指定的版本。

reset重置到这次提交,将内容重置到指定的版本。git reset 命令后面是需要加2种参数的:–-hard–-soft。这条命令默认情况下是 -–soft

执行上述命令时,这该条commit号之 后(时间作为参考点)的所有commit的修改都会退回到git缓冲区中。使用git status 命令可以在缓冲区中看到这些修改。而如果加上-–hard参数,则缓冲区中不会存储这些修改,git会直接丢弃这部分内容。可以使用 git push origin HEAD --force 强制将分区内容推送到远程服务器。

代码回退

默认参数 -soft,所有commit的修改都会退回到git缓冲区 参数--hard,所有commit的修改直接丢弃

1
2
3
4
$ git reset --hard HEAD^ 		回退到上个版本
$ git reset --hard commit_id	退到/进到 指定commit_id 推送到远程	

$ git push origin HEAD --force

可以吃的后悔药->版本穿梭

当你回滚之后,又后悔了,想恢复到新的版本怎么办?

git reflog打印你记录你的每一次操作记录

1
2
3
4
5
6
7
8
9
$ git reflog

输出:
c7edbfe HEAD@{0}: reset: moving to c7edbfefab1bdbef6cb60d2a7bb97aa80f022687
470e9c2 HEAD@{1}: reset: moving to 470e9c2
b45959e HEAD@{2}: revert: Revert "add img"
470e9c2 HEAD@{3}: reset: moving to 470e9c2
2c26183 HEAD@{4}: reset: moving to 2c26183
0f67bb7 HEAD@{5}: revert: Revert "add img"

找到你操作的id如:b45959e,就可以回退到这个版本

1
$ git reset --hard b45959e
This post is licensed under CC BY 4.0 by the author.