仅在一个文件上应用git merge策略?

时间:2013-04-26 07:34:25

标签: git

将分支合并到另一个分支时,可以定义合并策略,如

git merge release -X ours

当将发布分支中的内容合并到当前分支时,这将全局应用策略“我们的”。是否可以仅将此策略应用于某个特定文件,如

git merge release -X docs/release-notes.md ours 

这样“我们的”策略只在合并docs / release-notes.md文件时使用?或者有人知道另一种选择吗?

3 个答案:

答案 0 :(得分:1)

如果你看一下帮助

,我认为这是不可能的
       ours
           This option forces conflicting hunks to be auto-resolved cleanly by favoring our version. Changes from the other tree
           that do not conflict with our side are reflected to the merge result. For a binary file, the entire contents are taken
           from our side.

           This should not be confused with the ours merge strategy, which does not even look at what the other tree contains at
           all. It discards everything the other tree did, declaring our history contains all that happened in it.

您可以看到没有可用选项的指示,而不是可能的subtree策略

       subtree[=<path>]
           This option is a more advanced form of subtree strategy, where the strategy makes a guess on how two trees must be
           shifted to match with each other when merging. Instead, the specified path is prefixed (or stripped from the beginning)
           to make the shape of two trees to match.

答案 1 :(得分:1)

git merges对跟踪内容的不同状态进行操作,而不是对单个文件进行操作。换言之,git没有看到提交触摸两个文件或提交触摸一个文件之间的任何根本区别。

因此,在干净的git工作流程中,期望在提交和分支策略中存在主题一致性。更具体地说,它更多&#34; gitty&#34;产生一个修复&#34;主题&#34;而不是修复特定文件的提交。它更多&#34; gitty&#34;有分支,包含针对特定&#34;主题&#34;而不是分支处理特定文件的开发。

将此问题与您的问题联系起来,在不了解您的代码库或git策略的情况下,根据单个文件的状态以不同方式合并特定分支的需要可能表明分支模型可能需要有点抛光。

如果您希望发布分支中的更改而不是发布分支中README.md文件中的更改,则可能需要以某种方式拆分发布中的README.md中的更改您可以合并发布分支而不将更改合并到README.md。然而,鉴于该分支被称为释放,我想你根本不想非常努力地敲打它。

如果您需要从发布中合并但忽略README.md更改是经常性的,您可以考虑设置并行分支以释放像release-noreadme。然后你就可以随心所欲地发布release-noreadme,包括按摩README.md文件以满足你的需求,这样你就可以从release-noreadme合并,而不必担心特定文件中的特定更改的脚尖。

tl; dr:考虑让分支同步发布,你可以解决不需要的更改,然后从该分支合并而不是发布。

答案 2 :(得分:0)

我在this answer

中回答了一个非常类似的问题

使用我在那里提出的git-merge-file包装器,你可以做你想要的事情

    let cell = tableView.dequeueReusableCellWithIdentifier("relatedCell", forIndexPath: indexPath) as! RelatedBookTableViewCell

    if indexPath.row == 4 {
         cell.URLRequest(self.bookID)
     }
return cell

这是我写的包装器bash函数:

git merge release 
git-resolve-conflict --ours docs/release-notes.md