如何移动分支的来源

时间:2019-11-06 20:03:45

标签: git merge branch rebase git-workflow

我感觉我缺少Git的一些基本知识,但是有什么方法可以移动分支的起源?我经常遇到这样一个场景:我从master创建了一个功能分支,处理了几天,然后去推它,我需要确保添加到master的所有更改都需要合并/重新定位到我的分支。这似乎使我的分支非常混乱。我想我可以简单地将分支的起源更改为现在的主节点,就好像我刚开始创建分支一样(但显然,我需要处理所有出现的冲突)。有没有办法做到这一点或其他一些方法来保持我的分支干净?

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

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

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

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

1 个答案:

答案 0 :(得分:3)

您所描述的。您只是在以错误的方向进行操作。假设master指向提交f,而your-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合并到分支中。变基功能完全符合您的描述,并且不需要其他步骤。