如何将当前本地分支与远程存储库中不同分支的特定单个提交合并?
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
条件:
- 我拥有远程存储库。我拥有所有需要的访问权限。
- 我的本地
branch-b
和远程 branch-b
已经同步。
- 远程
branch-c
有一个带有散列的提交:1ab2cd3
- 提交
1ab2cd3
不是 远程 branch-c
. 上的最新提交
问题:如何将本地 branch-b
与来自远程 branch-c
的 1ab2cd3
提交合并?
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 上获得提交 1ab2cd3
的 contents,你可以在 [=23] 上使用以下命令=]分支-b:
git cherry-pick 1ab2cd3
Cherry-pick 将提交引入的更改应用到当前分支。这会创建一个新的提交,而不是 merge 就 Git 而言。请注意,这将为提交提供不同的提交哈希。您不能在不更改提交哈希的情况下进行挑选(请参阅 this answer)。但是,-x
参数可用于在 cherry-pick 生成的提交的提交消息中放置对原始哈希的引用:
git cherry-pick -x 1ab2cd3
解决您关于将从哪个分支获取提交的问题:提交由其散列标识,该散列在您的本地存储库和远程存储库中是相同的。当您挑选此提交时,无论它属于哪个分支,它都会提交。
假设我在本地有这个:
master
branch-a
branch-b
我的远程存储库中有这个:
master
branch-a
branch-b
branch-c
条件:
- 我拥有远程存储库。我拥有所有需要的访问权限。
- 我的本地
branch-b
和远程branch-b
已经同步。 - 远程
branch-c
有一个带有散列的提交:1ab2cd3
- 提交
1ab2cd3
不是 远程branch-c
. 上的最新提交
问题:如何将本地 branch-b
与来自远程 branch-c
的 1ab2cd3
提交合并?
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 上获得提交 1ab2cd3
的 contents,你可以在 [=23] 上使用以下命令=]分支-b:
git cherry-pick 1ab2cd3
Cherry-pick 将提交引入的更改应用到当前分支。这会创建一个新的提交,而不是 merge 就 Git 而言。请注意,这将为提交提供不同的提交哈希。您不能在不更改提交哈希的情况下进行挑选(请参阅 this answer)。但是,-x
参数可用于在 cherry-pick 生成的提交的提交消息中放置对原始哈希的引用:
git cherry-pick -x 1ab2cd3
解决您关于将从哪个分支获取提交的问题:提交由其散列标识,该散列在您的本地存储库和远程存储库中是相同的。当您挑选此提交时,无论它属于哪个分支,它都会提交。