Git 在版本控制中合并和混合更改?

Git 在版本控制中合并和混合更改?,git,svn,version-control,Git,Svn,Version Control,由于版本控制系统要么将提交存储为更改列表,要么至少能够计算出文件不同版本之间的更改,因此是否可以从任何分支中选择任何更改(不一定是连续的),只要它们都影响同一文件,并以任何顺序将其应用于文件的任何版本,撇开冲突不谈 例如,假设我有一个包含一些初始内容(版本0)的文件a,然后我创建了一个分支,并在两个分支(版本1、2和1',2')中进行了一些更改。现在,我想混合修改以获得文件a的“自定义”版本 File A, version 0: ------------------ sample text

由于版本控制系统要么将提交存储为更改列表,要么至少能够计算出文件不同版本之间的更改,因此是否可以从任何分支中选择任何更改(不一定是连续的),只要它们都影响同一文件,并以任何顺序将其应用于文件的任何版本,撇开冲突不谈

例如,假设我有一个包含一些初始内容(版本0)的文件a,然后我创建了一个分支,并在两个分支(版本1、2和1',2')中进行了一些更改。现在,我想混合修改以获得文件a的“自定义”版本

File A, version 0:
------------------
sample text


至少在某种程度上,现在SVN或git(或其他)是否可以实现类似的功能?这样的事情可能吗(有可能创建这样的版本控制系统吗)?

版本控制系统中的差异几乎总是包含一些上下文。差异不是说“在文件末尾添加一行”,而是说“在包含该文本的行之后,在包含该文本的行之前添加一行”。由于这个原因,您的特定示例将导致冲突,并且差异不会完全适用

如果您的diff-actual可以干净地应用,那么您可以在大多数版本控制系统中这样做。它被称为“樱桃采摘”,并不局限于单个文件。您也可以手动应用差异,方法是要求VCS在您感兴趣的版本之间提供统一的差异,然后使用
补丁
命令行工具将该差异应用于您喜欢的基本状态

File A, version 1 (main branch):
------------------
sample text
new text 1        <-- added line
File A, version 2 (main branch):
------------------
sample text
new text 1
new text 2        <-- added line
File A, version 1' (new branch):
------------------
sample text
new text A        <-- added line
File A, version 2' (new branch):
------------------
sample text
new text A
new text B        <-- added line
File A, "custom" version:
------------------
sample text
new text 1
new text 2
new text B
new text 1