繁体   English   中英

是否可以撤消与Git中最后添加命令的关系中的最后更改?

[英]Is it possible to undo the last changes in relation fo the last add command in Git?

在开发过程中,通常(至少对我来说)执行几个添加命令,而在它们之间没有提交命令。 由此,我想知道git是否支持相对于对其执行的最后一个add命令在文件中撤消更改? 这里有一个说明性的例子:

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

如何做到这一点?

谢谢

如果git added文件:

git checkout file

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

我可以说git确实保留了添加到登台区域的文件的不同版本的历史记录。 从长远来看,我不是git专家,但是我这样做是为了查看git内部的工作。

我使用git init创建了一个空的git存储库。 然后,我在此目录中创建了一个名为“ one”的文件,并在其中放置了文本“ 1”。 然后我做了一个git add . 跳到.git\\objects文件夹,我看到一个.git\\objects文件夹(我现在不包括infopack文件夹)。 在我的情况下,文件夹为f3 我进入那里,看到了一个名为3dfa25aa16a97ca941fe1d9cabdc3689179f3f文件,因此我显示了其内容:

git cat-file blob f33dfa25aa16a97ca941fe1d9cabdc3689179f3f

内容为“ 1”。

然后,我在一个新的git存储库中重复了上述过程,但是这次,我做了您提到的事情:编辑了一个文件,进行了git add ,然后对该文件进行了更多的编辑,并对同一文件进行了另一个git add 现在,当我进入.git\\objects文件夹时,我可以看到两个文件夹(同样,现在忽略infopack )。 检查两个文件夹下每个blob的内容,将显示我已编辑的不同内容。

那么git是否在登台区域中保留了这些不同对象的某种链表? 不幸的是,这是一个有趣的问题,我无法回答。

这个故事的寓意是:在git中提交很便宜,因此提早提交并经常提交。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM