两周前,我创建了一个新分支,我们称之为exp
。在此期间,exp
和master
中都有多次提交。在此期间exp
尚未根据master
现在我希望将exp
的所有更改都转换为master,而不会丢失我的整个历史记录(即我不希望在master
中只有一次提交所有更改,而是exp
中的所有提交都出现在master
)
这怎么可能?我调查了Rebase,但是当我这样做时:
git checkout exp
git rebase master
在流程结束时,我在exp
,当我git status
时,我看到我在exp
中提交的所有提交,好像我想将它们推入{{1}再次
答案 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