Git rebase/master 从 branch 变为 master

Git rebase/master changes from branch into master

两个星期前,我创建了一个新分支,我们称它为exp。在此期间,expmaster 中都有几次提交。在此期间 exp 尚未更新 master

的更改

现在我想将 exp 中的所有更改添加到 master 中,而不会丢失我的整个历史记录(即我不想在 master 中只提交一次所有更改,而是我在 exp 中的所有提交都出现在 master)

的历史记录中

这怎么可能?我调查了 Rebase 但当我调查时:

git checkout exp
git rebase master

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

我建议简单地将您的 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 的拉取请求用户,它会使用这种合并。如果你想对你的第二个(rebase)选项做同样的事情,你可以添加 --no-ff 选项到你的合并命令。

git merge exp --no-ff

您的目标是将 exp 中的所有提交记录在 master 的历史记录中,并保留您的所有提交。无论您使用 git merge 还是 git rebase.

都可以实现此目的

合并:

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

执行第 2 步,以便您提取最新的 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 时,您的更改是基于 originmaster 的最新版本。此外,此命令不会更新 master.

的本地副本

注意: 如果您使用 git rebase.

,您可能需要强制推送 (git push -f origin exp)