4

如果这个问题已经在某个地方得到了彻底、明显和多次的回答,我很抱歉;但是在搜索了至少一周后,我一直无法找到有关我遇到的这个特定问题的信息。

为简化起见,我们有 3 个人在做一个项目,每个人都有自己的分支,我们会定期将其合并回主干。问题是我们要么发生冲突(试图挑选樱桃),要么它似乎只是覆盖了 master 的所有文件,前 2 个分支与最后一个分支合并,实际上什么都不合并,只是覆盖。

我的问题是(希望)很简单:

主干线

string test1;
string test2;
string test3;

test1 分支

 string test1 = "Dan Branch merged";
 string test2;
 string test3;

test2 分支

string test1;
string test2 = "Dave Branch merged";
string test3;

test3 分支

string test1;
string test2;
string test3 = "Will Branch merged";

合并所有 3 个分支时的所需输出:

string test1 = "Dan Branch merged";
string test2 = "Dave Branch merged";
string test3 = "Will Branch merged";

当我尝试合并测试 1 和 2 时,我实际得到的是:

自动合并失败;修复冲突,然后提交结果。

  <<<<<<< HEAD
 +        String test1 = "Dan Branch merged";
 +        String test2;
 +        String test3;
  =======
+         String test1;
+         String test2 = "Dave Branch merged.";
+         String test3;
  >>>>>>> test2

我目前在 Windows 上使用 git-gui(计划在我最终了解 git 时更改为 bash/shell/cli)所以如果有可能,如果有专门针对git-gui,但乞丐当然不能选择。

为了让事情变得简单,存储库位于本地网络文件夹而不是任何服务器上。我不知道这是否会影响实现(如果我猜对了它们的用法,我想 push 和 pull 将不会被使用)

目前 Git 已被降级为存储和浏览旧版本的方法,因为所有合并都是手动完成的。

4

1 回答 1

1

您处理代码的方式可能不是处理分布式开发的常规方式。我建议(如果在开发过程中可以访问主干线)以下步骤来完成这项工作:

git stash     (to put your changes away for the moment)
git pull      (to get the latest commits)
git stash pop (to get back, what was stashed away in the first step)

然后解决你的冲突。这应该不像合并整个分支时那么多。然后:

git commit
git push

重要提示:避免更改分支并在 master 上工作。分支更常用于并行开发事物,而不是每天都致力于掌握。例如,当启动一个新的、主要版本的软件时,会更改很多旧代码或 api,因此您不能简单地将它们推送到 master,因为提交会破坏整个包的稳定性。

编辑:

为了尊重 David 的评论:在 git 中使用分支并没有什么坏处,但我遇到过一两个案例,其中分支处理不当会导致混乱,没有经验的 git 用户很难理解和解决。不过,那些处理错误不应该是平常的。

编辑:

事实证明,您确实总共只有一个本地存储库。在我看来,起初你有一个你都推送到的 LAN 存储库。所以如果你不改变你的基础设施(我不推荐它。另一种选择是http://bitbucket.org和每个人在他的计算机上都有自己的存储库克隆)那么(我认为)没有其他方法拥有三个分支。我强烈建议您阅读 git 教程,例如http://www.vogella.com/articles/Git/article.html以更改您的基础架构。祝你好运。

于 2012-06-19T12:57:54.000 回答