如何将分支与特定提交合并

时间:2016-09-26 07:33:49

标签: git github version-control merge bitbucket

我以为我为特定提交创建了一个新分支,但实际上我把它留在了主分支上,而是在新分支上进行了最新的提交。

所以现在我想删除master分支上的最后一次提交,并在特定提交之前将我的新提交与master分支合并。

用图片更容易理解:

enter image description here

1 个答案:

答案 0 :(得分:2)

为了在现有分支上“提交”之前合并分支,需要做一些事情。

在Git中,每个提交都在其自己的哈希中包含它的父哈希,以确保完整性。这意味着您要在其间合并内容的最后一次提交必须重命名其他所有内容。

这个想法是将当前的“主人”存储为一个名为“old-master”的分支。我们知道将master设置为所需的提交并进行合并。然后,我们可以决定恢复旧主服务器上的提交,但不会恢复新主服务器上的提交(在您的情况下为f0c5f03),或者只是保留它。

解决方案

$ git checkout master
$ git branch old-master   # let's call our current master in additon "old-master"
$ git reset f2097eb       # reset master (currently checked out) to this commit. See [git reset][1].

您的图表现在看起来像

  o old-master
/ ^ this is commit f0c5f03
o master
 \
  o - o .... o 12columns

让我们进行合并:

$ git merge 12columns

在您的情况下,这是fast forward。因此,不执行实际的合并。我们的图表现在是:

  o old-master
 /
o - ...... o # master

删除

我们现在可以决定。你想扔掉老主人还是把它放在首位:

$ git branch -D old-master   # Remove the old commit f0c5f03

恢复

或签出旧主人并将其重新加入顶部

$ git checkout old-master
$ git rebase master

这导致:

o - o ...... o - o # master
^ f2097eb        ^ Commit f0c5f03 but now with new commit hash.