Git rebase / master从分支变为主

时间:2016-06-24 10:02:51

标签: git git-rebase

两周前,我创建了一个新分支,我们称之为exp。在此期间,expmaster中都有多次提交。在此期间exp尚未根据master

的更改进行更新

现在我希望将exp的所有更改都转换为master,而不会丢失我的整个历史记录(即我不希望在master中只有一次提交所有更改,而是exp中的所有提交都出现在master

的历史记录中

这怎么可能?我调查了Rebase,但是当我这样做时:

git checkout exp
git rebase master

在流程结束时,我在exp,当我git status时,我看到我在exp中提交的所有提交,好像我想将它们推入{{1}再次

2 个答案:

答案 0 :(得分:2)

您的目标是在exp的{​​{1}}历史记录中保留所有提交内容,并保留所有提交内容。无论您使用的是master还是git merge,都可以实现此目的。

<强> MERGE:

git rebase

执行第2步,以便提取最新的git checkout master git pull git checkout exp git merge master git push -u origin exp 并进行最新更改。

<强> REBASE:

master

如果您不想在此过程中更新本地git checkout exp git pull --rebase origin master git push -u origin exp ,则可以执行以下步骤:

master

请注意,当您git checkout master git pull git checkout exp git rebase master git push -u origin exp 时,您的更改基于最新版本的git pull --rebase origin master&#39; origin。此外,此命令不会更新master的本地副本。

注意:如果您使用的是master,则可能需要强行推送(git push -f origin exp)。

答案 1 :(得分:1)

我建议您只需将exp分支合并到master即可。你仍然拥有所有历史记录,作为奖励,你将保留所有原始提交时间。

git checkout master
git merge exp

如果您真的想要使用rebase选项,那么您只需要将重新定位的exp分支合并到master

git checkout exp
git rebase master

git checkout master
git merge exp

注意:使用合并(第一个)选项,您最终会得到 no-fast-forward 合并(合并的额外提交),因为您的分支可能是有分歧。如果您是GitHub的pull请求用户,它会使用这种合并。如果要对第二个(rebase)选项执行相同操作,可以在合并命令中添加--no-ff选项。

git merge exp --no-ff