【问题标题】:How to move where a branch originates from如何移动分支的来源
【发布时间】:2020-03-03 09:11:03
【问题描述】:

我觉得我在 Git 中缺少一些基本的东西,但是有没有办法移动分支的起源?我经常遇到这样一个场景,我从 master 创建一个功能分支,工作几天,然后我推送它我需要确保添加到 master 的任何更改都需要合并/重新建立在我的分支上。这似乎使我的分支非常混乱。我想我可以简单地将分支的来源更改为 master 现在的位置,就好像我刚开始创建分支一样(但显然,我需要处理出现的任何冲突)。有没有办法做到这一点或其他一些过程来保持我的分支干净?

我希望能够从以下位置切换:

a--b--d--f
    \
     c--e--g

a--b--d--f
          \
           c--e--g

编辑: 最近,为了效仿这一点,我一直在使用临时分支,当我的工作完成后,我将创建一个新分支,并将所有提交移至该分支并重新提交并推送。如果拉取请求审查需要一段时间,这不会很好地工作。我最近也尝试过 git pull --rebase upstream master 然后将 master 合并到分支中。这增加了很多其他人对我的分支的承诺。我认为合并把事情搞砸了,但在我推送并检查拉取请求之前我没有意识到。

【问题讨论】:

    标签: git merge branch rebase git-workflow


    【解决方案1】:

    你所描述的变基。你只是在错误的方向上做这件事。假设master 指向提交fyour-branch 指向g

    a---b---d---f  ← master
         \
          c---e---g  ← your-branch
    

    要获取您的分支并使其在提交f 处“启动”,您必须将your-branch 重新设置为master。对应的命令是:

    git rebase master your-branch
    

    Git 将首先检查您指定的分支作为第二个参数(此处为 your-branch)。因此,如果您已经签出了该分支,则可以省略第二个参数。

    第一个参数将用于确定基本提交,在此示例中为b。 Git 将使用您提供的分支和当前签出的分支之间的第一个共同祖先。

    除非您指定--onto,否则Git 将再次使用第一个参数来确定新的基数。在这种情况下,这就是提交 f。结果是:

    a---b---d---f  ← master
                 \
                  c'--e'--g' ← your-branch
    

    请记住,提交哈希值会发生变化,因为您实际上有新的提交。我用素数 (') 标记了新提交。


    我最近也尝试过 git pull --rebase upstream master 然后将 master 合并到分支中。

    您不想在基于它的基础上将master 合并到您的分支中。变基完全符合您的描述,您不需要额外的步骤。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-26
      • 1970-01-01
      • 2022-10-12
      • 2020-02-11
      • 1970-01-01
      • 2011-11-03
      • 2011-11-01
      相关资源
      最近更新 更多