簡體   English   中英

刪除所有已推送的git分支

[英]Delete all git branches already pushed

我的需要

嗨,我正在尋找一個命令來刪除所有已經推送到原始位置的本地分支。

我特別想保留所有尚未提交的分支到它們各自的遠程分支。

原因

git prune通過刪除遠程站點時清除分支來完成一部分工作,但是由於我有很多功能分支,因此我需要僅保留尚未完全推送到遠程的分支,以避免本地分支的列表過長在我的倉庫中,將它們限制為實際工作中的對象。

謝謝!

git remote update # `git fetch --all` but it allows configurable skipping, see the docs
git for-each-ref refs/heads --format='
        [[ "%(upstream)" != "" ]] &&    # there is an upstream branch
        git merge-base --is-ancestor %(refname) %(upstream) &&  # which has this tip
        echo delete %(refname)
' # | sh # | git update-ref --stdin

為shell生成命令是有用且有趣的-如果對上面的命令進行c&p操作,它實際上不會對您的存儲庫做任何事情,而是輸出命令來檢查分支是否在上游; 刪除# ,它將執行檢查,而不僅僅是打印檢查,然后嘗試。

盡管就jthill提出的靈活而明智的解決方案而言,它看起來像是一頭盲目大象,但在這里,我還是分享我到目前為止為滿足您所描述的需求而傾向於使用的殘酷方法:

# nuke all branches* (which have no unique commit)
git branch -d $(git for-each-ref --format="%(refname:short) refs/heads")

# for "main" branches (I mean permanent, like master), recreate them if needed from remote
git checkout master

這是一次性版本,但為方便起見,可以輕松地為其創建別名。

注意-d標志,該標志,而不是-D ,意思是“軟刪除”,並拒絕刪除與未合並的提交(由safecheck忽略分支-D )。


* 在這里,git可能(取決於當前分支的狀態)抱怨無法刪除您所在的分支。 在直接命令模式下沒什么大不了的,但是在別名方面有點煩人。 只需事先檢出模擬分支,然后再將其刪除。 由於我們在確定一切,因此我傾向於將其命名為from-orbit

暫無
暫無

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

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