如何让我的远程仓库的主分支和我的本地仓库在团队资源管理器中恢复同步?
情况:我在远程git仓库中的VSTS中有我的应用程序代码。我在Master中完成所有工作,通常在我的本地(达拉斯)机器上,并使用VS 2017 Team Explorer“SYNC”定期将其同步到VSTS上的远程仓库。
8月25日,我对代码进行了一些更改,但尚未提交。 8月26日,我不得不去奥斯汀进行为期三天的访问。在奥斯汀,我不得不对代码进行一些更改,所以我将VSTS的repo克隆到我的笔记本电脑,进行了更改,提交了它们(请参阅下面的提交8af),然后同步回VSTS。
8月29日我回到达拉斯后,我进入了本地机器,意识到我有一些未提交的工作,并且已经提交了它(请参阅下面的提交310)。然后我尝试在VSTS上与主服务器同步并得到“tip is behind”错误(参见下面的日志)。
尝试了拉动并得到另一个错误:
拉动操作失败。拉取会覆盖对以下3个文件的本地更改:
.vs/slnx.sqlite
/Account/Logout.cshtml
/App_Data/RESTORE BackupFile to SQL 2016 localdb.sql
从那时起,尝试遵循(有用的?)提示和错误消息,我遇到了更深的麻烦,添加了一些更多的本地提交,现在我很困惑。 VS 2017中Git集成的美妙之处在于它让您不必了解很多关于git的知识。这也是那种设置中的邪恶!当我不得不在VS 2017的抽象之下工作时,我非常无能为力
我想最终得到历史和达拉斯当地的回购,看起来像这样
Commit ORIGIN Local Notes
3d6 X(HEAD) X(HEAD)
db9 X X
5e6 X X
310 X X
8af X X
aa8 X X
与当前状态相反:
Commit ORIGIN Local
3d6 X(HEAD)
db9 X
5e6 X
310 X
8af X(HEAD)
aa8 X X (common parent of 8af and 3d6)
希望这个描述和下面的(编辑过的)日志信息可以帮助我帮助我摆脱困境。原始的git文档是不可理解的。我尝试了Revert并重置(没有完全理解它们)并且无处可寻,但遇到了麻烦。
我的情况似乎不适合我通过谷歌搜索和堆栈溢出找到的任何解决方案。
我最好的猜测是git push -f
。我是唯一一个在这个应用程序上工作的人。但是,考虑到git push -f危险的所有警告,我很担心。如果我在上面的场景中做过git push -f
,会被覆盖什么?我猜它会提交8af(它只是在原始主服务器上,并且具有最近提交的公共父服务器。这是正确的猜测吗?
我很感激有人告诉我这里需要做些什么。
编辑(“合并”)日志(所有提交,所做的更改等都在主分支中)C:\ Users \ rrrob \ Source \ VS2017Rafino> git log
提交3d6(HEAD - > master)NOT IN ORIGIN Thu Aug 30 08:38:18 2018 -0500
commit db9 Wed Aug 29 16:01:53 2018 -0500 NOT IN ORIGIN
commit 5e6 Wed Aug 29 15:08:24 2018 -0500 NOT IN ORIGIN
8月29日回到达拉斯,承诺以前未提交的Master更改并尝试同步。收到“推送到远程存储库时遇到错误:拒绝更新被拒绝,因为当前分支的提示位于远程对应的后面。在再次推送之前集成远程更改。”试图从原点拉()可能是Fetch?)并收到进一步的错误:“拉动操作失败。”提交310 8月29日星期三15:05:47 2018 -0500 NOT IN ORIGIN(parent isaa8)
26月8日去了奥斯汀,克隆回购,改变了主人,承诺并与主人同步提交8af周二8月28日12:56 5:56 PM(UTC)不在达拉斯本地回购(父母是aa8)
团队资源管理器中最后一次成功的SYNC在达拉斯提交aa8 8月16日15:10:06 2018 -0500
提交a8b Tue Aug 14 10:32:43 2018 -0500
经过大量的谷歌搜索和极大的惶恐(因为我找不到任何完全适合我的情况),我做了以下事情:
(1)我做了一个git藏匿把变化停放在藏匿处
(2)拉伸产生2是否冲突(在从VS 2013进入VS 2017后,我的解决方案中突然出现的sql lite文件)
(3)通过对它们进行git add来解决2“两个修改过的”冲突
(4)承诺所有这些的结果
(5)返回VS团队资源管理器同步 - 成功!
没有技巧,只是纯粹,愚蠢的运气。任何进入git的行为至少对我来说都是白痴旅程。
我怀疑造成这种情况的原因是我在主分支中对克隆回购(当我在路上时)进行了更改。我可能应该在一个新分支中这样做,将新分支推到远程,然后发出一个拉取请求,提醒我在回到我的家乡位置后合并新分支。
另外,我确实相信当MS引入SQLlite DB来跟踪IDE状态时,他们没有考虑它对Team Explorer的影响。即使我在忽略文件中有.VS目录,对db的更改也会始终显示在团队资源管理器的更改窗口中。混乱!