Git倉庫大掃除
Git 可以說是目前最受歡迎的版本管理工具了,很多團隊也都在用它來管理自己的專案程式碼。在一個多人協作的專案中,往往採用的是一個分支一個特性進行開發,隨著每天的程式碼提交、合併,倉庫中會有越來越多的冗餘分支。這麼多死分支不僅會掩蓋真正在使用的分支,而且也為管理帶來不便。如果你像我一樣,也經常被淹沒在 git branch
或 git branch-r
返回的分支大海中,那麼,就是時候考慮給你的 git 倉庫做一次大掃除了!
本地分支與遠端分支
大掃除之前,首先給自己做個深呼吸,回憶一下遠端倉庫和遠端分支的概念。
我們本地的倉庫既保留有本地的分支,也保留有跟蹤遠端倉庫的 remote 分支(類似 remotes/origin/**
這種的)。後者相當於是遠端倉庫分支在本地倉庫的代理,每次 git fetch
或 git pull
時,都會將遠端倉庫的分支同步到本地對應的 remote 分支上。
比如遠端倉庫新增了一個 feature/add_a
分支,那麼我們在本地 git fetch
後,會得到一個 remotes/origin/feature/add_a
分支,這個名字表示 origin
這個遠端倉庫下的 feature/add_a
, origin
是本地給遠端倉庫預設起的名字,你當然也可以改成別的名字。
理清楚了本地分支和遠端分支,本地倉庫和遠端倉庫,接下來我們就動起手來做清理吧!
本地分支清理
檢視我們本地的分支只需要執行一下:
-
git branch
我們還可以找出所有已經合入到 master
的本地分支:
-
git checkout master
-
git branch --merged
針對這些已經合入的分支,如果確定已經不會使用的話,就可以將其刪除了:
-
git branch -d feature/XXX
如果十分確定所有合入的分支都不再需要了,那麼可以考慮一次性解決( (^*)
是匹配當前分支,其餘 (master|dev)
部分可以根據自己專案的實際情況進行修改):
-
git branch --merged | grep -v "(^*|master|dev)" | xargs git branch -d
這麼一來,就可以安全地刪除所有已經不再需要的分支了。除此之外,也可以瀏覽一下沒有合入 master 的本地分支,檢檢視看哪些分支已經廢棄,不需要繼續開發了:
-
git branch --no-merged
針對這些分支,只用 git branch-d
命令會收到系統的善意提醒。如果十分確定可以刪除,那麼可以使用強制刪除命令(一定要確認好啊):
-
git branch -D feature/XXX
經過這麼一番清理,相信你的本地分支現在已經十分輕佻了, git branch
返回的結果看起來也十分清爽。接下來就來清理一下本地的遠端分支。
遠端分支清理
遠端分支的檢視只需要在 git branch
命令加一個 -r
( --remotes
) 引數即可:
-
git branch -r
遠端分支的清理,一方面是清理遠端分支中,已經合入 master
的分支,另一方面是清理遠端倉庫已經刪除了的分支,而本地還在跟蹤的。
第二種情況的清理非常簡單,只需要執行:
-
git remote prune origin
事實上,我們可以在每次 git fetch
時,新增一個引數 -p
( --prune
),這樣每次 fetch 遠端倉庫時都可以順手刪掉本地多餘的分支(建議將 git fetch-p
直接 alias 到 git fetch
命令~)。
再來看第一種情況,雖然同樣可以通過 git branch-r--merged
來檢視已經合入 master
的分支,但由於遠端分支不只是自己開發的,所以還需要別人的確認才能進行刪除。
好在我們可以在命令列的幫助下快速篩選出每個人的分支,然後就可以把這份統計摘要發給 TA 來確認。
-
for branch in `git branch -r --merged | grep -v HEAD`; do echo -e `git show --format="%ci %cr %an" $branch | head -n 1`; done | sort -r | grep AUTHOR_NAME
這行命令首先是過濾出所有已合入 master
的遠端分支( git branch-r--merged|grep-v HEAD
),然後遍歷每個分支,展示( git show
)其最後一次提交的絕對時間( %ci
)、相對時間( %cr
)和作者( %an
)資訊,按時間倒序排列( sort-r
),最後過濾出作者是 AUTHOR_NAME
的分支。
如果想檢視更多的資訊,可以在 git show
的 format
加上 %s
(提交資訊)和 %h
(commit SHA1 字首)。
這樣一份報告,給到相關開發同學,確認之後,就可以執行批量清理了。注意,遠端分支的刪除應該到遠端倉庫去刪除(否則下次 fetch 還會再拉下來),因此需要我們把這個刪除動作 push 到遠端倉庫。
最後,如果你 push 了刪除動作到遠端倉庫,不要忘了提醒下其他同學 git fetch-p
來同步刪除自己本地的遠端分支哈!
-
git push origin --delete feature/YYY
找找我是誰
如果自己經常換機器開發、push 程式碼,而且不同機器的 git config
不完全一樣的話(比如我不同機器上 user.name 有的是英文名有的是中文名),提交的作者簽名也不一樣,這時還需要根據不同的 user.name
進行查詢。
不過好在我們有命令列,用以下命令就能得到倉庫裡所有提交過的作者了~
-
git shortlog -s
原文釋出時間為:2018-10-11
本文作者:大魚
本文來自雲棲社群合作伙伴“前端大學 ”,瞭解相關資訊可以關注“前端大學 ”。
相關文章
- Git 倉庫大掃除Git
- git 刪除本地倉庫Git
- Git 倉庫Git
- 教你玩轉Git-刪除遠端倉庫Git
- 如何刪除Git倉庫中冗餘的tag?Git
- Git 本地倉庫和裸倉庫Git
- git倉庫修改遠端倉庫Git
- git倉庫配置git sshGit
- Git 建立倉庫Git
- git本地倉庫關聯遠端倉庫Git
- git 遠端倉庫Git
- GIT倉庫匯入Git
- git換倉庫命令Git
- git 為已有工程建立git倉庫Git
- Harbor倉庫映象掃描原理
- git 修改本地倉庫的遠端倉庫地址Git
- 刪除Git倉庫所有提交歷史記錄,成為一個乾淨的新倉庫Git
- Git本地倉庫基本操作Git
- Git 使用遠端倉庫Git
- git倉庫完整遷移Git
- Git 倉庫拆拆拆Git
- docker搭建私人git倉庫DockerGit
- git-遠端倉庫Git
- git初始化--本地建立git倉庫Git
- git操作之四:git branch(本地倉庫)Git
- Git使用系列03-->Git倉庫建立Git
- Git Step by Step (6):Git遠端倉庫Git
- 本地倉庫推送到遠端倉庫的git操作Git
- 在本地搭建 SVN倉庫 和 git 倉庫 (倉庫僅限在本地使用)Git
- 【Git/Github】刪除遠端倉庫中的檔案/資料夾Github
- 取得 Git 倉庫 —— Git 學習筆記 04Git筆記
- 手把手教你配置git和git倉庫Git
- Git專案匯入其他的git倉庫Git
- Git Step by Step (7):Git遠端倉庫(續)Git
- git push到遠端倉庫Git
- Git 簡介與倉庫使用Git
- repo管理git倉庫——回退版本Git
- 複製git倉庫到ServerGitServer