2016-11-21 53 views
0

我期待git reset --softgit rebase將幾個提交壓縮爲一個,但在我的情況下它並不是真的可以工作。git rebase <tag>/git reset --soft <tag>無法正常工作

我有這個bash腳本。它打算從開發分支簽出分支,壓縮提交,然後我們簽出另一個分支,刪除一些私人文件,然後將結果推送到公共遠程。

有人建議我使用標籤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

嘗試,而不是:

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分支將累積壓扁的提交。

然後:

git merge --squash dev 

參見 「In git, what is the difference between merge --squash and rebase?」。

+0

謝謝,你能描述一下這種做法與上面不同嗎?請注意,我的dev_squash分支旨在僅累積壓扁的歷史記錄,而dev分支旨在提供所有提交(在dev中沒有壓縮)。我是這樣設計的(可能它有缺陷),這樣我們就不會有任何壓扁的舊南瓜,如果這樣做合理的話。 –

+0

@AlexanderMills不同的是,我從標記而不是從dev的HEAD開始dev_squash。 – VonC

+0

我的恐懼是,如果我使用你的策略,舊的南瓜會變得不穩定,不是嗎? –

相關問題