合并到特定的提交

Dau*_*Dau 331 git git-merge git-cherry-pick

我创建了一个名为新的分支newbranchmasterGit的分支.现在我做了一些工作,想要合并newbranchmaster; 但是,我已经做了一些额外的更改newbranch,我想合并newbranch到最后一次提交到第四次master.

我用过cherry-pick但它显示了使用正确选项的消息:

git checkout master    
git cherry-pick ^^^^HEAD newbranch
Run Code Online (Sandbox Code Playgroud)

我可以用git merge代替它吗?

git merge newbranch <commitid>
Run Code Online (Sandbox Code Playgroud)

KL-*_*L-7 538

当然,在master分支机构所有你需要做的是:

git merge <commit-id>
Run Code Online (Sandbox Code Playgroud)

哪里commit-idnewbranch您希望在master分支中获得的最后一次提交的哈希值.

您可以通过执行操作找到有关任何git命令的更多信息git help <command>.就是那种情况git help merge.并且docs说merge命令的最后一个参数是<commit>...,所以你可以将引用传递给任何提交甚至多次提交.虽然,我自己从未做过后者.

  • 是的,它会合并来自`newbranch`的所有提交,因为它的历史从`master`分支到`commit-id`到`master`分支.您可以将`git merge <commit-id>`想象为将一个以`commit-id`结尾的未命名分支合并到当前分支中. (49认同)
  • 不仅是单个提交,而且是`commit-id`之前的所有提交 (26认同)
  • 我可以使用提交ID在master以外的两个本地分支之间合并吗? (2认同)
  • 这似乎不起作用,如果我在一个分支上,我想合并到其中,并且有一些其他分支包含提交AB和C,并且我合并到C中,它只会获得C中所做的更改,而不是A和B中所做的更改。 (2认同)

Kir*_*han 13

合并至提交

我发现这是一种非常可靠的合并提交的方法。“源”和“目标”分支永远不会被修改(“目标”分支上的合并除外)。

假设您想要将分支合并src到分支dst,但仅限于特定的提交 IDcommitId

git checkout src
git branch temp commitId        # create temporary branch at commitId
git switch dst             
git merge temp                     # merge temp branch to dst branch
git branch -d temp                 # remove temp branch as we dont need it anymore.
Run Code Online (Sandbox Code Playgroud)


tkr*_*use 10

要保持分支干净,可以执行以下操作:

git checkout newbranch
git branch newbranch2
git reset --hard <commit Id> # the commit at which you want to merge
git checkout master
git merge newbranch
git checkout newbranch2
Run Code Online (Sandbox Code Playgroud)

这样,newbranch将在合并到master的地方结束,然后您继续进行newbranch2的工作。


Ela*_*ode 6

在当前分支文件夹中运行以下命令以从此分支合并<commit-id>到当前分支,--no-commit不要自动进行新提交

git merge --no-commit <commit-id>
Run Code Online (Sandbox Code Playgroud)

git merge --continue只能在合并导致冲突后运行。

git merge --abort中止当前的冲突解决过程,并尝试重建合并前的状态。