1. 程式人生 > >git prune, git remote prune, git fetch --prune 三者異同

git prune, git remote prune, git fetch --prune 三者異同

遠端分支的3種狀態

  • 遠端倉庫確實存在分支dev
  • 本地版本庫(.git)中的遠端快照
  • 和遠端分支建立聯絡的本地分支
  • Prune all unreachable objects from the object database
    unreachable objects 指的是.git\objects中沒有被使用的hash檔案
song@test MINGW64 /d/Git/Temp (master)
$ git prune -n
0baff3f3df27aacdd2edb6f83a5c47dd3b7ca05b tree

song@test MINGW64 /d/Git/Temp (master)
$ git prune

song@test MINGW64 /d/Git/Temp (master)
$ git prune -n
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • Deletes all stale remote-tracking branches under .
  • 會清理掉狀態2中的遠端庫已被刪除的遠端分支,本地庫仍存在的 stale remote-tracking branches
song@test MINGW64 /d/Git/Temp (master)
$ git branch
* master

song@test MINGW64 /d/Git/Temp (master)
$ git checkout -b dev
Switched to a new branch 'dev'

song@test MINGW64 /d/Git/Temp (dev)
$ git push origin dev
Total 0 (delta 0), reused 0 (delta 0)
To github.com:Song2017/Temp.git
 * [new branch]      dev -> dev

song@test MINGW64 /d/Git/Temp (dev)
$ git branch -a -v
* dev                   3902953  add readme.md
  master                3902953  add readme.md
  remotes/origin/HEAD   -> origin/master
  remotes/origin/dev    3902953  add readme.md
  remotes/origin/master 3902953  add readme.md
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 接下來,在github中刪掉dev分支,此時本地版本庫中的資料快照仍然有dev分支
  • git remote prune 會與遠端庫進行一次同步,最終清理掉版本庫中的dev分支,但本地工作區中的dev分支並不會刪除。。
song@test MINGW64 /d/Git/Temp (master)
$ git remote prune origin
Pruning origin
URL: [email protected]:Song2017/Temp.git
 * [pruned] origin/dev

song@test MINGW64 /d/Git/Temp (master)
$ git branch -a -v
  dev                   3902953  add readme.md
* master                3902953  add readme.md
  remotes/origin/HEAD   -> origin/master
  remotes/origin/master 3902953  add readme.md
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • Before fetching, remove any remote-tracking references that no longer exist on the remote
  • 同git remote prune

刪除本地分支

git branch -d/D dev  -D 強制刪除