如何将当前本地分支与远程存储库中不同分支的特定单个提交合并?

How to merge current local branch with specific single commit from different branch in remote repository?

假设我在本地有这个:

master
branch-a
branch-b

我的远程存储库中有这个:

master
branch-a
branch-b
branch-c

条件:

  1. 我拥有远程存储库。我拥有所有需要的访问权限。
  2. 我的本地 branch-b 和远程 branch-b 已经同步。
  3. 远程 branch-c 有一个带有散列的提交:1ab2cd3
  4. 提交 1ab2cd3 不是 远程 branch-c.
  5. 上的最新提交

问题:如何将本地 branch-b 与来自远程 branch-c1ab2cd3 提交合并?

git cherry-pick 1ab2cd3


感谢@Matt问题评论区的解释:

Merging is not really the right term to use in this scenario.

The term that most closely describes a merge of a single commit is cherry-picking.

Cherry-pick applies the changes introduced by the commit onto the current branch. This creates a new commit (new hash) and is not a merge. A commit is identified by its hash which is identical in your local repository and on the remote.

When you cherry-pick this commit, it takes the commit no matter on what branch(es) it is part of.

You cannot cherry-pick without changing the commit-hash (see here). The -x argument would put a reference to the original hash in the commit message.

既然我的评论似乎已经回答了你的问题,我将它们添加为答案:

在这种情况下,合并并不是真正合适的术语。最接近描述单个提交的 merge 的术语是 cherry-picking。如果你想在 branch-b 上获得提交 1ab2cd3contents,你可以在 [=23] 上使用以下命令=]分支-b:

git cherry-pick 1ab2cd3

Cherry-pick 将提交引入的更改应用到当前分支。这会创建一个新的提交,而不是 merge 就 Git 而言。请注意,这将为提交提供不同的提交哈希。您不能在不更改提交哈希的情况下进行挑选(请参阅 this answer)。但是,-x 参数可用于在 cherry-pick 生成的提交的提交消息中放置对原始哈希的引用:

git cherry-pick -x 1ab2cd3

解决您关于将从哪个分支获取提交的问题:提交由其散列标识,该散列在您的本地存储库和远程存储库中是相同的。当您挑选此提交时,无论它属于哪个分支,它都会提交。