我期待git reset --soft
或git rebase
将几个提交压缩为一个,但在我的情况下它根本不起作用。
我有这个bash脚本。它旨在从dev分支签出分支,压缩提交,然后我们签出另一个分支,删除一些私人文件,然后我们将结果推送到公共远程。
我被建议使用标签在git历史中创建地点以压缩,我认为这是有道理的,但由于某种原因,以下脚本根本没有实现其目标 - 不提压挤似乎一直在发生。
npm version patch --force -m "Upgrade for several reasons" && # bump version
git add . &&
git add -A &&
git commit --allow-empty -am "publish/release:$1" &&
git push && # push to private/dev remote repo
git checkout dev_squash && # we do squashing on this branch
git merge dev -m "squashing" &&
# git reset --soft $(git describe --tags) &&
git rebase $(git describe --tags) &&
git add . &&
git add -A &&
git commit --allow-empty -am "publish/release:$1" &&
git tag xyz`date "+production-%Y%m%d%H%M%S"` &&
git checkout -b temp && # we checkout this branch to run deletes on private files
./delete-internal-paths.sh &&
git rm delete-internal-paths.sh -f &&
git add . &&
git add -A &&
git commit --allow-empty -am "publish/release:$1" &&
git push public HEAD:master -f &&
git checkout dev &&
git branch -D temp &&
npm publish .
正如您所看到的,我同时尝试了git rebase
和git reset --soft
,但我也没有尝试过。知道为什么它可能没有按预期工作吗?
这是一个视觉效果:
答案 0 :(得分:1)
尝试改为:
git checkout -b dev_squash $(git describe --tags --abbrev=0)
(请注意--abbrev=0
is needed to get back the latest tag on develop
)
实际上,如下所述,最好在dev_squash
开始的dev
分支处创建一次:
git checkout -b dev_squash `(git merge-base dev master)`
然后将dev_squash
保留为长寿分支,并在需要时随时生成git merge --squash dev
:dev-squash branch将累积压缩提交。
然后:
git merge --squash dev
另请参阅“In git, what is the difference between merge --squash
and rebase
?”。