在git混乱中从头开始



我一直在开发一个包含大约40或50个项目的Visual Studio解决方案。

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

因此,实际上有一个文件——V1,两个人独立创建了两个单独的V2。

我发现合并这些更改是一场噩梦。我使用的机器上安装了BeyondCompare,它显示了一个三列合并。我想不通,所以我决定用git认为的远程版本覆盖我的本地文件。但后来我遇到了重新添加新项目的问题。

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

*编辑:FWIW,这台机器也安装了乌龟git,现在一切都用绿色勾号显示。。。这很好,对吧?

如果你想让Git/其他工具知道在remote中的sln文件中添加了项目,请添加它们,然后添加我添加的项目-不,这不应该是你的方法。

只需修复合并冲突,使在远程上添加的所有项目和您添加的项目都在那里。

首先,让我们回到已知状态。做一个git reflog,找到一个在你尝试做所有这些拉取和重定基础之前的提交。执行git checkout -b my-feature <commit-id>以创建一个名为my-feature的分支,该分支指向该提交。请验证它是否按预期工作,而没有来自服务器的所有最近更改。

现在,通过执行git branch -f master origin/master,使您的master分支与服务器上的分支相匹配。

现在是困难的部分。您必须解决您更改的内容和服务器上更改的内容之间的合并冲突。这是团队工作的正常部分,你应该有条不紊地学习如何做到这一点,而不是翻来覆去。这是一个很好的资源。Beyond compare是一个非常好的工具,可以帮助解决3向合并,你应该学会使用它。

有时,如果你的文件是由工具生成的,而不是手工编写的,那么使用该工具进行更改会更容易,只需擦除本地更改,然后再添加回来。如果您并不真正理解sln文件的语法,那么您可能会遇到这种情况。

要更改仅sln文件以匹配服务器上的内容,请执行:

git checkout master -- filename.sln
git commit -am "Reset solution file to match origin"

然后添加您的项目并像往常一样再次提交文件。现在您希望将这些更改放到master分支上。Do:

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

我的处境"相同但不同"。我把这个问题分为两部分。一种是简单地捕获我能捕获的历史记录,并将其放入快照/提交的名义序列中。我可以识别出许多不同的子项目和阶段,因此每个项目在捕获阶段都有自己的回购。然后,我可以将它们graft放在一起,并使用git filter-branch将它们整合到一个大历史中。

对于当前的工作,我既从合适的"现在"开始一个新的git repo,也继续使用已建立的合并技术,将转储到git repo中,直到我们可以将这两个过程完全融合在一起。有些人需要一些令人信服的&(自我(管理意味着在新的做法奏效之前,我们不敢放弃目前的做法。

这需要一段时间才能"获得"git哲学,并放弃旧的根深蒂固但错误的方法。

最新更新