当我签出我的主分支时,它实际上没有在git中检出

时间:2013-12-12 00:19:58

标签: git smartgit

今天我遇到了一种情况,在从上游分支机构撤出并重新定位之后,最近对上游分支的承诺表现得好像没有生效。

我记得的最佳顺序的症状:

  1. 在本地分支中进行编码时,Visual Studio解决方案文件似乎在没有我干预的情况下仍然被修改 - 其新内容在最近的提交中只删除了一个文件(但没有撤消其他3 .cs。和.prj文件)。看起来Visual Studio正在这样做,但我不确定。 (也就是说,git status显示了一个新修改的.sln文件,但我的更改不应该影响项目。)

  2. 我无法构建解决方案,因为此文件已被修改且解决方案无法识别重要的新依赖项(引用添加到两个项目中)。丢弃修改后的文件(基于我希望从上游提交的最新提交中添加的更改的理论)没有帮助。

  3. 我一直在本地开发分支中进行更改,但无法看到我的单个本地提交如何导致这种奇怪 - 我只是没有做出那些改变。

    < / LI>
  4. 我关闭并重新打开VS,并多次清理并重建解决方案。

  5. SmartGit日志除了我对本地分支机构所做的更多提交或更改外,没有显示任何其他提交或更改。

  6. 尝试删除任何混淆因素,我从本地开发分支切换到我的本地主分支(我通常保持不修改而不进行任何新提交)并重建项目,所有结果都相同。

  7. 我终于注意到,SmartGit日志提供了主人不是真正掌握的视觉证据。看一下SmartGit / Hg 5.0.3(build#2073)的这个屏幕截图:

    SmartGit Log Screen Shot

    这是在git控制台git checkout master中发布后的结果。但是看看连接提交节点的蓝线:它显示我确实在历史记录中向后检查了第11个提交!

    如果我发出git checkout master^,那么它会正确检查第二次提交,并相应地调整蓝线。

    如果我通过SHA git checkout a07df46签出最近的提交,那么蓝线一直延伸到最顶层的提交。

  8. 当我执行git show-ref时,它表示refs/heads/master指向上游最近提交的SHA - 正如预期的那样。

  9. 我尝试了以下一系列命令,这些命令在状态上没有任何改进(SHA是最近一次从上游提交的命令):

    git checkout HEAD^
    git branch -f master master^
    git branch -f master a07df46
    git checkout master
    
  10. 我想要做的就是让我的存储库重新同步,这样我就可以继续开发了!

    如果我不能很快搞清楚,我将把所有本地分支推送到个人远程分支(与上游主项目不同),删除我的本地存储库,在本地重新克隆上游存储库,然后从我的叉子拉回我关心的任何树枝。但是,我真的很想知道git是如何进入这个奇怪的主人但不是主人的状态的。

    如何在不重新克隆整个存储库的情况下从这个奇怪的状态恢复?

0 个答案:

没有答案