Git - 变基到主人不做任何事情

Joe*_*Joe 1 git

我创建了一个用于实验的分支。我已经决定这是我想要采取的方向,所以想将更改放入 master 中。

我不想合并,我更喜欢 rebase,因为这听起来正是我想要的(就像我一直在使用 master 一样)。

查看文档,看起来很简单(这是文档中的说明):

但是,还有另一种方法:您可以采用 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
Run Code Online (Sandbox Code Playgroud)

在我的情况下,“实验”是已经签出的分支“非规范化”(从我的控制台输出):

$ git status
On branch denormalized
Your branch is up-to-date with 'origin/denormalized'.
nothing to commit, working tree clean
Run Code Online (Sandbox Code Playgroud)

现在,我打电话git rebase master

$ git rebase master
Current branch denormalized is up to date.
Run Code Online (Sandbox Code Playgroud)

好的,所以根据文档,这不是我所期望的。两个分支似乎也没有变化:

在此处输入图片说明

master 仍然是 rebase 之前的样子。我可以检查一下,没有任何变化。

我错过了什么?

Mar*_*ger 6

虽然马特·克拉克的回答对于您目前的情况来说是正确的程序,但我认为它留下了一些不清楚的事情;所以我将添加以下内容:

您发出的 rebase 命令是正确的,但它并不完全符合您的想法。如果你有

A --- B --- C <--(masteR)
       \
        D --- E <--(branch)
Run Code Online (Sandbox Code Playgroud)

(所以master自从 的分支点以来已经继续前进branch),并且您想在没有合并提交的情况branch下合并到master,那么 rebase 将是第一步。

git checkout branch
git rebase master
Run Code Online (Sandbox Code Playgroud)

(或简写git rebase master branch)。这给出了

A --- B --- C <--(masteR)
             \
              D' --- E' <--(branch)
Run Code Online (Sandbox Code Playgroud)

现在可以进行快进合并(branch无需master合并提交即可合并),而以前却不能。要快进,您可以

git checkout master
git merge branch
Run Code Online (Sandbox Code Playgroud)

(这将进行快进,因为它可以),或者仍然在branch

git branch -f master
Run Code Online (Sandbox Code Playgroud)

这只是强制master分支移动到您所在的位置(通常是一个更危险的命令,但在这里具有相同的效果)。

在您的情况下,因为分支已经扎根于 的尖端master,所以不需要 rebase,您可以直接移动到 ff 合并。

请注意,如果您与其他开发人员共享分支(例如通过远程存储库)并且他们可能正在使用分支(例如因为您已经推送了它),那么您应该小心地重新调整该分支的基础(即您需要与其他开发人员协调来做这件事)。请参阅 git rebase 文档中的“从上游 rebase 恢复”。 https://git-scm.com/docs/git-rebase


Mat*_*ark 5

要将这些更改导入 master,您需要执行以下操作:

git checkout master
git merge denormalized
Run Code Online (Sandbox Code Playgroud)

合并会将这些更改拉入您的分支。

rebase 的作用是将这些提交链接起来,但仍然在你的另一个引用上。

合并后,您应该以两个masterdenormalizedHEAD结束-Refactored the generator...

它显示您在图 37 正上方执行此操作