【问题标题】:Merge, rebase or another alternative?合并、变基或其他选择?
【发布时间】:2015-02-09 23:24:57
【问题描述】:

我的应用程序需要每天从多个分支不断合并,有时每天需要多个版本。我喜欢 rebase 的能力,它可以帮助我将我的特性分支中已更改的代码与 master 分支隔离开来。然而,当我在回放更改时处理 10 或 20 个冲突时,变基通常会变成一场噩梦。这些冲突中的每一个都有可能被错误地解决,我想避免它。有没有办法做一个“快速”的变基,它实际上并不回放从变基到分支的更改,而只是使用该分支的最新版本,并修改功能分支,使其仅包含与最新的rebased-to分支?即它不关心历史,它只是做一个差异并使用每个分支的最新补丁来重新定位?

【问题讨论】:

    标签: git rebase


    【解决方案1】:

    您正在寻找的是一个 squash,您可以在与 git merge --squashrebase is a little more complicated 合并时执行此操作。

    但是,如果您只是查看代码并想查看功能分支中发生了什么变化(而不是分支和主分支之间的差异),您可以使用 git log master..branch 查看分支中的所有更改并git diff master...branch(注意三个点)查看分支中发生了什么变化。

    git diff [--options] <commit>...<commit> [--] [<path>...]
       This form is to view the changes on the branch containing and up to the second
       <commit>, starting at a common ancestor of both <commit>. "git diff A...B" is
       equivalent to "git diff $(git-merge-base A B) B". You can omit any one of
       <commit>, which has the same effect as using HEAD instead.
    

    有关三点的更多详细信息,请参阅 the gitrevisions man pageRevision Selection in Pro Git

    【讨论】:

    • 这就是我现在正在做的,git rebase -i。这是一个真正令人头疼的问题,因为它会回放所有的变化。我不想要那个。通常,同一段代码会被一遍又一遍地编辑,并且在 rebase 期间,当我关心的只是 master 的最终版本以及它与我的分支的比较时,我必须一遍又一遍地解决冲突。当我 --merge 这是一个一步过程。我只需要解决一次冲突。我想要一个那么容易的变基。我不知道那个 diff ... 命令。这可能会有很大帮助。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-07
    • 2014-11-05
    • 2021-09-25
    • 2014-09-15
    • 1970-01-01
    • 1970-01-01
    • 2018-07-16
    相关资源
    最近更新 更多