我经常想在垃圾分支中压缩几十个提交,以便在登台服务器上进行测试。特别是当使用具有问题自动关闭功能的问题跟踪器(如bitbucket)时 - 我不想在那时关闭提交消息中提到的问题,所以我需要压缩。
必须要比在rebase上单独更改每一行更容易,或者必须知道壁球的目标前有多少次提交。
像“使用散列XXXXXX进行此提交之前一切壁纸”
答案 0 :(得分:3)
是的,当您在交互模式下使用rebase时,可以通过标记它们来压缩提交。参阅:
您还可以尝试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
将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
现在将所有东西压到前一个头上(即FN)git merge --squash HEAD@{1}
O - O - L1 - F1 - F2 - F3a - F3b - F4 - .... - FN
| \
| \_ 0
|
\_ (Last Tested), master, HEAD
执行提交 - 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)
你希望压制B
,C
和D
,你可以做
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
如果您只是测试内容,则不需要祖先。