在git mess中从头开始?

时间:2011-08-22 16:16:01

标签: git version-control git-extensions

我一直致力于Visual Studio解决方案,该解决方案包含大约40或50个项目。

我已经向.sln文件添加了大约10个项目,但与此同时还有其他人在.sln文件中添加了一个项目。

如此有效地存在一个文件--V1,两个人独立地创建了两个独立的V2。

我发现合并这些变化是一场噩梦。我正在使用的机器上安装了BeyondCompare,它向我展示了三列合并。我无法理解,所以我决定用git认为远程版本覆盖我的本地文件。 但后来我又重新添加了新项目的问题。

因此。在我做第90次pull + rebase / commit之前,有没有一种简单的方法来解决这个问题? 比如,用远程端的内容覆盖当前的所有内容副本。然后重新添加我新添加的项目。然后提交。构建+测试。然后推。也许?

*编辑:FWIW,机器也安装了龟甲,现在一切都显示绿色滴答......所以这样很好吗?

3 个答案:

答案 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哲学需要一段时间,并放弃旧的根深蒂固但错误的方法。