将分支中的Git rebase/master更改合并到主分支中

7
两周前,我创建了一个新的分支,我们称其为exp。在此期间,expmaster都有几个提交。这段时间里,exp没有更新来自master的更改。
现在,我想将exp中的所有更改合并到master中,而不会丢失我的整个历史记录(即我不想只在master中有一个提交包含所有更改,而是希望exp中的所有提交出现在master的历史记录中)。
这是否可能?我已经查看了Rebase,但当我执行以下操作时:
git checkout exp
git rebase master

在这个过程的末尾,我在 exp 中,当我执行 git status 时,我会看到所有我已经在 exp 中提交的提交记录,就好像我想再次将它们推送到 exp 中。

为什么要变基?为什么不用合并? - kan
2个回答

6
你的目标是将 exp 中的所有提交记录合并到 master 的历史记录中,并保留你所有的提交记录。无论你使用 git merge 还是 git rebase,都可以实现这一目标。

MERGE:

git checkout master
git pull
git checkout exp
git merge master
git push -u origin exp

请执行第二步,以便拉取最新的master并获取最新更改。

变基(REBASE):

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命令时,你的更改将基于最新版本的originmaster分支。同时,此命令不会更新你本地的master分支。 注意:如果你正在使用git rebase,可能需要强制推送(git push -f origin exp)。

2
我建议您直接将您的exp分支合并到您的master分支。这样,您仍将保留所有历史记录,并且作为奖励,您将保留所有原始提交时间。
git checkout master
git merge exp

如果你真的想使用rebase选项,那么你只需要将重置后的exp分支合并到master上。

git checkout exp
git rebase master

git checkout master
git merge exp

注意:使用合并(第一种)选项,由于您的分支可能已经分开,因此您将最终得到一个 非快进式 合并(用于您的合并的额外提交)。如果您是 GitHub 的拉取请求用户,则会使用此类型的合并。如果您想要使用第二个 (rebase) 选项执行相同的操作,您可以在合并命令中添加 --no-ff 选项。

git merge exp --no-ff

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接