[英]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
文件夹(我现在不包括info
和pack
文件夹)。 在我的情况下,文件夹为f3
。 我进入那里,看到了一个名为3dfa25aa16a97ca941fe1d9cabdc3689179f3f
文件,因此我显示了其内容:
git cat-file blob f33dfa25aa16a97ca941fe1d9cabdc3689179f3f
内容为“ 1”。
然后,我在一个新的git存储库中重复了上述过程,但是这次,我做了您提到的事情:编辑了一个文件,进行了git add
,然后对该文件进行了更多的编辑,并对同一文件进行了另一个git add
。 现在,当我进入.git\\objects
文件夹时,我可以看到两个文件夹(同样,现在忽略info
和pack
)。 检查两个文件夹下每个blob的内容,将显示我已编辑的不同内容。
那么git是否在登台区域中保留了这些不同对象的某种链表? 不幸的是,这是一个有趣的问题,我无法回答。
这个故事的寓意是:在git中提交很便宜,因此提早提交并经常提交。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.