[英]Git prune did not delete my local branches
我在 Github.com 上刪除了一堆合並的分支,我做了一個 git pull,我所有的分支仍然出現。
因此,我跑了..
git remote prune origin
它表明分支在輸出中被修剪。
但是,當我運行時,我所有已刪除的分支都會出現
git branch
我假設我做了一些與預期不同的事情? 我做了什么? 如何從本地刪除已從 GitHub 中刪除的分支?
在這篇文章中: git remote prune origin 不會刪除本地分支,即使其上游遠程分支被刪除
它提到了同樣的問題,但我不明白他們的意思,當他們說它從本地刪除陳舊的遠程分支時。
不應該刪除它們。
你當地的分支機構——實際上應該被稱為“你的分支機構”——是你的。 在這種情況下,只有您的遠程跟蹤名稱origin/*
不是您的。 1因此,如果origin
之前有一個名為xyzzy
的分支,但不再存在, git fetch --prune origin
或git remote prune origin
會刪除您的origin/xyzzy
以匹配origin
的缺失xyzzy
。
它不會觸及你的樹枝,這是你的。 如果您確定它們現在可以刪除,則必須自己刪除它們。 人們已經編寫了腳本來執行此操作,但是說腳本往往很愚蠢:即使您在合並之前忘記推送或打算移動到另一個分支的提交,他們也會經常刪除您的xyzzy
,並且一旦您的xyzzy
被刪除,它就是往往為時已晚。 所以要小心這樣的腳本。
(如果我有一個本地分支xyzzy
指向與origin/xyzzy
相同的提交,並且您要刪除origin/xyzzy
,那么也可以刪除我的本地xyzzy
。 ,如果我有xyzzy
,但origin/xyzzy
與我的xyzzy
不匹配,請抱怨並停止,以便我可以弄清楚該怎么做。但他們沒有這樣的選擇。)
1從技術上講,這些也是你的。 只是您的 Git 被設置為當您的 Git 調用它們的 Git( origin
的 Git)並從它們獲取分支名稱和哈希 ID 時,您的 Git 會用更新的master
覆蓋您自己的origin/master
master
。 因此,雖然origin/master
是您的 Git 存儲庫的“name-to-hash-ID”數據庫中的一個名稱,但它通常不是您自己控制的名稱。 你只需讓你的 Git 鏡像他們的 Git,他們的master
成為你的origin/master
。
或者,簡而言之:您的 Git 的origin/master
是您的 Git 記住他們的 Git 的master
。 所以這是他們的。
正如torek已經說過的,第一個關鍵點是修剪您的遠程跟蹤分支,以確保您正在與新的參考列表進行比較。 您可以使用
git fetch --prune
然后發現當地的“剩余”分支:
git for-each-ref --format='%(if)%(upstream:short)%(then)%(else)%(color:bold red)%(end)%(refname:short)' refs/heads
(它們會在輸出中顯示為紅色)
或者(假設您的遙控器名為origin
):
git branch -vv | grep -v origin/
...最后一個階段是手動刪除它們
git branch -d <branch>
由於您將它們顯示得非常方便,因此您不應該遭受超過幾次復制/粘貼的痛苦。 如果陳舊分支的數量經常很大,或者說,足夠重要,那么也許可以在工作流程中放置一些東西來避免重復發生的情況?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.