我已经为实验创建了一个分支。我已经确定这是我想要的方向,所以想把更改放到主人身上。
我不想合并,我更喜欢rebase,因为这听起来正是我想要的(就像我一直在使用master一样)。
查看documentation,看起来很简单(这是来自文档的说明):
但是,还有另一种方法:您可以获取C4中引入的更改补丁并在C3之上重新应用它。在Git中,这称为变基。使用rebase命令,您可以获取在一个分支上提交的所有更改,并在另一个分支上重播它们。
在此示例中,您将运行以下命令:
$ git checkout experiment $ git rebase master First, rewinding head to replay your work on top of it... Applying: added staged command
'实验'就我而言,分支是“非规范化的”#39;已经检出(从我的控制台输出):
$ git status
On branch denormalized
Your branch is up-to-date with 'origin/denormalized'.
nothing to commit, working tree clean
现在,我致电git rebase master
:
$ git rebase master
Current branch denormalized is up to date.
好的,根据文档,这不是我所期待的。两个分支似乎也没有变化:
主人仍然是变革之前的样子。我可以看看,没有任何改变。
我错过了什么?
答案 0 :(得分:4)
要将这些更改变为主数据,您需要执行以下操作:
git checkout master
git merge denormalized
合并会将这些更改提取到您的分支中。
rebase的作用是什么,它将那些提交链接起来,但仍然在你的其他参考文献中。
合并后,您应该在master
denormalized
和-Refactored the generator...
HEAD
它显示了您在图37上方执行此操作
答案 1 :(得分:2)
虽然马特克拉克的答案对你目前的情况来说是一个正确的程序,但我认为这有些事情不清楚;所以我将添加以下内容:
您发出的rebase命令是正确的,但它并没有完全符合您的想法。如果你有
A --- B --- C <--(masteR)
\
D --- E <--(branch)
(所以master
已经从branch
的分支点开始移动了,并且你希望在没有合并提交的情况下将branch
合并到master
中,然后一个rebase会是第一步。
git checkout branch
git rebase master
(或简写git rebase master branch
)。这给了
A --- B --- C <--(masteR)
\
D' --- E' <--(branch)
现在可以进行快速合并(将branch
合并到master
而不进行合并提交),而不是之前。要使快进,你可以
git checkout master
git merge branch
(可以快进,因为它可以),或者仍在branch
git branch -f master
只是迫使master
分支移动到你所在的位置(通常是一个更危险的命令,但在这里具有相同的效果)。
在你的情况下,因为分支已经在master
的尖端,所以不需要rebase,你可以直接进入ff merge。
请注意,如果您与其他开发人员共享分支机构(例如通过远程存储库)并且他们可能正在使用分支机构(例如,因为您已将其推送),那么您应该小心重新定位该分支(即你需要与其他开发人员协调来完成它)。参见&#34;从上游rebase恢复&#34;在git rebase文档中。 https://git-scm.com/docs/git-rebase