-
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
這將用 corrected-branch-name 替換你的 bad-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