小编典典

樱桃挑选后git合并如何工作?

all

假设我们有一个master分支。

然后我们创建一个newbranch

git checkout -b newbranch

并做出两个新的提交newbranchcommit1commit2

然后我们切换到master并制作cherry-pick

git checkout master
git cherry-pick hash_of_commit1

调查gitk我们看到commit1及其精选版本具有不同的哈希值,因此从技术上讲,它们是两个不同的提交。 __

最后我们合并newbranchmaster

git merge newbranch

并看到这两个具有不同哈希值的提交合并没有问题,尽管它们暗示应该应用两次相同的更改,因此其中一个应该失败。

git 是否真的在合并时对提交的内容进行了智能分析,并决定不应两次应用更改,或者这些提交在内部被标记为链接在一起?


阅读 69

收藏
2022-06-13

共1个答案

小编典典

简短的回答

别担心,Git 会处理的。

长答案

与例如 SVN 1不同,Git 不以增量格式存储提交,而是 基于快照的 2,3。虽然 SVN
会天真地尝试将每个合并的提交作为补丁应用(并且由于您描述的确切原因而失败),但 Git 通常能够处理这种情况。

合并时,Git 会尝试将两个 HEAD 提交的快照合并到一个新的快照中。如果两个快照中的一部分代码或文件是相同的(即,因为提交已经被精心挑选),Git
不会触及它。

来源

1 Subversion 中的 Skip-Deltas

2 Git 基础
3 Git 对象模型

2022-06-13