git revert和git reset的区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了git revert和git reset的区别相关的知识,希望对你有一定的参考价值。

git revert 放弃某次提交

git revert 之前的提交仍会保留在git log中,而此次撤销会做为一次新的提交。

git reset 是回滚到某次提交

git reset --soft

此次提交之后的修改会被退回到暂存区

git reset --hard

此次提交之后的修改不做任何保留,git status干净的工作区。

git rebase 当两个分支不在一条直线上,需要执行merge操作时,使用该命令操作。

该命令执行时极有可能显示merge失败,如下图1,使用git
diff命令查看冲突内容,手动

修改冲突,git add filename,表示冲突已解决,再执行git
rebase --continue,继续rebase。

图1


git rebase 执行结果如下图2

图2


参考技术A git revert 是撤销某次操作,此次操作之前的commit都会被保留

git reset 是撤销某次提交,但是此次之后的修改都会被退回到暂存区

具体一个例子,假设有三个commit, git st:

commit3: add test3.c

commit2: add test2.c

commit1: add test1.c

当执行git revert HEAD~1时, commit2被撤销了

git log可以看到:

commit1:add test1.c

commit3:add test3.c

git status 没有任何变化

如果换做执行git reset --soft(默认) HEAD~1后,运行git log

commit2: add test2.c

commit1: add test1.c

运行git status, 则test3.c处于暂存区,准备提交。

如果换做执行git reset --hard HEAD~1后,

显示:HEAD is now at commit2,运行git log

commit2: add test2.c

commit1: add test1.c

运行git st, 没有任何变化

另外:

git revert <commit log string>是撤消该commit,作为一个新的commit。本回答被提问者和网友采纳

git reset 和 git revert 有啥区别?

【中文标题】git reset 和 git revert 有啥区别?【英文标题】:What is the difference between git reset and git revert?git reset 和 git revert 有什么区别? 【发布时间】:2015-01-17 21:59:03 【问题描述】:

嗨,我是 git 的新手,我不明白 git resetgit revert 之间的基本区别是什么。 git revert 是否恢复被推送的合并?

【问题讨论】:

What's the difference between Git Revert, Checkout and Reset?的可能重复 是的,我在这里找到了解决方案,以及在我发布问题后不久您提到的链接 【参考方案1】:

git revert:通过创建新的提交来撤消对本地/原始存储库的提交的更改部分。

command: git revert <id>

git reset:Git reset 将删除/撤消在本地 repo 中提交的更改。它通过 3 种方式撤消更改,--soft、--mixed、--hard。其中mixed是默认值。

工作目录(编码)->暂存区(索引)->本地回购(git push)

git reset –soft/mixed/hard –HEAD~N -> mixed is default

git reset --soft HEAD~N   # will move file/changes  from local commit to staging area
git reset --mixed HEAD~N  #will move file/changes  from local commit to working directory
git reset --hard HEAD~N  #will delete file /changes from working directory 

【讨论】:

【参考方案2】:

Git reset -->将分支的尖端移动到不同的提交。这可用于从当前分支中删除提交。它通过提交向后移动分支。 Git Revert-->通过创建新提交来撤消提交。这是撤消更改的安全方法,因为它没有机会重写提交历史记录。

【讨论】:

【参考方案3】:

据我所知,他们正在做完全不同的事情。

git revert 旨在恢复先前提交的效果。例如,

A <- B <- C 
          ^ HEAD

如果我发现我之前提交的 B 是错误的,并且我想“撤消”它的更改,git-revert-ing B 将导致:

A <- B <- C <- B'
               ^ HEAD

B' 正在反转 B 中所做的更改。

git reset 更直接,它只是将 HEAD 设置为某个提交,

A <- B <- C 
          ^ HEAD

git-reset-ting to B会给你

A <- B <- C 
     ^ HEAD

【讨论】:

如果答案正确且有帮助,请考虑接受。 哦,是的,当然.. 接受 有没有办法用命令行显示“树图”(例如:A @Catbuilts 类似git log --graph? 除此之外还有什么作用吗?我注意到在不小心将分支 A 合并到分支 B 之后,然后恢复了合并提交,那么就不可能再将 A 合并到 B 中了。但只能通过还原还原提交。

以上是关于git revert和git reset的区别的主要内容,如果未能解决你的问题,请参考以下文章

git revert和git reset的区别

git reset 和 git revert 有啥区别?

git reset --hard xxx、git reset --soft 及git revert的区别

一文彻底搞清git reset和revert区别

一文彻底搞清git reset和revert区别

一文彻底搞清git reset和revert区别