簡體   English   中英

如何刪除所有本地分支,如果合並為主分支將導致無變化?

[英]How can I delete all local branches which would result in no changes if merged into master?

我知道如何刪除已合並的所有本地分支 但是,我相信這是由於Github的新拉動請求壓縮和合並功能,我發現自己留下了許多未合並的本地分支,但如果合並到master中將導致沒有變化。

如何修剪這些本地分支,即那些未必合並但不會影響主分支(或更一般地說,當前分支)的本地分支?

沒有完美的解決方案,但你可以接近,也許足夠接近。

一定require_clean_work_tree干凈的工作樹和索引開始(請參閱git-sh-setup require_clean_work_tree )。

對於可能可刪除的每個候選分支$branch

  1. 找到它的合並目標(大概是merge_target=$(git config --get branch.${branch}.merge) )。 查看合並目標。
  2. --no-commit合並; 或者在步驟1中,使用--detach檢查,以便在合並成功時獲得可以放棄的提交。
  3. 測試git是否認為合並成功,如果是,則當前樹是否與前一棵樹匹配,即沒有帶來任何變化。 如果你可以測試完全匹配,並且你允許提交(通過--detach ),你可以非常簡單地完成最后一次測試,沒有任何差異:運行git rev-parse HEAD^{tree}git rev-parse HEAD^^{tree} 1並查看它們是否產生相同的哈希值。 如果不允許犯,你仍然可以git diff的電流( HEAD )提交反對提出的合並。 如果你需要從diff中刪除一些噪音(例如,配置文件不應該,但無論如何,在提交中),這給你一個地方去做。
  4. 重置( git merge --abort; git reset --hard HEAD; git clean -f或類似,具體取決於你決定如何實現步驟1-3)。 這只是為了讓您的工作樹和索引再次清理,以便下一次傳遞。
  5. 如果步驟3中的合並有效並且未引入任何更改,則可以刪除本地分支。 否則,保持它。

實質上,這是“實際上合並,看看會發生什么”,只是完全自動化。


1這個符號看起來有點怪異,但它只是HEAD^的-the第一個父HEAD通過-followed ^{tree} 替代拼寫可能更容易閱讀: HEAD~1^{tree}${merge_target}^tree ,其中${merge_target}是您在步驟1中檢出的分支。請注意,這假設合並成功。 合並結果處於git merge的退出狀態:零表示成功,非零表示失敗,需要手動幫助,可能是由於合並沖突。

如果你運行git“branch -v”,那些有變化的跟蹤分支將在它們旁邊寫下“前面”。

另外兩個選項:“后面”並且如果沒有寫入,則意味着分支沒有會影響它們跟蹤的分支的更改。

因此,你可以運行“git fetch”來更新遠程跟蹤分支,然后解析“git branch -v”結果,找出哪些分支沒有變化,哪些分支有。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM