【问题标题】:Git merge all but one file, and that file be a (full) conflicted fileGit合并除一个文件外的所有文件,并且该文件是(完整)冲突文件
【发布时间】:2014-01-13 09:14:42
【问题描述】:

抱歉标题,很难用连贯的句子来概括。

我看到很多其他人要求合并除了一两个文件之外的所有文件,这里的建议通常是樱桃采摘。但是我不确定该怎么做,也找不到类似的问题。

基本上我有两个分支,我们称它们为devrefactor。 我想把refactor 分支合并到dev 中,一般都是这样做的。

refactor 包含一些新文件和一个与主逻辑完全不同的文件(我们称之为file);我想合并分支,但是我希望 file 发生冲突,或者至少是类似的。

// file in <dev>
lots of code
loop
    main logic
lots more code

重构的重点是消除对大型、高度嵌套循环的需求。重构代码的形式为:

// file in <refactor>
lots of code
BLANK (where main logic ought to be)
lots more code

我希望整个文件进入“冲突模式”或其他模式,这样我就可以有选择地将主逻辑从原始文件中取出并放入新文件中。

这不仅仅是文件中的一个,还有几个,但这只是为了提供一个想法。

这可能吗?还是我必须在合并之前手动将代码从dev 复制到refactor

【问题讨论】:

    标签: git merge branch


    【解决方案1】:

    您可以尝试使用 custom merge driver 来尝试此操作,它只是表示文件存在冲突。但是,只有在当前分支和要合并的分支都从存储在合并库中的版本开始触及文件时才有效。


    如果您已经知道要在合并之后但在提交之前手动编辑哪个文件,我只需运行 git merge --no-commit ...。生成的合并可能会被标记为“准备提交”,但您可以先对其进行任意编辑(然后git add 编辑结果)。您所做的最终手册git commit 将是一个合并提交,因为合并过程会在.git 目录中留下文件来记录这一点。

    无论有没有冲突,在编辑的时候,你可以git show HEAD:filegit show branch:file看到这两个版本的文件file。如果需要,将结果转储到临时文件中。

    查看共同祖先版本没有完全简单的方法,但这种两步方法将在类 Unix 的 shell 中完成:

    ancestor=$(git merge-base HEAD branch)
    git show ${ancestor}:file
    

    (或者,您可以将其简化为:

    git show $(git merge-base HEAD branch):file
    

    在任何一种情况下都是相同的方法:首先我们重复 git merge 进行的基于合并的计算,然后我们使用选定的修订版到 show 文件 file。)

    【讨论】:

    • 感谢您的意见,我发现在撰写本文时我不需要此问题,但现在已成为需要。
    猜你喜欢
    • 1970-01-01
    • 2012-02-16
    • 1970-01-01
    • 2012-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多