git重基混淆
假设我有两个分支git重基混淆,git,branch,rebase,Git,Branch,Rebase,假设我有两个分支 topic和master 如果我在topicbranch上,运行git-rebase-master它是重新设置master的基础还是重新设置topic分支的基础 执行git rebase--help给了我这个 假设存在以下历史记录,且当前分支为“主题”: 从这一点开始,将显示以下命令之一的结果: git rebase master git rebase master topic 将是: A'--B'
topic
和master
如果我在topic
branch上,运行git-rebase-master
它是重新设置master的基础还是重新设置topic分支的基础
执行git rebase--help给了我这个
假设存在以下历史记录,且当前分支为“主题”:
从这一点开始,将显示以下命令之一的结果:
git rebase master
git rebase master topic
将是:
A'--B'--C' topic
/
D---E---F---G master
注意:后一种形式只是git checkout主题的简写,后面是git rebase master。当rebase退出时,主题将保持签出分支
如果我想实现这个D--E--F--G--A--B--C主控
,我应该切换到主控并运行git-rebase-I主题
如果我运行
git-rebase-I-topic
尝试将A、B、C挤压成D--E--F--G--C master
,我会得到noop
,假设你从这样的树开始
A---B---C topic
/
D---E---F---G master
A'--B'--C' topic
/
D---E---F---G master
topic
/
D---E---F---G---A---B---C -- master
topic
/
D---A---B---C---E---F---G -- master
topic
/
D---E---F---G -- master
您需要运行两个命令git-rebase-master
,使其看起来像这样
A---B---C topic
/
D---E---F---G master
A'--B'--C' topic
/
D---E---F---G master
topic
/
D---E---F---G---A---B---C -- master
topic
/
D---A---B---C---E---F---G -- master
topic
/
D---E---F---G -- master
然后从master
运行git-merge-topic
,它将执行一个快速向前的合并,最后您将得到一个如下所示的树
A---B---C topic
/
D---E---F---G master
A'--B'--C' topic
/
D---E---F---G master
topic
/
D---E---F---G---A---B---C -- master
topic
/
D---A---B---C---E---F---G -- master
topic
/
D---E---F---G -- master
我可以签出master并运行git rebase主题吗 运行该命令将生成如下所示的树
A---B---C topic
/
D---E---F---G master
A'--B'--C' topic
/
D---E---F---G master
topic
/
D---E---F---G---A---B---C -- master
topic
/
D---A---B---C---E---F---G -- master
topic
/
D---E---F---G -- master
这是用于
rebase
的(经过编辑的)git文档,希望这将有助于:
提交在当前分支中但不在上游的所有更改都保存到临时区域
如果您在主题上运行git-rebase-master
,这意味着提交A、B和C将进入一个临时区域
当前分支重置为上游。这与git重置的效果完全相同——硬上游
此时,树的临时状态如下所示
A---B---C topic
/
D---E---F---G master
A'--B'--C' topic
/
D---E---F---G master
topic
/
D---E---F---G---A---B---C -- master
topic
/
D---A---B---C---E---F---G -- master
topic
/
D---E---F---G -- master
以前保存到临时区域中的提交将依次重新应用到当前分支
保存到临时区域的提交A、B、C将“重新提交”到您当前所在的分支主题
topic
/
D---E---F---G---A---B---C -- master
从master
运行git-rebase-topic
将执行完全相同的步骤,除了不将提交A、B、C放入临时区域,而是将提交E、F G放入临时区域。您试图实现什么?当你完成后,你想让树看起来像什么?根据手册(见上文),它似乎是相反的?你是否试图将主题
的更改拉到主控
?是的,谢谢,请查看编辑后的问题。这是通过rebase实现D---E---F---G---A---B---C主控的唯一方法吗??我可以签出master并运行git-rebase-topic
?我明白了,这很有意义,所以我应该首先在本地主题分支上重新设置基址以挤压提交,然后将更改合并到master,然后再推送吗?是的,您应该清理主题分支上的历史记录,然后合并回master。