我一直致力于Visual Studio解决方案,该解决方案包含大约40或50个项目。
我已经向.sln文件添加了大约10个项目,但与此同时还有其他人在.sln文件中添加了一个项目。
如此有效地存在一个文件--V1,两个人独立地创建了两个独立的V2。
我发现合并这些变化是一场噩梦。我正在使用的机器上安装了BeyondCompare,它向我展示了三列合并。我无法理解,所以我决定用git认为远程版本覆盖我的本地文件。 但后来我又重新添加了新项目的问题。
因此。在我做第90次pull + rebase / commit之前,有没有一种简单的方法来解决这个问题? 比如,用远程端的内容覆盖当前的所有内容副本。然后重新添加我新添加的项目。然后提交。构建+测试。然后推。也许?
*编辑:FWIW,机器也安装了龟甲,现在一切都显示绿色滴答......所以这样很好吗?
答案 0 :(得分:1)
如果你要求Git /其他工具知道在远程的sln文件中添加了项目,添加它们,然后添加我添加的项目 - 不应该是你的方法。
修复合并冲突,以便在遥控器上添加的所有项目和您添加的项目都在那里。
答案 1 :(得分:1)
首先,让我们回到已知状态。做一个git reflog
并在尝试完成所有这些拉动和重新定位之前找到一个提交点。执行git checkout -b my-feature <commit-id>
创建一个名为my-feature
的分支,指向该提交。如果没有来自服务器的所有最新更改,请验证它是否按预期工作。
现在,通过执行master
使您的git branch -f master origin/master
分支与服务器上的内容匹配。
现在来了困难的部分。您必须解决更改内容与服务器上更改内容之间的合并冲突。这是在小组中工作的正常部分,你应该有条不紊地学习如何去做,而不是翻阅它。 This是一个很好的资源。超越比较是帮助解决3向合并的一个非常好的工具,你应该学会使用它。
有时,如果您有一个由工具生成而不是手工编写的文件,则可以更轻松地使用该工具进行更改,只需删除您的本地更改并稍后再添加它们。如果您不太了解sln文件的语法,可能就是这种情况。
要更改只是sln文件以匹配服务器上的内容,请执行以下操作:
git checkout master -- filename.sln
git commit -am "Reset solution file to match origin"
然后添加项目并正常再次提交文件。现在,您希望将这些更改发送到主分支。做:
git rebase master
# resolve any merge conflicts, then git rebase --continue after each one
git checkout master
git merge my-feature
# test to make sure everything works
git push
答案 2 :(得分:0)
我处于'相同但不同'的情况。我已将问题分为两部分。一个是简单地捕捉我可以的历史,并将其放入一个标称的快照/提交序列中。我可以识别出许多不同的子项目和阶段,因此在捕获阶段每个都有自己的回购。然后,我可以graft
将它们放在一起,并使用git filter-branch
将它们整合到一个重要的历史中。
对于当前的工作,我从适当的'现在'点开始新的git repo,并且还继续使用已建立的合并技术,并将转储到git仓库直到我们可以将这两个过程完全融合在一起。有些人需要一些令人信服的信息。 (自我)管理意味着我们不敢放弃目前的做法,直到新的做法显示出来。
“获得”git哲学需要一段时间,并放弃旧的根深蒂固但错误的方法。