git rebase <tag> / git reset --soft <tag>不起作用

时间:2016-11-21 00:08:22

标签: git bash github

我期待git reset --softgit 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 rebasegit reset --soft,但我也没有尝试过。知道为什么它可能没有按预期工作吗?

这是一个视觉效果:

enter image description here

1 个答案:

答案 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?”。