区别:
reset:回退到某一个历史版本;(回滚到某个commit)
revert:重做某一个历史版本(回滚某个 commit)
假如有三个提交,A-->B-->C(head-->master):
1、reset B变为:A-->B;
2、revert B变为:A-->C。
reset命令介绍(原文)
当要回退到某一次提交的状态时,可以使用git reset命令。
git reset [--soft | --mixed | --hard] [<commit>]
其中,<commit>是指commit的hashcode。(可以使用git log查看hashcode)
也可以使用HEAD代替<commit>,命令为
git reset [--soft | --mixed | --hard] [HEAD]
补充:
1、上一次commit(倒数第二次):HEAD^ 或者 HEAD~1
2、上上一次commit(倒数第三次):HEAD^^ 或者 HEAD~2
3、--soft仅将head指针指向历史版本,不会改变工作区和暂存区的内容
4、--mixed将head指针指向历史版本,且用历史版本的暂存区覆盖当前暂存区(默认的选项)
5、--hard将head指针指向历史版本,同时覆盖工作区和暂存区的内容(比较危险慎用)
回滚具体情况的使用:(原文)
1、已修改,未git add
git checkout . (git checkout .和git add .是一对反义词)
2、已git add,未commit(到了暂存区)
git reset 先用Head指针覆盖当前的暂存区内容
git checkout . 再用暂存区内容覆盖工作区内容
或者
git reset --hard 直接使用head覆盖当前暂存区和工作区
3、已经commit,未push
git reset --mixed HEAD^ 覆盖本地的暂存区
git checkout .
或者
git reset --hard HEAD^
(git reset --soft HEAD^ 相当于回退到倒数第二次commit,并且已git add,未commit)
4、已经push
对于已经提交到远端的公共分支比如master上的commit只能用revert来进行回退操作
revert命令介绍
撤销某次操作(删除指定的commit操作的内容),此次操作之前和之后的commit和history都会保留,并且把这次撤销作为一次最新的提交。
撤销最新的提交:git revert HEAD
撤销最新的三次提交:git revert HEAD~3...HEAD
说明:
git revert X...Y:
X...Y 代表一个左开右闭区间(X,Y],不包括X,包括Y. 其中Y为起点commit,X为终点commit的下一个commit。
Git的reset和revert命令在回退版本时有关键区别。reset回退到特定版本,删除之后的提交历史;revert则保留历史,新增一个撤销原有提交的新提交。在不同场景下,如未add、已add未commit、已commit未push或已push的情况,使用不同的reset选项。已经push的公共分支上,推荐使用revert。
1312

被折叠的 条评论
为什么被折叠?



