如何使用Git Revert
如何使用git revert
?
这可能听起来像一个重复的问题,但当人们问它时,响应通常是,使用git reset
按照恢复由Git中的SHA哈希提交?
然后当有人问如何使用git reset
人员回复说你应该使用git revert
每个Git - 如何回滚
在你知道它之前,有8个不同的人用他们自己独特的方式来拯救OP的屁股,所有这些都在你的头上。
因此,让我们尝试和坚持简短的和写一个傻瓜指南git revert
。
情景:你已经承诺两次掌握和不好。 你推动了,其他人也有你的不良变化。
你想撤消它。 这不是你可以自己手动撤销代码的东西,比如某个向导或者软件包管理者在整个地方改变了大量的东西 - 你只是想把它全部换回原来的样子。
这是源代码控制的全部内容。 我相信它很容易。
好吧,你要使用git revert
但是如何?
并且在运行git revert
,你git revert
要做其他事情吗? 你必须提交所做的更改或恢复直接提交回购或什么?
很明显,你需要再次推送,并可能向球队宣布你的球。
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恢复:
$ 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
是一个提交 - 没有额外的步骤假设恢复单个提交是你想要做的。
很明显,你需要再次推送,并可能向团队宣布。
事实上 - 如果遥控器处于不稳定状态 - 与团队的其他成员沟通,他们需要进行修复(恢复提交)才是正确的做法:)。
reset
和revert
的原因往往会在相同的对话中出现很多,因为不同的版本控制系统使用它们来表示不同的事情。
特别是,习惯了SVN或P4的人们想要抛弃对文件的未提交更改通常会在被告知他们实际需要reset
之前进行revert
。
同样,其他VCS中的revert
等价物通常称为rollback
或类似的东西 - 但“回滚”也可能意味着“我想完全丢弃最后几次提交”,这适用于reset
但不能revert
。 所以,人们知道他们想要做什么的时候存在很多混淆,但他们不清楚应该使用哪个命令。
至于你关于还原的实际问题...
好吧,你要使用git revert,但是如何?
git revert first-bad-commit..last-bad-commit
并且在运行git revert之后,你还需要做其他事情吗? 你必须提交所做的更改或恢复直接提交回购或什么?
默认情况下, git revert
会提示您提交提交消息,然后提交结果。 这可以被覆盖。 我引用手册页:
- 编辑
使用这个选项,git revert可以让你在提交恢复之前编辑提交信息。 如果您从终端运行命令,这是默认值。
--no提交
通常,该命令会自动创建一些提交日志消息,提交哪些提交已恢复。 此标志应用必要的更改以将命名的提交恢复到您的工作树和索引,但不进行提交。 此外,使用此选项时,您的索引不必与HEAD提交匹配。 回复是针对索引的开始状态完成的。
将多个提交的效果还原为连续的索引时,这非常有用。
特别是,默认情况下,它会为您正在恢复的每个提交创建一个新的提交。 您可以使用revert --no-commit
创建恢复所有这些更改而无需将这些更改作为单独提交进行提交的更改,然后在您闲暇时进行提交。
使用git恢复如下所示:
git revert <insert bad commit hash here>
git revert
用回滚的更改创建一个新的提交。 git reset
会擦除你的git历史记录,而不是进行新的提交。
之后的步骤与其他任何提交相同。
链接地址: http://www.djcxy.com/p/18829.html