【问题标题】:Git merge - Treat any auto file change as a conflict (do not stage), like a --squashGit 合并 - 将任何自动文件更改视为冲突(不要暂存),例如 --squash
【发布时间】:2015-07-27 02:24:35
【问题描述】:

我正在将大量未包装的标签从 master 合并到一个主题分支中,并且正在使用:

git --no-commit --no-ff tagName^0 

它的工作原理应该。除了创建的实际硬文件冲突之外,我还需要查看和手动编辑大量具有不正确自动合并的文件,因为需要人工来确定正确的策略(就像您在 git add -p filename )。

那么,首先,有没有办法防止在合并中自动暂存任何(所有)文件?

有没有办法进行“合并--squash”,手动编辑文件(git add -p),然后在下一次提交时将其实际转换为 MERGE_HEAD 以便提交有两个父级并成为下一个合并基地。

【问题讨论】:

    标签: git merge


    【解决方案1】:

    有没有办法防止在合并中自动暂存任何(所有)文件?

    是的。使用git merge --no-ff --strategy=ours 保留未提交的无操作合并,这是进行手动合并的基线,然后使用 git read-tree 的合并设置用于执行除冲突解决之外的所有低级准备,选择您希望它为您处理的情况的选项。

    git merge --no-ff --no-commit -s ours topic
    git read-tree -um $(git merge-base @ topic) @ topic
    

    git merge docs 。 . . git read-tree docs

    这会完成所有唯一一个分支更改的事情,但会留下任何带有冲突提示的内容供您解决。

    你可以得到每个需要合并的文件的三个不同版本

    git ls-files -u \
    | git checkout-index --stage=all --stdin
    
    # do the manual resolutions you don't want any automerge for here
    

    git ls-files docs 。 . . git checkout-index docs

    当你完成了所有 git 不应该触及的手动解决方案后,你可以使用 git 的自动解析器清理其余的 git merge-index -ao git-merge-one-file

    git merge-index -ao git-merge-one-file
    
    # resolve any conflicts automerge can't figure for you
    
    git add all-the-correctly-merged-files-you-havent-already-added
    git commit
    

    git merge-index docs

    【讨论】:

    • 啊,合并后做一个读树-s ours...很好!...好吧,试一试看看是否一切正常。仅供参考:我正在从大师合并到主题,因此您列出的一些主题成为大师的未包装标签。
    • 合并基础没有向上移动的问题......仍在使用这些步骤解决为什么会发生这种情况。
    猜你喜欢
    • 1970-01-01
    • 2012-06-28
    • 2014-07-17
    • 2019-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-24
    • 2012-04-19
    相关资源
    最近更新 更多