我觉得我缺少 Git 的一些基本内容,但是有没有办法移动分支的来源?我经常遇到这样一个场景,我从 master 创建一个功能分支,工作几天,然后我推送它我需要确保添加到 master 的任何更改都需要合并/重新建立在我的分支上。这似乎使我的分支非常混乱。我想我可以简单地将分支的来源更改为 master 当前所在的位置,就好像我刚开始创建分支一样(但显然,我需要处理出现的任何冲突)。有没有办法做到这一点或其他一些过程来保持我的分支干净?
我希望能够从以下位置切换:
a--b--d--f \ c--e--g
到
编辑:最近,为了模拟这一点,我一直在使用临时分支,当我的工作完成后,我将创建一个新分支,并将所有提交移至该分支并重新提交它们并推送。如果拉取请求审查需要一段时间,这不会很好地工作。我最近也尝试过git pull --rebase upstream master将 master 合并到分支中。这增加了很多其他人对我的分支的承诺。我认为合并把事情搞砸了,但在我推送并检查拉取请求之前我没有意识到。
git pull --rebase upstream master
你所描述的是变基。你只是在错误的方向上做这件事。假设master要提交的点f和your-branch指向的点g。
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 将使用您提供的分支和当前签出的分支之间的第一个共同祖先。
b
除非您指定--onto,否则 Git 将再次使用第一个参数来确定新的基数。在这种情况下,这就是 commit f。结果是:
--onto
a---b---d---f ← master \ c'--e'--g' ← your-branch
请记住,提交哈希值会发生变化,因为您基本上有新的提交。我用素数 ( ') 标记了新的提交。
'
我最近也尝试过git pull --rebase upstream master将 master 合并到分支中。
您不想master在重新建立分支后合并到您的分支中。变基完全按照您的描述进行,您不需要额外的步骤。