如何使用Git还原

如何使用Git还原,git,Git,如何使用git revert 这听起来像是一个重复的问题,但当人们问这个问题时,答案通常是,按照 然后,当有人问如何使用git reset时,人们会回答说您应该按照 在你意识到这一点之前,8个不同的人以他们自己独特的方式出现,来拯救OP的屁股,所有这些都是你无法理解的 因此,让我们试着坚持简要说明,并编写一份git revert的《傻瓜指南》 一个场景:你已经向master承诺了两次,结果很糟糕。你推动了,其他人也有你不好的改变 你想撤销它。这不是你自己可以在代码中手动撤销的东西,比如说一些向导

如何使用
git revert

这听起来像是一个重复的问题,但当人们问这个问题时,答案通常是,按照

然后,当有人问如何使用
git reset
时,人们会回答说您应该按照

在你意识到这一点之前,8个不同的人以他们自己独特的方式出现,来拯救OP的屁股,所有这些都是你无法理解的

因此,让我们试着坚持简要说明,并编写一份git revert的《傻瓜指南》

一个场景:你已经向master承诺了两次,结果很糟糕。你推动了,其他人也有你不好的改变

你想撤销它。这不是你自己可以在代码中手动撤销的东西,比如说一些向导或包管理器改变了很多东西——你只是想让它恢复原样

这就是源代码管理的全部内容。我相信这很容易

好的,您将使用
git revert
但是如何使用呢

运行
git revert
之后,您还需要做其他事情吗?您是否必须提交所做的更改,或者是否直接提交回购协议,或者什么


显然,您需要再次推球,并可能向团队宣布您的球。

使用git revert,如下所示:

git还原

git revert
使用回滚的更改创建新的提交
git reset
删除git历史记录,而不是重新提交


之后的步骤与任何其他提交步骤相同。

在相同的对话中经常出现的原因是因为不同的版本控制系统使用它们来表示不同的事情

特别是,习惯使用SVN或P4的人,如果他们想扔掉对文件未提交的更改,通常会在被告知他们实际上想要重置之前,先进行
还原

类似地,其他VCSE中的
revert
等价物通常称为
rollback
或类似的东西,但“rollback”也可以表示“我想完全放弃最后几次提交”,这适用于
reset
,但不适用于
revert
。因此,人们知道自己想做什么,但不清楚应该使用哪个命令,这就存在很多困惑

至于你对回复的实际问题

好的,您将使用git revert,但是如何使用呢


git还原第一次错误提交^..最后一次错误提交

编辑:注意第一次错误提交的
^
字符。这是引用第一次错误提交的父级,因为还原范围不包括开始提交

在运行git revert之后,您还需要做其他事情吗?您是否必须提交所做的更改,或者是否直接提交回购协议,或者什么

默认情况下,
git revert
会提示您输入提交消息,然后提交结果。这可以被覆盖。我引述:

--编辑

使用此选项,git revert将允许您在提交回复之前编辑提交消息。如果从终端运行命令,这是默认值

--不承诺

通常,该命令会自动创建一些提交,其中包含提交日志消息,说明哪些提交已恢复。此标志应用将命名提交还原到工作树和索引所需的更改,但不进行提交。此外,使用此选项时,索引不必与头提交匹配。还原是针对索引的开始状态进行的

这在将多个提交的效果恢复到一行中的索引时非常有用

特别是,默认情况下,它会为要恢复的每个提交创建一个新的提交。您可以使用
revert--no commit
创建更改,还原所有更改,而不将这些更改作为单独的提交提交,然后在空闲时提交。

git revert进行新的提交
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(-)
日志中将有3次提交:

$ git log --oneline
1db4eeb Revert "bad update"
a1b9870 bad update
3f7522e initial commit
因此,对所发生的事情有一个一致的历史记录,但这些文件似乎从未发生过错误的更新:

cat README.md 
Initial text
要还原的提交在历史记录中的何处并不重要(在上面的示例中,最后一次提交被还原-任何提交都可以被还原)

结束问题 之后你还要做些别的事情吗

git revert只是另一个提交,例如,推到远程,以便其他用户可以拉/取/合并更改,您就完成了

您必须提交所做的更改,还是直接提交回购

git revert
是一个提交-假设您想做的是恢复单个提交,则不需要额外的步骤

显然,你需要再次推动,并可能向团队宣布


事实上,如果远程设备处于不稳定状态,则与团队其他成员进行通信,告知他们需要拉动以获得修复(还原提交)将是正确的做法:)。

我通过运行“git revert commit id”还原了一些提交,例如:

git revert b2cb7c248d416409f8eb42b561cbff91b0601712
然后,系统提示我提交还原(就像运行“git commit”时一样)。我的默认终端程序是Vim,因此我运行:

:wq 
最后,我使用以下工具将更改推送到存储库:

git push

这个问题已经很老了,但仍然让人困惑(比如我)

作为一名初学者,经过反复尝试(错误多于尝试),我有一个重要的观点:

  • git revert
    需要委员会的id
    # git log --oneline
    
    cb76ee4 wrong
    01b56c6 test
    2e407ce first commit
    
    8d4406b Revert "wrong"
    cb76ee4 wrong
    01b56c6 test
    2e407ce first commit
    
    01b56c6 test
    2e407ce first commit