Git:合并多个分支

4

如果这个问题已经被彻底、明显地回答了很多次,我很抱歉;但是我已经搜索了至少一个星期,仍然找不到关于我遇到的问题的信息。

简单来说,我们有3个人在一个项目上工作,每个人都有自己的分支,我们经常将它们合并回主干。问题是,我们要么会出现冲突(尝试挑选),要么似乎只是覆盖了主干和前两个分支的所有文件,最终没有合并任何内容,只是覆盖了。

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

主干

string test1;
string test2;
string test3;

测试1分支

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

测试2分支

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

测试3分支

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

当所有三个分支合并时,期望的输出如下:
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已经被降级成只是一种存储和浏览旧版本的方法,因为所有合并操作都是手动完成的。

你是因为三个贡献者不会将他们的提交合并到主分支中,还是因为你不知道其他替代方法,所以才使用了cherry-pick? - Christoph Eberhardt
@ChristophEberhardt 我不知道有什么替代方案。我们都按规定工作时间工作,在这些时间内,我们都获取当前的主干代码并在不同的部分上进行开发。如果我们尝试逐个将它们合并回主干代码,似乎只会用合并的分支覆盖被合并的分支。 - Daemeous
在将一个分支合并到主分支之后,你是否需要在解决冲突后再提交? - Christoph Eberhardt
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

重要提示:避免更改分支,直接在主分支上进行工作。分支通常用于并行开发,不会每天提交到主分支。例如,在开始一个新的、重大版本的软件时,会更改旧代码或API的大部分内容,因此不能简单地将它们推送到主分支,因为提交会使整个软件包不稳定。

编辑:

为了尊重David的评论:在git中使用分支没有任何问题,但我曾经遇到过一两个情况,其中不正确处理的分支导致混乱,使得一个没有经验的git用户很难理解和解决。然而,这些处理错误不应该是常见的。

编辑:

实际上,总之你只有一个本地仓库。一开始我认为你们有一个局域网仓库,大家都往里面推送。所以如果你不更改基础架构(我不建议这样做。另一种选择是使用 http://bitbucket.org 并让每个人在自己的电脑上克隆自己的仓库),那么除了拥有三个分支外就没有其他方法了(我认为)。我强烈建议你阅读像 http://www.vogella.com/articles/Git/article.html 这样的 Git 教程来更改你的基础架构。祝你好运。


@ChristophEberhardt 感谢您的时间和帮助。我们使用本地网络文件夹来保持简单(我在您第一条评论之前不久添加了这个,所以您可能读到了旧版本)。我假设那些是为了如果您设置了服务器。如果我是正确的,您能否请给出有效的本地设置说明?再次感谢。 - Daemeous
@Daemeous 我还能以其他方式帮助你吗? - Christoph Eberhardt
@ChristophEberhardt 抱歉,我按了回车键想要换行,但是它却发布了评论,我已经编辑好了。 - Daemeous
@Daemeous 抱歉,如果您没有具体问题,那么在不知道您对Git的了解程度以及哪些方面需要解释的情况下,很难用简短的答案来解释Git处理。例如,您使用cherry-pick的方式不清楚,但我猜测您可能不需要它,通过使用git merge -> 解决冲突 -> 提交所有内容并推送,然后下一个贡献者可以执行相同操作即可。再次抱歉,我无法为您提供更多帮助。 - Christoph Eberhardt
@Daemeous,你们其中一个如何更新这个代码库中的代码? - Christoph Eberhardt
显示剩余8条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接