簡體   English   中英

Git prune 沒有刪除我的本地分支

[英]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 origingit 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.

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