软复位后缺少未跟踪的文件

时间:2018-02-09 12:24:42

标签: git git-checkout git-stash git-reset

最初我曾经犯过一个错误的分支,想要把它拿回来并提交给正确的分支(主人)。我想从How to fix committing to the wrong Git branch?

接受的答案中建议路线

所以我进行了软重置,据我所知,它使工作副本完全不受影响

git reset --soft HEAD^

然后尝试结帐主人

git checkout master

我被告知,某些本地更改会被结帐覆盖,我应该提交或存储更改。我选择藏匿它们。我使用了Git Extensions stashing命令,我相信它只是

git stash

至少那是我现在在其他存储库上尝试时显示的内容。我理解,这并不包含未跟踪的文件,但它也不会清除它们。

然后我通过Git Extensions GUI切换到主分支。然后我想弹出由于某些冲突导致失败的存储。此时我注意到,缺少一个未跟踪(但被忽略)的文件夹(。\ MyScripts)。其他未跟踪(和忽略)的文件(例如* .log文件)

我可以看到的区别在于,通过.git / info / exclude排除了MyScripts文件夹,并通过.gitignore排除了* .log文件

这对任何人都有意义吗?我的MyScripts文件夹在哪里?如何取回它?

1 个答案:

答案 0 :(得分:0)

只是一个注意事项:你提到的问题是,第二个答案更明智 - 尽管选票较少。

  

我的MyScripts文件夹在哪里?如何取回它?

如果你提交了它,那么它就在你Git对象数据库的某个地方 - 让我们恢复它;)

首先在软重置之前找出您的提交ID

$ git reflog

查看那里的提交,在软复位之前找到一个提交并将其写下来(可以git log -1 <commit>进行仔细检查,看看是否选择了合适的提示)。

现在结帐分支,清理你的混乱切换分支,可能失败的合并和可能失败的stash pop:

$ git checkout master
$ git reset --hard HEAD  # or HEAD~1 if you already committed something broken

最后,樱桃挑选哈希,你在reflog中发现并解决冲突,因为你打算解决它们:

$ git cherry-pick <commit>