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

How merge branch with specific commit

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

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

用图片可能更容易理解:

为了合并分支 "before" 在现有分支上提交,需要做一些事情。

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

想法

想法是将当前 "master" 存储为一个名为 "old-master" 的分支。我们知道将 master 设置为所需的提交并进行合并。然后我们可以决定恢复旧 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

正在恢复

或者检查旧的 master 并将其重新设置在顶部

$ git checkout old-master
$ git rebase master

这导致:

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