我一直在阅读有关--squash
提交的一些内容,但它们似乎都与--rebase
齐头并进。
我有一个功能分支,其中包含一组这样的提交:
(Feature) A --> B --> C --> D --> E --> F --> G
/
(Master) M1 --> M2 --> M3
假设我想合并回Master
分支,但我想首先清理我的功能提交。
是否可以:
OR
无论哪种方式,我是否可以直接在我的功能上进行压缩,而不会立即初始化Merge
或Rebase
?
如果是这样,我怎么能用Git做到这一点?
答案 0 :(得分:4)
在我团队的工作流程中,我们经常在一堆提交中与上游合并,并且变基可能变得丑陋。我发现这有助于将所有提前完成的提交压缩成一个:
# Commit any working changes on branch "mybranchname", then...
git checkout master
git checkout -b mybranchname_temp
git merge --squash mybranchname
git commit -am "Message describing all squashed commits"
git branch -m mybranchname mybranchname_unsquashed
git branch -m mybranchname
# Optional cleanup:
git branch -D mybranchname_unsquashed
# If squashing already-pushed commits...
git push -f
答案 1 :(得分:3)
解决方案:可以将多个提交压缩为单个提交而无需重新部署。最好的选择是从master创建一个新的临时分支,然后将仅一次提交压缩的混乱分支合并到临时分支中,然后在工作分支中指向该分支,然后删除该临时分支。
让我们假设:
master
是您的主分支feature
是您凌乱的工作分支temp
是您的临时分支机构如何做到?
git checkout -b <temp> <master>
git merge --squash <feature>
git commit -m "your single message"
git checkout <feature>
git reset --hard <temp>
git push -f
git branch -D <temp>
之前:
(Feature) A --> B --> C --> D --> E --> F --> G
/
(Master) M1 --> M2 --> M3
之后:
AG -->
/
(Master) M1 --> M2 --> M3
答案 2 :(得分:0)
是和否。
是的,您可以避免更改提交的父级&#39; A&#39;但我相信你无法避免git rebase
。您可以在同一个根目录上进行交互式rebase:
git rebase -i M2 Feature
然后你可以做任何你想做的事情,最后分支Feature
仍将从提交M2开始。
答案 3 :(得分:0)
如果提交是本地的并且尚未推送,则此方法有效:
git reset --soft HEAD~x
git commit -m "whatever"
其中 x 是您要压缩的提交数量
不确定如果您要压缩的提交也在遥控器上,这将如何工作 - 如果是这种情况,您“可能”需要:
git push -f
运行上述命令后。 git push -f
的常见警告适用 - 如果需要强制推送,请确保首先使用 git log 进行完整性检查!