【问题标题】:git: splitting merge into a few commitsgit:将合并拆分为几个提交
【发布时间】:2015-03-18 08:38:37
【问题描述】:

我创建了一个git merge --squash other_branch(我使用 squash,因为我使用 git 处理 svn 存储库)。

现在我有一些(合理的)冲突,我需要非常小心地解决它。

我正在尝试想出一些聪明的方法来处理所有这些混乱,并可能与其他人分享一些工作。

我想到的是把这个合并分成几个提交。 一旦它们看起来不错,我想提交一些原子更改,它们是有意义的并且是可编译的。

但是我不太确定如何实现这一点。 我必须先暂存准备好的文件,然后 git stash 所有其他人查看暂存文件是否正在编译,然后 git commit 最后 git stash pop 继续处理其余文件。

但是,Git 不允许我存储未合并的路径。

我在谷歌上找不到任何现成的收据。看起来每个人都会同时使用git merge

有人有想法或已经合并了吗?

【问题讨论】:

    标签: git version-control merge git-merge


    【解决方案1】:

    假设你正在合并到一个分支target

    您可以在临时分支中提交合并结果,包括其冲突:

    A---B - target
        \---C - tmp
    

    并以较小的块签出要处理的文件以进行下一次合并提交:

    $ git checkout target
    $ git checkout tmp -- conflicting_file
    

    然后处理conflicting_file 中的冲突,并在您的target 分支中通过冲突解决提交它:

    A---B---D - target
        \---C - tmp
    

    然后再次检查来自tmp 的下一个冲突文件,继续直到解决所有冲突。

    【讨论】:

    • 这只有一个缺点:在暂存冲突文件后,git 不再将它们识别为有冲突的文件,并且mergetools 并没有像它们那样工作;)
    • grep -r <<<<< 有帮助吗? (我想您的意思是在将冲突文件提交到 tmp 之后,而不是“暂存”。)
    • 在文件中找到冲突对我来说不是问题,我只是说在提交到tmp git 后不再正确标记冲突文件:它会处理 >>> 标记作为常规文本
    猜你喜欢
    • 1970-01-01
    • 2022-06-23
    • 2012-03-02
    • 2021-10-06
    • 2013-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-16
    相关资源
    最近更新 更多