是否可以撤消Git中最后一个添加命令的最后更改?

时间:2017-01-12 15:47:19

标签: git

在开发过程中,通常(至少对我来说)在它们之间没有commit命令的情况下执行几个add命令。从这里,我想知道git是否支持文件中与上一次执行的add命令相关的撤消更改?这是一个说明性的例子:

假设您在一个干净的工作树上,该树具有唯一的文件 foo.txt 。您可以更改此文件中的某些内容,然后使用add命令将其添加到舞台区域。但是,要在序列中执行提交,您决定在文件 foo.txt 中执行更多更改。在一段时间之后,您意识到更改是不必要的,并且您想要撤消更改,而不是您不想撤消所有更改,而只是撤消在add命令之后执行的更改。

如何做到这一点?

谢谢

2 个答案:

答案 0 :(得分:0)

如果文件是git added

git checkout file

会将磁盘上的文件还原为添加的状态。

答案 1 :(得分:0)

我可以先说,看起来git会保留添加到暂存区域的不同版本文件的历史记录。我远远不是一个git专家,但这就是我在内部看到git所做的事情。

我使用git init创建了一个空的git存储库。然后我在这个名为“one”的目录中创建了一个文件,并在其中放置了文本“1”。然后我做了git add .。跳转到.git\objects文件夹,我看到一个对象文件夹(我暂时不包括infopack文件夹。就我而言,文件夹是f3。我进入那里,看到一个名为3dfa25aa16a97ca941fe1d9cabdc3689179f3f的文件,所以我显示了它的内容:

git cat-file blob f33dfa25aa16a97ca941fe1d9cabdc3689179f3f

内容为“1”。

然后我在一个新的git存储库中重复了上面的过程,但这一次,我做了你提到的事情:编辑了一个文件,做了一个git add,然后再编辑了一个文件并做了另一个{{1}在同一个文件上。现在,当我进入git add文件夹时,我可以看到两个文件夹(同样,现在忽略.git\objectsinfo)。检查两个文件夹下每个blob的内容会显示我编辑的不同内容。

那么git是否在暂存区域中保留了这些不同对象的某种链接列表?这是一个有趣的问题,我很遗憾无法回答。

故事的寓意:提交在git中很便宜所以提前提交并经常提交。