压缩多个提交的简单方法?

时间:2017-03-02 20:34:22

标签: git

我经常想在垃圾分支中压缩几十个提交,以便在登台服务器上进行测试。特别是当使用具有问题自动关闭功能的问题跟踪器(如bitbucket)时 - 我不想在那时关闭提交消息中提到的问题,所以我需要压缩。

必须要比在rebase上单独更改每一行更容易,或者必须知道壁球的目标前有多少次提交。

像“使用散列XXXXXX进行此提交之前一切壁纸”

3 个答案:

答案 0 :(得分:3)

是的,当您在交互模式下使用rebase时,可以通过标记它们来压缩提交。参阅:

  1. https://robots.thoughtbot.com/git-interactive-rebase-squash-amend-rewriting-history#squash-commits-together
  2. http://gitready.com/advanced/2009/02/10/squashing-commits-with-rebase.html
  3. 您还可以尝试git merge --squash这是一种更直接的方法,也是您正在寻找的东西 - https://stackoverflow.com/a/5190323/7274758

    我们假设您有以下提交

    O - O - L1 - F1 - F2 - F3a - F3b - F4 - .... - FN
            |     |                                \_ master, HEAD
            |     \_ Fix for Issue 1 and so on.
            |
            \_ Last Tested. You would like to squash all from this point
    
    1. 将HEAD重置为L1 git reset --hard L1

      O - O - L1 - F1 - F2 - F3a - F3b - F4 - .... - FN
              |     |                                
              |     \_ Fix for Issue 1 and so on.
              |
              \_ (Last Tested), master, HEAD
      
    2. 现在将所有东西压到前一个头上(即FN)git merge --squash HEAD@{1}

      O - O - L1 - F1 - F2 - F3a - F3b - F4 - .... - FN
              | \ 
              |  \_ 0
              |
              \_ (Last Tested), master, HEAD
      
    3. 执行提交 - git commit这将提交从F1到FN(SF1_FN)的所有更改

      O - O - L1 - SF1_FN
                  |
                  \_ master, HEAD
      

答案 1 :(得分:2)

最自动的方法是使用git merge --squash。你是否应该使用Libin Varghese的答案或者这个答案可能取决于你是否打算保留原始提交。如果没有,他拼出的内容很简单。但如果是这样......

如果你有

A --- B --- C --- D <--(branch)

你希望压制BCD,你可以做

git checkout B^
git checkout -b squashed_branch
git merge --squash branch
git commit

现在你有了

A --- B --- C --- D <--(branch)
  \
    BCD <--(squashed_branch)

答案 2 :(得分:0)

git checkout --orphan wip
git commit

如果您只是测试内容,则不需要祖先。