自從GitHub上介紹Squash and Merge,所有時尚的年輕人,在我的工作場所合併拉請求時都用它。有沒有辦法清理「壁球和合並」分支?如何刪除所有通過GitHub「擠壓併合並」的git分支?
從How can I delete all git branches which have been merged?下面的命令不會工作「壁球和合並」:
git branch --merged | egrep -v "(^\*|master|dev)" | xargs git branch -d
自從GitHub上介紹Squash and Merge,所有時尚的年輕人,在我的工作場所合併拉請求時都用它。有沒有辦法清理「壁球和合並」分支?如何刪除所有通過GitHub「擠壓併合並」的git分支?
從How can I delete all git branches which have been merged?下面的命令不會工作「壁球和合並」:
git branch --merged | egrep -v "(^\*|master|dev)" | xargs git branch -d
有沒有簡單的方法來自動完成這個,至少不完全。 (可以處理一些特殊情況。)相反,最好的辦法是將此分支刪除委託給拉取請求已被壓縮合並的人員。有幾個很好的理由:
他們是唯一可以確保合併正確完成的人。
例如,假設爲了壓縮一系列的六個提交,那些合成的壁板合併者必須或者選擇在一行或兩行中改變幾個字符,出於某種原因好或壞。這一行或兩行意味着最終提交的總體變化是不同於與六個提交中的六個更改的總和。
不過是總的結果是否正確?如果你自己沒有做任何修改,你會怎麼知道?
他們是唯一知道他們是否打算繼續在該分支上開發的人。
只是因爲feature/tall
六個提交被壓扁成一個提交加入devel
並不意味着feature/tall
是全部完成。他們可能有更多的提交要添加;他們可能需要再次變基feature/tall
到devel
,投下贊成的一六提交 - 壁球六個壓扁提交,但保持其他三個提交他們即將補充。
可能還有一些情況。這些可能都是罕見的;他們可能永遠不會發生在你的項目中但這裏的關鍵是,分支feature/tall
是他們分支,不你分支,因此他們,無論他們是誰,應該是那些刪除它時,它的完成。
請注意,當你拿起feature/tall
你有你自己的Git重命名爲origin/feature/tall
(假設你的遠程名爲origin
)。如果您正在試驗它,並且git checkout feature/tall
,您的Git會爲您製作一份副本。一旦他們刪除feature/tall
並運行git fetch origin --prune
,你的Git刪除您origin/feature/tall
。所以現在問題更簡單了,可以自動化:find branches whose "upstream" is gone, and delete those。 (在這個答案的一個行腳本有一些小瑕疵,看到的評論;票友人會使用git for-each-ref
和查找每個分支的上游設置有git rev-parse
,但是這可能矯枉過正)