-
1. 起步
-
2. Git 基礎
-
3. Git 分支
-
4. 伺服器上的 Git
- 4.1 協議
- 4.2 在伺服器上部署 Git
- 4.3 生成 SSH 公鑰
- 4.4 架設伺服器
- 4.5 Git Daemon
- 4.6 Smart HTTP
- 4.7 GitWeb
- 4.8 GitLab
- 4.9 第三方託管服務
- 4.10 小結
-
5. 分散式 Git
-
A1. 附錄 A: Git 在其他環境
- A1.1 圖形介面
- A1.2 Visual Studio 中的 Git
- A1.3 Visual Studio Code 中的 Git
- A1.4 IntelliJ / PyCharm / WebStorm / PhpStorm / RubyMine 中的 Git
- A1.5 Sublime Text 中的 Git
- A1.6 Bash 中的 Git
- A1.7 Zsh 中的 Git
- A1.8 PowerShell 中的 Git
- A1.9 小結
-
A2. 附錄 B: 在應用程式中嵌入 Git
-
A3. 附錄 C: Git 命令
3.3 Git 分支 - 分支管理
分支管理
既然你已經建立、合併和刪除了若干分支,那麼接下來讓我們看看一些分支管理工具,它們在你今後頻繁使用分支時會非常方便。
git branch
命令不僅僅能建立和刪除分支。如果你不帶任何引數執行它,會得到一份當前分支的簡單列表:
$ git branch
iss53
* master
testing
注意 *
字元字首在 master
分支前:它表示你當前檢出的分支(即 HEAD
指向的分支)。這意味著如果你此時提交,master
分支會隨著你的新工作向前移動。要檢視每個分支的最後一次提交,可以執行 git branch -v
:
$ git branch -v
iss53 93b412c Fix javascript issue
* master 7a98805 Merge branch 'iss53'
testing 782fd34 Add scott to the author list in the readme
有用的 --merged
和 --no-merged
選項可以將此列表過濾到你已合併或尚未合併到當前所在分支的那些分支。要檢視哪些分支已合併到你所在的分支,可以執行 git branch --merged
:
$ git branch --merged
iss53
* master
因為你之前已經合併了 iss53
,所以你在列表中會看到它。列表中沒有 *
字首的分支通常可以使用 git branch -d
安全刪除;你已經將其工作併入另一個分支,所以不會丟失任何東西。
要檢視所有包含你尚未合併工作的分支,可以執行 git branch --no-merged
:
$ git branch --no-merged
testing
這會顯示你的另一個分支。因為它包含尚未合併的工作,所以嘗試使用 git branch -d
刪除它會失敗:
$ git branch -d testing
error: The branch 'testing' is not fully merged.
If you are sure you want to delete it, run 'git branch -D testing'.
如果你真的想刪除該分支並丟失那部分工作,你可以使用 -D
強制執行,正如提示資訊所指出的。
提示
|
上面描述的選項 你總是可以提供一個額外的引數來查詢相對於其他分支的合併狀態,而無需先檢出那個其他分支,例如,什麼尚未合併到
|
更改分支名稱
注意
|
不要重新命名仍在被其他協作者使用的分支。在沒有閱讀 更改 master 分支名稱 一節之前,不要重新命名像 master/main/mainline 這樣的分支。 |
假設你有一個名為 bad-branch-name
的分支,並且你想將其更改為 corrected-branch-name
,同時保留所有歷史記錄。你還想更改遠端(GitHub、GitLab、其他伺服器)上的分支名稱。你如何做到這一點?
使用 git branch --move
命令在本地重新命名分支
$ git branch --move bad-branch-name corrected-branch-name
這會將你的 bad-branch-name
替換為 corrected-branch-name
,但目前此更改僅是本地的。要讓其他人看到遠端倉庫上已更正的分支,請推送它:
$ git push --set-upstream origin corrected-branch-name
現在我們簡要看看我們目前的狀況:
$ git branch --all
* corrected-branch-name
main
remotes/origin/bad-branch-name
remotes/origin/corrected-branch-name
remotes/origin/main
請注意,你當前位於 corrected-branch-name
分支上,並且它在遠端倉庫中可用。但是,帶有舊名稱的分支也仍然存在於遠端倉庫中,你可以透過執行以下命令將其刪除:
$ git push origin --delete bad-branch-name
現在,舊的分支名稱已被完全替換為已更正的分支名稱。
更改 master 分支名稱
警告
|
更改諸如 master/main/mainline/default 之類分支的名稱會破壞你的倉庫所使用的整合、服務、輔助工具和構建/釋出指令碼。在你執行此操作之前,請務必與你的協作者協商。此外,請務必徹底搜尋你的倉庫,並更新程式碼和指令碼中對舊分支名稱的任何引用。 |
使用以下命令將你的本地 master
分支重新命名為 main
:
$ git branch --move master main
不再有本地的 master
分支,因為它已重新命名為 main
分支。
要讓其他人看到新的 main
分支,你需要將其推送到遠端倉庫。這使得重新命名的分支在遠端倉庫中可用。
$ git push --set-upstream origin main
現在我們最終得到以下狀態:
$ git branch --all
* main
remotes/origin/HEAD -> origin/master
remotes/origin/main
remotes/origin/master
你的本地 master
分支已消失,因為它已被 main
分支替換。main
分支存在於遠端倉庫中。然而,舊的 master
分支仍然存在於遠端倉庫中。其他協作者將繼續使用 master
分支作為他們工作的基礎,直到你進行進一步的更改。
現在你還有一些任務需要完成才能徹底轉換:
-
任何依賴於此專案的專案都需要更新其程式碼和/或配置。
-
更新任何測試執行器配置檔案。
-
調整構建和釋出指令碼。
-
重定向你的倉庫主機上的設定,例如倉庫的預設分支、合併規則以及其他匹配分支名稱的設定。
-
更新文件中對舊分支的引用。
-
關閉或合併任何針對舊分支的拉取請求。
完成所有這些任務,並確定 main
分支的效能與 master
分支完全相同之後,你可以刪除 master
分支:
$ git push origin --delete master