git merge重新应用提交到另一个提交吗?

wxy*_*xyz 9 git version-control merge

我今年15岁,刚开始使用源代码控制系统来更好地管理我的代码,所以我对这些东西有点新意.现在我有这个存储库:

[a]---[b]---[d]---[f] master
        \
         \
          [c]---[e]   develop
Run Code Online (Sandbox Code Playgroud)

我想结束这里:

[a]---[b]---[d]---[f]---[g]  master
        \               /
         \             /
          [c]---[e]---/      develop
Run Code Online (Sandbox Code Playgroud)

其中,g相当于执行提交[c][e][f].这是git checkout master; git merge develop吧?

Gre*_*con 6

你画的画面看起来像是结果git merge,但你对你想要发生的事情的描述听起来像git rebase.

借用git社区书籍的"重新定位"一章,如果你在mywork分支上说

$ git merge origin

你会得到

git合并历史

将合并视为将两个不同的快照拼凑在一起:在这种情况下,C4和C6组合在一起制作C7.

Rebase创建一个看起来像C7的树,但它的历史看起来完全不同.说而不是合并,你给了命令

$ git rebase origin

你会得到的

替代文字

当你发现自己希望时,'我真的希望我mywork在C4而不是C2 创建分支',git rebase是djinni将授予它.

您还可以将rebase视为从历史中删除分支并将其移植到不同的点上.不要错过从C5和C6到C5'和C6'的细微变化.虽然树木看起来一样,但它们会有不同的父母,从而改变了他们的git身份.


Amb*_*ber 1

你要git checkout master; git merge develop

这是因为git merge采用要合并到当前签出分支的分支的名称。因此,您检查所需的目标分支(主分支),然后将另一个分支合并到其中(开发分支)。

如果您查看git-merge手册页上的第一个“描述”部分,您将看到一个与您的几乎相同的图表(尽管垂直翻转)来描述这一点。