如何git revert使用?
这可能听起来像一个重复的问题,但是当人们问它时,响应通常git reset是按照Reit对Git中的SHA哈希的提交使用?
然后当有人询问如何使用git reset人们回复说你应该git revert按照Git使用- 如何回滚
在你知道它之前,有8个不同的人出现了他们自己独特的方法来保存OP的屁股,所有这些都是你的头脑.
因此,让我们试着坚持简介并写一个假人指南git revert.
一个场景:你已经承诺了两次掌握和坏.你已经推动了,其他人也做了不好的改变.
你想撤消它.这不是你自己可以在代码中手动撤销的东西,比如一些巫师或包管理器改变了大量的东西 - 你只想把它全部放回去.
这就是源控制的全部内容.我很确定这很简单.
好的,你打算用,git revert但怎么样?
跑完之后git revert你还得做点什么吗?您是否必须提交已恢复的更改或确实还原直接提交到repo或什么?
显然你需要再次推进并且可能会向球队宣布你的球.
AD7*_*six 82
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(-)
Run Code Online (Sandbox Code Playgroud)
在此示例中,提交历史记录有两个提交,最后一个提交是错误的.使用git revert:
$ git revert HEAD
[master 1db4eeb] Revert "bad update"
1 file changed, 1 insertion(+), 1 deletion(-)
Run Code Online (Sandbox Code Playgroud)
日志中将有3个提交:
$ git log --oneline
1db4eeb Revert "bad update"
a1b9870 bad update
3f7522e initial commit
Run Code Online (Sandbox Code Playgroud)
所以发生的事情有一致的历史记录,但文件好像从未发生过错误的更新:
cat README.md
Initial text
Run Code Online (Sandbox Code Playgroud)
在历史中返回的提交在哪里无关紧要(在上面的示例中,最后一次提交被还原 - 任何提交都可以还原).
之后你还要做点什么吗?
一个git revert是刚刚另一个承诺,所以如推到远程,以便其他用户可以拉/读取/合并的变化,你就大功告成了.
您是否必须提交已还原的更改或直接恢复提交到repo?
git revert 是一个提交 - 没有额外的步骤,假设恢复单个提交是你想要做的.
显然你需要再次推动,并可能向团队宣布.
确实 - 如果遥控器处于不稳定状态 - 与团队的其他人沟通他们需要拉动以获得修复(恢复提交)将是正确的做法:).
Joh*_*y Z 25
像这样使用git revert:
git revert <insert bad commit hash here>
git revert使用回滚的更改创建新提交.git reset删除你的git历史记录而不是新的提交.
后面的步骤与任何其他提交相同.
nns*_*nse 23
这个问题已经很老了,但恢复仍然让人们感到困惑(比如我)
作为初学者,经过反复试验(错误多于试验)后,我得到了一个重要的观点:
git revert需要您要删除的提交的 ID 将其保留在您的历史记录中
git reset需要您要保留的提交,并且因此会从历史记录中删除此后的任何内容。
也就是说,如果您使用revert第一个提交 ID,您会发现自己进入一个空目录并在历史记录中进行了额外的提交,而重置您的目录将......恢复到初始提交,您的历史记录将变得好像最后一次提交从未发生过。
更清楚的是,使用这样的日志:
# git log --oneline
cb76ee4 wrong
01b56c6 test
2e407ce first commit
Run Code Online (Sandbox Code Playgroud)
默认情况下,使用git revert cb76ee4会将您的文件带回 01b56c6 并将进一步提交到您的历史记录:
8d4406b Revert "wrong"
cb76ee4 wrong
01b56c6 test
2e407ce first commit
Run Code Online (Sandbox Code Playgroud)
git reset 01b56c6 而是将您的文件带回 01b56c6 并从您的历史记录中清除任何其他提交:
01b56c6 test
2e407ce first commit
Run Code Online (Sandbox Code Playgroud)
我知道这些是“基础知识”,但对我来说很困惑,通过revert在第一个 id(“第一次提交”)上运行我期待找到我的初始文件,花了一段时间才明白,如果你需要你的文件回来作为“第一次提交”,您需要使用下一个 ID。
Tox*_*rog 19
究其原因reset,并revert往往会拿出很多相同的谈话是因为不同的版本控制系统使用它们来表示不同的东西.
特别是,习惯于SVN或P4的人如果想要丢弃文件中未提交的更改,通常会revert在被告知他们确实需要之前达到reset.
类似地,revert其他VCS中的等价物通常被称为rollback或类似的东西 - 但"回滚"也可以表示"我想完全丢弃最后几次提交",这适用于reset但不是revert.因此,人们知道他们想要做什么会有很多困惑,但是他们不清楚他们应该使用哪个命令.
至于你关于还原的实际问题......
好的,你将使用git revert但是怎么样?
git revert first-bad-commit..last-bad-commit
运行git revert之后你还需要做些什么吗?您是否必须提交已恢复的更改或确实还原直接提交到repo或什么?
默认情况下,git revert提示您输入提交消息,然后提交结果.这可以被覆盖.我引用手册页:
- 编辑
使用此选项,git revert将允许您在提交还原之前编辑提交消息.如果从终端运行命令,则这是默认设置.
--no提交
通常,该命令会自动创建一些提交日志消息,提交哪些提交已被还原.此标志应用将命名提交还原到工作树和索引所需的更改,但不进行提交.此外,使用此选项时,索引不必与HEAD提交匹配.恢复是针对索引的开始状态完成的.
在将多个提交效果还原到行中的索引时,这非常有用.
特别是,默认情况下,它会为您要还原的每个提交创建一个新提交.您可以使用revert --no-commit创建更改所有更改的更改,而无需将这些更改作为单独提交提交,然后在您的闲暇时提交.