Git: merge 多个分支

标签 git git-gui

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

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

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

主干

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";

merge 所有 3 个分支时的期望输出:

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

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

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

  <<<<<<< 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 提供的,但乞丐当然不能挑剔。

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

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

最佳答案

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

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)

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

git commit
git push

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

编辑:

为了纪念 David 的评论:在 git 中使用分支没有坏处,但我遇到过一两个案例,分支处理不当导致困惑,没有经验的 git 用户很难理解和解决。不过,这些处理错误应该不常见。

编辑:

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

关于Git: merge 多个分支,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11100109/

相关文章:

git - 查看未推送的 Git 提交

iphone - xcode 从项目中删除存储库

github - 在 GIT GUI 中生成新的 SSH key

git - 如何在 git-gui 中设置所需的语言?

git - 使用 Git GUI 克隆远程存储库(如何下载分支?)

git - 使用 Git Bash 推送有效,但使用 Git Gui 失败

GIT:如何摆脱 msysgit (windows) 上烦人的 CRLF 消息?

java - 使用 Git 开发包含多个 Eclipse 项目的应用程序?

Git: 'git log --graph' 和 'git log --graph --all' 有什么区别?

c# - 加载项目 : Attribute Include is unrecognized 时出错