如何移动分支的来源
How to move where a branch originates from
我觉得 Git 缺少一些基本的东西,但是有没有办法移动分支的起源?我 运行 经常遇到这样一种情况,我从 master 创建一个功能分支,在它上面工作几天,然后我推送它 我需要确保添加到 master 的任何更改都需要成为 merged/rebased 到我的分支。这似乎使我的分支非常混乱。我想我可以简单地将分支的起源位置更改为 master 现在所在的位置,就好像我刚刚创建了分支一样(但显然,我需要处理出现的任何冲突)。有没有办法做到这一点或其他一些过程来保持我的分支清洁?
我希望能够从以下位置切换:
a--b--d--f
\
c--e--g
至
a--b--d--f
\
c--e--g
编辑:
最近,为了模拟这一点,我一直在使用临时分支,当我的工作完成后,我将创建一个新分支,并将所有提交移至该分支并重新提交并推送。如果 pull-request 审查需要一段时间,这就不会很好地工作。我最近也尝试过做一个 git pull --rebase upstream master
然后将 master 合并到分支中。这增加了大量其他人对我的分支的承诺。我在想合并把事情搞砸了,但在我推送并检查拉取请求之前我没有意识到。
您所描述的是变基。你只是在错误的方向上做。假设 master
指向提交 f
并且 your-branch
指向 g
.
a---b---d---f ← master
\
c---e---g ← your-branch
要在提交 f
时获取分支并使其成为 "start",您必须在 master
上重新设置 your-branch
。对应的命令为:
git rebase master your-branch
Git 将首先检查您在第二个参数中指定的分支(此处为 your-branch
)。因此,如果您已经签出该分支,则可以省略第二个参数。
第一个参数将用于确定基本提交,在本例中为 b
。 Git 将使用您提供的分支和您当前签出的分支之间的第一个共同祖先。
除非您指定 --onto
,否则 Git 将再次使用第一个参数来确定新的基数。在本例中,就是提交 f
。结果是:
a---b---d---f ← master
\
c'--e'--g' ← your-branch
请记住,提交哈希会发生变化,因为您实际上有新的提交。我用素数 ('
) 标记了新提交。
I've also recently tried doing a git pull --rebase upstream master
then merging master into the branch.
您不希望在 master
重新定位后将其合并到您的分支中。变基完全按照您的描述进行,您不需要额外的步骤。
我觉得 Git 缺少一些基本的东西,但是有没有办法移动分支的起源?我 运行 经常遇到这样一种情况,我从 master 创建一个功能分支,在它上面工作几天,然后我推送它 我需要确保添加到 master 的任何更改都需要成为 merged/rebased 到我的分支。这似乎使我的分支非常混乱。我想我可以简单地将分支的起源位置更改为 master 现在所在的位置,就好像我刚刚创建了分支一样(但显然,我需要处理出现的任何冲突)。有没有办法做到这一点或其他一些过程来保持我的分支清洁?
我希望能够从以下位置切换:
a--b--d--f
\
c--e--g
至
a--b--d--f
\
c--e--g
编辑:
最近,为了模拟这一点,我一直在使用临时分支,当我的工作完成后,我将创建一个新分支,并将所有提交移至该分支并重新提交并推送。如果 pull-request 审查需要一段时间,这就不会很好地工作。我最近也尝试过做一个 git pull --rebase upstream master
然后将 master 合并到分支中。这增加了大量其他人对我的分支的承诺。我在想合并把事情搞砸了,但在我推送并检查拉取请求之前我没有意识到。
您所描述的是变基。你只是在错误的方向上做。假设 master
指向提交 f
并且 your-branch
指向 g
.
a---b---d---f ← master
\
c---e---g ← your-branch
要在提交 f
时获取分支并使其成为 "start",您必须在 master
上重新设置 your-branch
。对应的命令为:
git rebase master your-branch
Git 将首先检查您在第二个参数中指定的分支(此处为 your-branch
)。因此,如果您已经签出该分支,则可以省略第二个参数。
第一个参数将用于确定基本提交,在本例中为 b
。 Git 将使用您提供的分支和您当前签出的分支之间的第一个共同祖先。
除非您指定 --onto
,否则 Git 将再次使用第一个参数来确定新的基数。在本例中,就是提交 f
。结果是:
a---b---d---f ← master
\
c'--e'--g' ← your-branch
请记住,提交哈希会发生变化,因为您实际上有新的提交。我用素数 ('
) 标记了新提交。
I've also recently tried doing a
git pull --rebase upstream master
then merging master into the branch.
您不希望在 master
重新定位后将其合并到您的分支中。变基完全按照您的描述进行,您不需要额外的步骤。