git revert <from> .. <to> - 什么是真的还原?

时间:2016-03-21 10:01:53

标签: git git-revert

git-revert文档说:

git revert -n master~5..master~2  

将提交所做的更改从master(包含)中的 fifth 最后一次提交恢复到master(包含)第三次最后一次提交>

但我的观察显示出不同的东西 通话结束后:

git revert HEAD~1..HEAD

删除最后一次提交而不是前一次提交。

所以我说:

git revert -n master~5..master~2

将主要(包含)中第四次最后一次提交的提交所做的更改还原为master(包含)中的 second 最后一次提交。

其他示例: git revert HEAD 恢复上次提交 - 这没关系

git revert HEAD.. 表示给定列表为空 - 我希望它还会恢复上一次提交,因为文档说左边界已包含在内。

我是对的吗?

1 个答案:

答案 0 :(得分:1)

让我们在您的问题中做出一些命令。

在我们开始之前,我们有一些术语

Terminology

What is HEAD in depth

HEAD    = Current commit 
../ ... = Commit range (from ... to)
revert  = Undo the given change

<强> git revert -n master~5..master~2

  

将提交所做的更改从master(包含)中的第五次提交恢复为master(包含)中的第三次提交

您正在使用范围。范围是 从...到 ,在您的情况下从5到2(不包括)。

  

git revert HEAD~1..HEAD
  删除最后一次提交而不是上一次提交。

您正在告诉git:请恢复previous commit up to the last one范围内的内容,以便撤消上次提交[不包括] HEAD~1的更改,直至当前提交HEAD

  

其他示例:git revert HEAD恢复上次提交 - 这没关系

在这种情况下,您将提供单个 SHA-1(HEAD),以便还原给定的提交。它与恢复历史上的任何其他提交相同。

# revert commit XYZ
git revert XYX

# revert the current commit (git will extract the HEAD SHA-1)
# (Again read the linked post above to fully understand what is HEAD)
git revert HEAD 
  

git revert HEAD.. 表示给定列表为空

如上所述,..代表范围。您提供了列表中唯一的一侧(缺少/来取决于您如何看待它)

如果我们回到这里: git revert -n master~5..master~2 幕后发生的事情是这样的:

 for (index=first SHA-1 to index= last SHA-1)
     git revert SHA-1


  git revert -n master~5..master~2 ->

     git revert -master~5
     git revert -master~4
     git revert -master~3