我使用了以下命令:
git checkout dc8a2c845c615598b2be6a3a0f109f18c44dd836
返回上一次提交,并在提交后暂时丢弃更改,但是更改仍然存在,我错过了什么吗?
答案 0 :(得分:0)
git checkout
:如果有一些未提交的更改,则可以使用git stash
(Documentation)暂时“存储”它们。要检索它们,请使用git stash apply
或git stash pop
。第一个将应用更改并保存它们,使您可以再次应用它们,而后者将应用它们并将其从存储堆栈中删除。在这两种情况下,您的更改都将作为未分阶段的更改返回。
如果您使用git reset --hard
,所做的更改将会丢失,因此请务必小心。
编辑:
git checkout
没有按照您的意愿去做: git checkout dc8a2c845c615598b2be6a3a0f109f18c44dd836
将签出给定的提交,即,将当前分支的HEAD指针移至该提交。 las,由于您尚未在分支上进行的更改尚未提交,因此分支HEAD 已经指向该提交!因此,该命令不会更改任何内容,因为您未进行的更改不会受到更改分支HEAD指针的影响。
更详细:git知道三棵树:工作目录,索引和HEAD。有关详细说明,请参见this article about git reset。现在,根据ti its' documentation,git checkout
将
要准备在分支上工作,请通过更新工作树中的索引和文件,并将HEAD指向分支来切换到该分支。 保留对工作树中文件的本地修改
因此,如上所述,索引和工作树中的文件将更新为所提供提交中的状态,分支HEAD将指向该提交,但是局部更改(正是您要摆脱的更改) )保留!
答案 1 :(得分:-2)
git checkout
用于更改分支,但不放弃更改,我认为在这种情况下,您可能希望进行git checkout HEAD <file>
或git reset --hard
通讯