现在有的后来合并了一些文件(Merge some files now and some later)

2019-09-17 21:06发布

我在分支B.一堆提交之后,几个文件准备/通过分支一个必要的,但很多都没有准备好/必要的。 我想合并只是这些文件,保持适当的git的历史。 后来,当我真正合并,我不希望这些变化的起源有误导线索 - 他们应该正确地引用,他们从来到即使在是那些提交的一部分,其他文件的更改没有合并的提交(但)。 我想这意味着分割提交到该做与不关注这些文件碎片。

此风会失去这些变化的历史和所有提出的解决方案产生很大问题,当我后来想合并B插入A,但部分B的变化已经在那里了。 我想避免这样的解决方案。

在龟,我可以看看日志的单个文件,并选择一些旧版本恢复到。 因此,在原则上,我可以做一个新的分支C,从B,并恢复所有我不想合并回点当B从A支然后,我可以合并C到A.这似乎是正确的文件轨道git的历史,让我合并B插入到一个没有被惊讶的是,一些B中的变更已经在那里了。

但它是痛苦的手动识别,并恢复20个文件,当我刚要合并2.为什么这不是一个常见的单步操作? 如何乌龟的复归作品 - 因为它可以在一个单一的文件进行操作,它必须是子提交,这是我要找的本质特征。 难道扔掉,我从一个新的版本将一老一事实,并令它看上去像是我只是做了一些手动更改即会再与B的回A的最终合并冲突?

Answer 1:

您正在寻找cherry pick ,要合并到从分公司提货只有某些提交的方法。

若要合并的某些文件(当你不想整个合并提交),你有多个解决方案,的确,我喜欢用一个中表达良好的这篇文章 ,它在一个痛苦的屁股无论如何,咬它的简单我发现到那种东西。

您也可以分割一些提交和合并仅包含正确的文件些,然后就可以像其他的文章说,



Answer 2:

这不是一个普通的单步操作,因为Git是一个内容跟踪器,而不是一个文件跟踪 。

您可以轻松地将更改应用于特定的文件从分支B到A分支,就像乌龟:

# raw file, no history
git checkout A
git checkout B myfile

要么

# copy a set of history from someplace else
git checkout A
git cherry-pick commit-hash-1..commit-hash-2

但那些都将保留历史从分支合并B.如果这是你想要做什么,这取决于如何在分支B中的提交是有组织的,这可能是你最好: 混帐:为主要版本分段合并方法变化?



文章来源: Merge some files now and some later