在开发过程中,通常(至少对我来说)在它们之间没有commit命令的情况下执行几个add命令。从这里,我想知道git是否支持文件中与上一次执行的add命令相关的撤消更改?这是一个说明性的例子:
假设您在一个干净的工作树上,该树具有唯一的文件 foo.txt 。您可以更改此文件中的某些内容,然后使用add命令将其添加到舞台区域。但是,要在序列中执行提交,您决定在文件 foo.txt 中执行更多更改。在一段时间之后,您意识到更改是不必要的,并且您想要撤消更改,而不是您不想撤消所有更改,而只是撤消在add命令之后执行的更改。
如何做到这一点?
谢谢
答案 0 :(得分:0)
如果文件是git added
:
git checkout file
会将磁盘上的文件还原为添加的状态。
答案 1 :(得分:0)
我可以先说,看起来git会保留添加到暂存区域的不同版本文件的历史记录。我远远不是一个git专家,但这就是我在内部看到git所做的事情。
我使用git init
创建了一个空的git存储库。然后我在这个名为“one”的目录中创建了一个文件,并在其中放置了文本“1”。然后我做了git add .
。跳转到.git\objects
文件夹,我看到一个对象文件夹(我暂时不包括info
和pack
文件夹。就我而言,文件夹是f3
。我进入那里,看到一个名为3dfa25aa16a97ca941fe1d9cabdc3689179f3f
的文件,所以我显示了它的内容:
git cat-file blob f33dfa25aa16a97ca941fe1d9cabdc3689179f3f
内容为“1”。
然后我在一个新的git存储库中重复了上面的过程,但这一次,我做了你提到的事情:编辑了一个文件,做了一个git add
,然后再编辑了一个文件并做了另一个{{1}在同一个文件上。现在,当我进入git add
文件夹时,我可以看到两个文件夹(同样,现在忽略.git\objects
和info
)。检查两个文件夹下每个blob的内容会显示我编辑的不同内容。
那么git是否在暂存区域中保留了这些不同对象的某种链接列表?这是一个有趣的问题,我很遗憾无法回答。
故事的寓意:提交在git中很便宜所以提前提交并经常提交。