使用git stash,检出之前提交的版本并返回

3

我想回到一个提交记录,查看当时的情况,于是我这样做了。

git stash

我保存了我的更改,然后使用了...

git checkout <hash>

在完成探索后,我只想回到原处,所以我使用了

git stash apply

现在文件已经混乱了,使用git log时无法看到更多的提交记录。发生了什么?我如何回到之前的状态?
编辑:尝试执行git checkout master,但出现冲突(一个README.md,标记为“被我们删除”)。于是我添加了它,存储了我的更改,使用git checkout master,然后应用了存储。解决了README.md的冲突,一切正常。Git让我头疼。

1
暂存区是用来保存变更的,而不是完整的内容。如果我没记错的话,git checkout @{-1}; git stash apply 应该可以实现这个功能。@{-1} 表示“我刚刚检出的分支”,你也可以直接指定它的名称。 - undefined
“完整内容”指的是暂存的更改吗?当我执行 git stash 时,暂存区中没有任何内容。问题出在我应用了暂存内容,而此时我选择了之前的提交,对吗?我猜是这样,因为我重复了这个过程,但这次在执行 git stash apply 前使用了 git checkout master 回到了之前的状态,结果和我预期的一样。 - undefined
1
就是这样了:git stash apply(如果你已经完成了暂存,可以使用pop)会合并暂存的更改。发生的一切只是你的暂存工作无法干净地应用到其他提交上。 - undefined
1个回答

2

首先,您需要撤销使用 git stash apply 造成的混乱。您可以使用 git reset --hard HEAD 来进行操作。(警告:这将放弃所有本地更改。)然后,您需要检出之前的分支。如果您没有执行其他 git checkout 命令,则可以使用 git checkout @{-1} 来检出上一个分支。最后,您可以使用 git stash apply 将您的暂存恢复到之前工作的位置,就像在这一切发生之前一样。


哦,我之前不知道@{-1}这部分的含义,它具体是什么意思呢?我能不能用git checkout master代替呢? - undefined
1
@zok它指的是你之前检出的分支。正如你已经发现的那样,你也可以明确提供分支名称。 - undefined
2
使用现代的git,您还可以使用git checkout -,它的功能类似于cd - - undefined
@Ruslan 你应该将那个作为一个答案发表出来。 - undefined
好的...在Eclipse中工作...所以我执行了git reset --hard HEAD,但是当我执行git stash apply时,出现了一个错误:"应用存储的提交'16117a3'失败,原因是'应用存储的更改导致冲突'",这并没有提供实质性的帮助,而且似乎我无法访问我的存储。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接