如何使用Git Revert
如何使用Git Revert
如何使用git revert
?
这可能听起来像是一个重复的问题,但是当人们提问时,常常会回答使用git reset
,参考Revert to a commit by a SHA hash in Git?。
然后当有人问如何使用git reset
时,人们会回复说你应该使用git revert
,参考Git - how to rollback。
在你知道之前,就有八个不同的人出现了,他们都有自己独特的方法来解决问题,而这些方法都超出了你的理解范围。
所以让我们尝试简明扼要地写一份关于git revert
的入门指南。
场景:你已经向主分支提交了两次,但是这是错误的。你已经推送了代码,其他人也有了你的错误更改。
你想要撤销这些更改。这不是你能手动撤销的,比如有些巫师或者包管理器在各个地方都改了一大堆东西 - 你只是想把它们都恢复成原样。
这就是源代码控制的意义所在。我相信这很容易。
好了,你要使用git revert
,但是怎么用呢?
在运行git revert
之后,你需要做其他的事情吗?你需要提交revert所做的更改吗,还是revert直接提交到仓库中呢?
显然,你还需要再次推送,并且可能要向团队通报你的错误。
如何使用Git Revert
问题:git revert和git reset的区别以及如何正确使用它们?
在使用Git的过程中,我们经常会遇到需要撤销某个提交的情况。虽然这个问题已经存在很长时间了,但是很多人(包括我)仍然对revert和reset产生困惑。
作为一个初学者,经过一番尝试和错误(错误比尝试多得多),我得出了一个重要的观点:
- git revert需要指定你想要撤销的提交的ID,并将其保留在历史记录中。
- git reset需要指定你想要保留的提交,并将其之后的所有内容从历史记录中移除。
换句话说,如果你使用revert来撤销第一个提交,你会发现自己处于一个空目录,并且历史记录中会有一个额外的提交;而如果你使用reset,你的目录将会回滚到初始提交的状态,并且历史记录将会回到最后一次提交之前的状态。
为了更加清楚地说明这个问题,假设现在的日志如下:
# git log --oneline
cb76ee4 wrong
01b56c6 test
2e407ce first commit
使用git revert cb76ee4命令会将你的文件恢复到01b56c6的状态,并在历史记录中添加一个新的提交:
8d4406b Revert "wrong"
cb76ee4 wrong
01b56c6 test
2e407ce first commit
而使用git reset 01b56c6命令会将你的文件恢复到01b56c6的状态,并从历史记录中清除之后的所有提交:
01b56c6 test
2e407ce first commit
我知道这些内容对于初学者来说可能是“基础知识”,但是对于我来说还是挺困惑的。当我运行revert命令时,我本来期望能够找到初始提交的文件,但是花了一段时间才明白,如果你需要将文件恢复到“first commit”的状态,你需要使用下一个提交的ID。
我曾经遇到过同样的问题。这确实令人困惑,但却非常重要。最近我帮助一个同事解决问题时忘记了这个细节,这让我有点尴尬。
总结起来,要正确使用Git的revert和reset命令,我们需要清楚它们的区别和使用方法。revert用于撤销指定提交的更改并保留在历史记录中,而reset用于将目录恢复到指定提交并从历史记录中移除之后的所有提交。希望这篇文章能够帮助大家更好地理解和使用Git的revert和reset命令。
如何使用Git Revert
在使用Git时,有时候我们会遇到需要撤销某个提交的情况。在Git中,可以使用Git Revert命令来实现这个功能。下面我们来看一下如何使用Git Revert以及出现的原因和解决方法。
Git Revert是这样使用的:
git revert <需要撤销的提交哈希值>
使用git revert
命令会创建一个新的提交,其中包含了需要撤销的更改。而git reset
命令会擦除Git历史记录,而不是创建一个新的提交。
使用Git Revert的步骤与其他提交的步骤相同。只需执行以下操作即可。
“撤销一个提交”和“撤销到某个提交”之间的区别是微妙的,这个命令让我纠结了很多年。你的解释立即解决了我的困惑。非常感谢!
通过上面的内容,我们了解到了如何使用Git Revert命令来撤销提交。Git Revert命令创建一个新的提交,其中包含了需要撤销的更改。与此不同的是,Git Reset命令擦除了Git历史记录而不是创建新的提交。需要注意的是,“撤销一个提交”和“撤销到某个提交”之间的区别是微妙的,可能会让人产生困惑。希望这篇文章对你有所帮助。
Git Revert 是一个用于撤销提交的命令。它通过创建一个与已有提交相反的新提交来实现撤销。撤销后的文件状态与撤销前的提交从未存在的状态相同。下面是一个示例:
假设有以下提交历史:
$ cd /tmp/example $ git init Initialized empty Git repository in /tmp/example/.git/ $ echo "Initial text" > README.md $ git add README.md $ git commit -m "initial commit" [master (root-commit) 3f7522e] initial commit 1 file changed, 1 insertion(+) create mode 100644 README.md $ echo "bad update" > README.md $ git commit -am "bad update" [master a1b9870] bad update 1 file changed, 1 insertion(+), 1 deletion(-)
使用 git revert 撤销最后一次提交:
$ git revert HEAD [master 1db4eeb] Revert "bad update" 1 file changed, 1 insertion(+), 1 deletion(-)
撤销后,提交历史中会有三个提交:
$ git log --oneline
1db4eeb Revert "bad update"
a1b9870 bad update
3f7522e initial commit
尽管提交历史中有记录,但文件的内容与撤销前的错误提交相同:
cat README.md Initial text
回答一些相关问题:
1. 是否需要在撤销后进行其他操作?
git revert 仅仅是另一个提交,所以可以将其推送到远程仓库,以便其他用户可以获取更改。
2. 撤销的更改是否需要提交?
git revert 本身就是一个提交,不需要额外的步骤。
3. 是否需要再次推送并通知团队?
如果远程仓库处于不稳定状态,通知团队拉取修复(撤销的提交)是正确的做法。
撤销还可以撤销撤销,即连续多次撤销。但可能会出现冲突问题。
有些人更喜欢在提交之前先查看更改,可以使用 git revert -n
总之,使用 git revert 可以方便地撤销提交,并保持提交历史的一致性。