【问题标题】:How to merge all commits from one branch to another?如何将一个分支的所有提交合并到另一个分支?
【发布时间】:2018-03-12 21:31:46
【问题描述】:

我想将分支 A 合并到 master,但是当我在 master 上使用“git merge A”时,它会合并分支,但只会在 master 上记录一次提交,而我在分支 A 上提交了 20 次。我想合并从 A 到 master 的所有提交。我该怎么做?

【问题讨论】:

    标签: git github git-branch git-merge branching-and-merging


    【解决方案1】:

    听起来像变基到 master 是你正在寻找的。​​p>

    试试:

    git checkout A
    git rebase master
    

    我建议你在这里阅读合并和变基之间的区别https://www.atlassian.com/git/tutorials/merging-vs-rebasing

    【讨论】:

      【解决方案2】:

      您已将其交叉标记为 和,对于这两种不同的情况,答案是不同的。

      GitHub 提供了一个标有“合并拉取请求”的按钮,带有一个下拉三角形。单击三角形会提供更多选项(至少通常情况下——the GitHub help page 表示“取决于为您的存储库启用的合并选项”):

      • 创建合并提交
      • 压缩和合并
      • 变基和合并

      Git 命令行是不同的,它既简单又复杂。您可以运行以下任何命令:

      • git merge 获取取决于情况的默认操作;
      • git merge --ff-only 防止合并,但允许快进操作;
      • git merge --squash 强制执行 squash 操作,而不创建合并;
      • git merge --no-ff 强制合并操作;或
      • git rebase 后跟 git merge --ff-only 复制提交以便可以进行快进(这是默认的变基操作),然后执行快进操作。

      三个 GitHub 操作中的第一个,“创建合并提交”,就最终结果而言,相当于命令行 git merge --no-ff(不同之处在于,如果有是合并冲突,但see this page 也是如此)。三个 GitHub 操作中的第二个相当于命令行 git merge --squash 并且是您在问题中描述的内容:

      ... 只会在 master 上记录一次提交,而我在分支 A 上提交了 20 次

      请注意,新提交与其他 N 次提交具有相同的效果,但是是普通的、非合并的、单父提交(这在 GitHub 界面中很难看到,因为试图隐藏 Git 提交图的非线性特性)。见this GitHub help page squash diagram。 (请注意,该页面上的普通合并图相当差,但壁球图很不错。)在命令行上使用 --no-ff 进行的真正合并有 两个 父级:第一个parent 是您执行合并的分支上的先前提交(即master),第二个父级是合并分支的提示提交(在您的示例中为分支A)。这意味着所有 N 个单独的提交都保持独立:只添加了一个新的提交,表示组合这些单独的提交的结果。

      在许多方面,这是最好的结果:它允许您将功能添加视为单个单元(合并提交)或一系列更改(侧分支上的 N 个单独提交)。但它确实造成了一个更复杂的历史:如果合并的事实预计在未来是无用的或分散注意力的,而 N 个单独的提交预计是有用的(例如,用于调试),它可能是最好使用快进操作。

      正如我上面提到的,快进根本不是合并。但是,只有当所有要合并的“新”提交都“领先于”所有当前提交时,才能进行快进。据我所知,在 GitHub 上可视化是否是这种情况是不可能的1。

      如果可以进行快进,命令行命令git merge 将默认执行此操作。如果可能,git merge --ff-only 会成功。因此,如果您想尝试快进,但不如果可能不创建实际的合并提交,您可以简单地使用git merge --ff-only并观察它是否成功或失败。

      如果当前不能快进,您可以使用git rebase 使其成为可能,之后您可以使用git merge(可选使用--ff-only,或者作为安全检查,或覆盖您使用git config merge.ff 设置的任何配置)。变基有点复杂,至少在出错时是这样,所以正如其他人所说,您应该先阅读它。


      1或者至少,太难打扰了。如果有一个显示实际提交图的可点击按钮,那可能会很有趣。

      【讨论】:

        猜你喜欢
        • 2016-03-23
        • 1970-01-01
        • 2021-12-29
        • 2011-09-16
        • 1970-01-01
        • 2010-12-15
        • 2011-05-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多