今天我遇到了一种情况,在从上游分支机构撤出并重新定位之后,最近对上游分支的承诺表现得好像没有生效。
我记得的最佳顺序的症状:
在本地分支中进行编码时,Visual Studio解决方案文件似乎在没有我干预的情况下仍然被修改 - 其新内容在最近的提交中只删除了一个文件(但没有撤消其他3 .cs。和.prj文件)。看起来Visual Studio正在这样做,但我不确定。 (也就是说,git status
显示了一个新修改的.sln文件,但我的更改不应该影响项目。)
我无法构建解决方案,因为此文件已被修改且解决方案无法识别重要的新依赖项(引用添加到两个项目中)。丢弃修改后的文件(基于我希望从上游提交的最新提交中添加的更改的理论)没有帮助。
我一直在本地开发分支中进行更改,但无法看到我的单个本地提交如何导致这种奇怪 - 我只是没有做出那些改变。
< / LI>我关闭并重新打开VS,并多次清理并重建解决方案。
SmartGit日志除了我对本地分支机构所做的更多提交或更改外,没有显示任何其他提交或更改。
尝试删除任何混淆因素,我从本地开发分支切换到我的本地主分支(我通常保持不修改而不进行任何新提交)并重建项目,所有结果都相同。
我终于注意到,SmartGit日志提供了主人不是真正掌握的视觉证据。看一下SmartGit / Hg 5.0.3(build#2073)的这个屏幕截图:
这是在git控制台git checkout master
中发布后的结果。但是看看连接提交节点的蓝线:它显示我确实在历史记录中向后检查了第11个提交!
如果我发出git checkout master^
,那么它会正确检查第二次提交,并相应地调整蓝线。
如果我通过SHA git checkout a07df46
签出最近的提交,那么蓝线一直延伸到最顶层的提交。
当我执行git show-ref
时,它表示refs/heads/master
指向上游最近提交的SHA - 正如预期的那样。
我尝试了以下一系列命令,这些命令在状态上没有任何改进(SHA是最近一次从上游提交的命令):
git checkout HEAD^
git branch -f master master^
git branch -f master a07df46
git checkout master
我想要做的就是让我的存储库重新同步,这样我就可以继续开发了!
如果我不能很快搞清楚,我将把所有本地分支推送到个人远程分支(与上游主项目不同),删除我的本地存储库,在本地重新克隆上游存储库,然后从我的叉子拉回我关心的任何树枝。但是,我真的很想知道git是如何进入这个奇怪的主人但不是主人的状态的。
如何在不重新克隆整个存储库的情况下从这个奇怪的状态恢复?