我如何使用Git作为一个提交进行rebase

ZMi*_*ton 5 git rebase squash

我的历史看起来有点像这样但是时间10:

                i - j - e'- k - h'- l - m  feature-branch
              /
    a - b - c - d - e - f - g - h  master
Run Code Online (Sandbox Code Playgroud)

(撇号意思是樱桃选秀权)我想改变这个:

                                  i - j - k - l - m  feature-branch
                                 / 
    a - b - c - d - e - f - g - h  master
Run Code Online (Sandbox Code Playgroud)

我不介意该功能是否被压缩为1次提交.常规rebase的主要问题是它一次尝试重新设置一个提交,我必须一遍又一遍地修复和重新修复类似的冲突.

我想要的只是取我的分支尖端和主人的尖端之间的差异,并将其应用于主人之上.

Die*_*Epp 6

这其实很容易.

  1. 合并masterfeature-branch.您将立即解决所有合并冲突.(我强烈建议你到此为止.)

                i - j - e'- k - h'- l - m - n    feature-branch
              /                           /
    a - b - c - d - e - f - g - h --------       master
    
    Run Code Online (Sandbox Code Playgroud)
  2. 然后,git reset --soft master.这将使它成为feature-branch指向master,但它将保留索引中的所有更改,准备提交.

                i - j - e'- k - h'- l - m - n    (orphaned)
              /                           /
    a - b - c - d - e - f - g - h --------       master, feature-branch
                                  \
                                    (index)
    
    Run Code Online (Sandbox Code Playgroud)
  3. git commit

                i - j - e'- k - h'- l - m - n    (orphaned)
              /                           /
    a - b - c - d - e - f - g - h --------       master
                                  \
                                    n'           feature-branch
    
    Run Code Online (Sandbox Code Playgroud)

#2和#3的唯一目的是摧毁历史feature-branch.如果你确定你永远不会需要那段历史,那很好.但是,为了删除实际发生的事情的准确记录,去除所有这些额外麻烦似乎是浪费.