Git-你能用rebase做些你能做的事情吗';合并不行吗?

Git-你能用rebase做些你能做的事情吗';合并不行吗?,git,git-rebase,Git,Git Rebase,每次我尝试重新设置基础时,我都会卷入一个无限循环的无法解决的冲突中。在解决x冲突之前,出现y冲突,然后再次出现x冲突,依此类推 关键是(显然)merge,甚至是cherry pick,提供了与rebase相同的功能,不是吗?如果不是的话,rebase的用处是什么?我只在一种情况下使用rebase。本案: 我有master分支和当前版本的应用程序 我为新功能创建功能分支 我在功能分支中进行了一些提交 我在主分支中进行了一些热提交 现在我想在feature分支中提交,在本例中我做rebase 我完成

每次我尝试重新设置基础时,我都会卷入一个无限循环的无法解决的冲突中。在解决x冲突之前,出现y冲突,然后再次出现x冲突,依此类推


关键是(显然)
merge
,甚至是
cherry pick
,提供了与
rebase
相同的功能,不是吗?如果不是的话,
rebase
的用处是什么?

我只在一种情况下使用
rebase
。本案:

  • 我有
    master
    分支和当前版本的应用程序
  • 我为新功能创建
    功能分支
  • 我在
    功能分支中进行了一些提交
  • 我在主分支中进行了一些热提交
  • 现在我想在
    feature分支中提交,在本例中我做
    rebase
  • 我完成了
    功能分支
    ,并将其合并到master中

    git checkout master
    git checkout feature-branch
    git commit -am "feature commit #1"
    git commit -am "feature commit #2"
    git commit -am "feature commit #3"
    git checkout master
    git commit -am "hot fix"
    git checkout feature-branch
    git rebase master
    git commit -am "i'm done"
    git checkout master
    git merge feature-branch
    

  • 这允许我位于
    master
    分支的顶部,并拥有一个干净的git历史记录。

    rebase
    重写历史记录。它确实比
    merge
    cherry pick
    更重要,这是一个非常高级的工具,需要练习(而且可能很危险,因为它重写了历史…小心使用
    git push-f
    )。当
    重设基础
    的使用方式与
    合并
    类似时,过程截然不同

    git获取源代码和&git合并源代码/master

    • 从源代码下载更改
    • 在本地分支上合并更改
    • 解决冲突并承诺
    git获取源代码和&git重基源代码/主代码

    • 从源代码下载更改
    • 将本地分支重置为历史记录中的公共点(本地/远程回购共享的提交)
    • 快进到原点
    • 在新提交的基础上逐个应用您的提交
    • 解决冲突并提交每个本地更改
    在这种情况下,
    rebase
    的最大优点是,您只需更新本地回购协议,并在上面应用提交,就不会有任何“粗略”的合并提交,比如“嘿,我刚刚将这些内容合并到了中”。缺点是,如果有大量提交修改了相同的文件,由于不存在“总体”合并提交,因此必须反复解决冲突


    但同样,
    rebase
    是一个非常高级的工具,用于重写历史。你可以修改以前的提交标题,删除过去的提交,将许多提交挤在一起,等等。

    所以,如此“自由”地重写历史,会使你失去可追溯性,不是吗?这是一个很好的总结,@Julen。