Git cherry-pick 与合并分支
Git cherry-pick vs merge branches
我知道 cherry-pick 是为应用一些中间提交而发明的,但确实存在任何区别:
git cherry-pick last_commit_from_branch
和
git merge some_branch
据我了解,git 不仅会应用这一次提交,还会应用所有以前以普通提交开头的提交?
如果是,这些行的唯一区别是在合并的情况下,新提交将有来自这些分支的两个父提交。
这两个命令有很大的不同。
让我们从 git cherry-pick
开始:
- cherry pick literaly 采用
diff
引入的提交
- 它确实将此
diff
应用于您当前所在的 HEAD
。这意味着它不会考虑任何父提交来完成顺利和正确的合并。
- 樱桃采摘不会与您采摘的分支建立任何联系。有对您从中获取的提交的引用,但此引用仅在提交消息中。
现在让我们看看合并的作用。(为了简单起见,我们看一个常见的 3 向合并)
A
|
1--2--3--4
|
5--6--7
|
B
现在假设您要合并它们。 git 现在会做什么?
- 首先,它将尝试找到
A
和 B
的最共同祖先,在本例中为 2
。
- 它现在将确定
4
和 7
带来的变化,并再次匹配它们 2
以获得合并的差异。更详细:如果您有 2
和 7
中的更改,它将在合并更改时采用 A
中的更改,反之亦然。
因此,与简单的 cherry-pick 相比,合并有可能在进行实际合并时考虑更多信息。
我知道 cherry-pick 是为应用一些中间提交而发明的,但确实存在任何区别:
git cherry-pick last_commit_from_branch
和
git merge some_branch
据我了解,git 不仅会应用这一次提交,还会应用所有以前以普通提交开头的提交? 如果是,这些行的唯一区别是在合并的情况下,新提交将有来自这些分支的两个父提交。
这两个命令有很大的不同。
让我们从 git cherry-pick
开始:
- cherry pick literaly 采用
diff
引入的提交 - 它确实将此
diff
应用于您当前所在的HEAD
。这意味着它不会考虑任何父提交来完成顺利和正确的合并。 - 樱桃采摘不会与您采摘的分支建立任何联系。有对您从中获取的提交的引用,但此引用仅在提交消息中。
现在让我们看看合并的作用。(为了简单起见,我们看一个常见的 3 向合并)
A
|
1--2--3--4
|
5--6--7
|
B
现在假设您要合并它们。 git 现在会做什么?
- 首先,它将尝试找到
A
和B
的最共同祖先,在本例中为2
。 - 它现在将确定
4
和7
带来的变化,并再次匹配它们2
以获得合并的差异。更详细:如果您有2
和7
中的更改,它将在合并更改时采用A
中的更改,反之亦然。
因此,与简单的 cherry-pick 相比,合并有可能在进行实际合并时考虑更多信息。