![](/img/trans.png)
[英]Git : How to delete all local branches (merged or not), except master and develop
[英]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
:
merge_target=$(git config --get branch.${branch}.merge)
)。 查看合並目標。 --no-commit
合並; 或者在步驟1中,使用--detach
檢查,以便在合並成功時獲得可以放棄的提交。 --detach
),你可以非常簡單地完成最后一次測試,沒有任何差異:運行git rev-parse HEAD^{tree}
和git rev-parse HEAD^^{tree}
1並查看它們是否產生相同的哈希值。 如果不允許犯,你仍然可以git diff
的電流( HEAD
)提交反對提出的合並。 如果你需要從diff中刪除一些噪音(例如,配置文件不應該,但無論如何,在提交中),這給你一個地方去做。 git merge --abort; git reset --hard HEAD; git clean -f
或類似,具體取決於你決定如何實現步驟1-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.