Git合并会将提交重新应用到另一个提交上吗?

9

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

[a]---[b]---[d]---[f] master
        \
         \
          [c]---[e]   develop

我想在这里结束:

[a]---[b]---[d]---[f]---[g]  master
        \               /
         \             /
          [c]---[e]---/      develop

其中g等同于在[f]上执行提交[c][e]。这就是git checkout master; git merge develop,对吗?


2
15岁的使用Git,太棒了!+1 - zengr
4个回答

6
你所画的图片看起来像是执行了 `git merge` 的结果,但是你想要发生的情况听起来更像是 `git rebase`。参考 Git 社区书籍中的 "Rebasing" chapter,如果你在 `mywork` 分支上并执行以下命令:

$ git merge origin

那么你会得到以下结果:

git merge history

将合并视为将两个不同的快照拼在一起:在这种情况下,C4和C6合并成C7。

rebase创建了一个与C7完全相同的树,但其历史记录看起来完全不同。假设您没有使用合并命令,而是使用了以下命令:

$ git rebase origin

你会得到:

alt text

当你发现自己希望在C4而不是C2创建mywork分支时,git rebase就像是一个魔灯,可以实现你的愿望。
你也可以将rebase视为从历史记录中剪切出一个分支,并将其移植到不同的点上。不要错过从C5和C6到C5'和C6'的微妙变化。尽管树看起来相同,但它们将具有不同的父级,从而改变它们的git身份。

假设没有两个提交涉及相同的文件。无论您合并还是变基,都会得到相同的结果,对吗? - wxyz
@wxyz 是的,生成的树将是相同的,但它们的历史记录将如上图所示不同。使用 git rebase 可以帮助保持您的历史记录线性。 - Greg Bacon

1

你想要执行 git checkout master; git merge develop

这是因为 git merge 命令需要指定一个分支的名称,该分支将被合并到当前所在的分支中。因此,你需要先切换到你想要合并到的目标分支(master),然后再将另一个分支(develop)合并到它上面。

如果你查看 git-merge man page 中的第一个“描述”部分,你会看到一个几乎与你的图表完全相同(尽管垂直翻转)的说明。


1

0

要切换到'master'分支,请运行git checkout master,然后运行git merge develop将'develop'分支合并到当前的'master'分支。


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