【问题标题】:Missing untracked files after soft reset软重置后丢失未跟踪的文件
【发布时间】:2018-07-20 05:19:48
【问题描述】:

最初我提交了错误的分支,想收回它并提交给正确的分支(master)。我想走How to fix committing to the wrong Git branch?接受的答案中建议的路线

所以我做了一个软重置,据我了解,工作副本完全保持原样

git reset --soft HEAD^

随后尝试结帐主节点

git checkout master

有人告诉我,某些本地更改会被结帐覆盖,我应该提交或存储这些更改。我选择把它们藏起来。我使用了 Git Extensions 存储命令,我认为这很简单

git stash

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

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

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

这对任何人都有意义吗?我的 MyScripts 文件夹在哪里?怎么找回来?

【问题讨论】:

  • 在你切换分支之前被忽略了吗?现在是忽略了吗?意思是,在您切换分支之前和之后,.gitignore 中是否列出了该文件夹?
  • 如果你的 MyScripts 文件没有被跟踪并且你没有运行 git clean,它就不会触及你的 MyScripts 文件。所以你应该在你放置它的地方找到它。
  • @LasseVågsætherKarlsen 除了 .git/info/exclude 文件之外,它从未出现在任何其他文件中。它之前被忽略了,我不知道,因为它已经消失了;-)
  • @basslo 这就是我的想法,但我看不到它

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


【解决方案1】:

请注意:在您提到的问题中,第二个答案更明智 - 尽管选票较少。

我的 MyScripts 文件夹在哪里?怎么找回来?

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

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

$ git reflog

查看其中的提交,找到软重置之前的提交并将其写下来(也许通过git log -1 <commit> 再次检查您是否选择了合适的提交)。

现在结帐分支,从切换分支清理你的烂摊子,可能失败的合并和可能失败的存储弹出:

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

最后,您在 reflog 中找到的cherry pick hash 并按照您的意愿解决冲突:

$ git cherry-pick <commit>

【讨论】:

  • 我不得不承认,我只是选择了第一个选项,因为它对我来说很有意义(并且可能因为它背后有社会证明)。不幸的是,它从未被承诺过,这都是个人发展的东西,没有人会理解。因此个人忽略
  • 您以“我已经提交到错误的分支”开始了这个问题 - 因此我认为是这种情况。如果没有提交,reflog 将无法帮助您检索您的更改,抱歉。
  • 没有指责,但它说:“此时我注意到,一个未跟踪(但被忽略)的文件夹丢失了(.\MyScripts)。其他未跟踪(和忽略)的文件在那里(例如 *.log 文件)”是您忽略了它还是我的术语不准确?
  • 试试git reflog refs/stash。您能在其中记录的隐藏提交之一中找到丢失的文件夹吗?
  • 不,在其中找不到任何内容。也不在git fsck --unreachable 的结果中,我会在某处找到文本 sn-p MyScripts,对吧?
猜你喜欢
  • 2019-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-23
  • 2018-07-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多