2017-09-01 90 views
2

假設我單獨工作,並且只使用遙控器作爲代碼備份解決方案。有時我可能會刪除當地分行。刪除本地不存在的遠程分支

我知道我可以用git push origin --delete mybranch刪除遠程的特定分支,但是有沒有辦法刪除本地不存在的所有遠程分支,而無需手動檢查本地不存在的分支?

+1

只要寫一個腳本來做到這一點。使用'git for-each-ref'(以'git fetch --prune'開頭來更新你的Git的遠程跟蹤分支)。 – torek

+0

@torek是正確的,這可能是最好的方法,但是你激發了我的興趣,因爲這是一般慣例的極端相反,你的用例是什麼,你不想保留代碼? – LightBender

+0

@LightBender我通常會進行本地提交,然後將所有分支推送到遠程。有時在離線工作時,我合併分支,然後刪除舊的(合併的)分支。但是,舊的(合併的)分支仍然存在於遙控器上。我正在尋找保持本地和遠程同步這種工作流程的方法。 – Flux

回答

1

有時脫機工作時,我合併分支,然後刪除舊的(合併)分支。

最好是這樣做網上,你可以用push --delete, as in this answer跟進:

git branch -r --merged | grep -v master | sed 's/origin\///' | xargs -n 1 git push --delete origin 

但既然你本地刪除你的分支(離線),你需要的時候在網上,到fetch --prune的來自GitHub的遠程分支,檢查他們的本地對應方是否存在,否則push --delete

使用git for-each-ref with the refname:lstrip=3 format爲了列出這些遠程分支機構的短名稱:

git for-each-ref --format='%(refname:lstrip=3)' refs/remotes/origin 

您可以檢查是否有local branch does existsgit show-ref --quiet

if git show-ref --quiet refs/heads/develop; then 
    echo develop branch exists 
fi 

所以,你可以輕鬆地將二者結合起來。

git fetch --prune 
for branch in $(git for-each-ref --format='%(refname:lstrip=3)' refs/remotes/origin); do 
    if ! git show-ref --quiet refs/heads/${branch}; then 
     echo "delete remote branch '${branch}'" 
     git push origin --delete ${branch} 
    fi 
done 
相關問題