使用 Git 分支:輕鬆管理不同版本和應對緊急情況的最佳實踐
使用 Git 分支
在 Git 中,分支是主倉庫的新/獨立版本。
假設你有一個大型專案,需要對其進行設計更新。
沒有使用 Git 時:
- 複製所有相關檔案以避免影響實時版本
- 開始進行設計工作,並發現程式碼依賴於其他檔案中的程式碼,這些檔案也需要更改!
- 複製相關檔案,確保每個檔案依賴項引用正確的檔名
- 緊急情況!專案的其他地方存在無關的錯誤,需要儘快修復!
- 儲存所有檔案,記錄你正在工作的副本的名稱
- 處理無關的錯誤並更新程式碼以修復它
- 返回到設計工作,完成工作
- 複製程式碼或重新命名檔案,以使更新後的設計出現在實時版本中
(兩週後,你意識到未修復無關的錯誤,因為在修復之前你複製了檔案)
使用 Git 時:
- 使用名為 "new-design" 的新分支,直接編輯程式碼,而不影響主分支
- 緊急情況!專案的其他地方存在無關的錯誤,需要儘快修復!
- 從主專案建立名為 "small-error-fix" 的新分支
- 修復無關的錯誤並將 "small-error-fix" 分支與主分支合併
- 返回到 "new-design" 分支,完成工作
- 合併 "new-design" 分支與主分支(提醒你正在缺少的小錯誤修復)
分支允許你在專案的不同部分上工作,而不影響主分支。
當工作完成後,可以將分支與主專案合併。
你甚至可以在不同分支之間切換,同時在不同專案上工作,而彼此不會互相干擾。
在 Git 中,分支非常輕量且快速!
建立新 Git 分支
讓我們向我們的 index.html 頁面新增一些新功能。
我們在本地倉庫中工作,不希望干擾或可能破壞主專案。
所以我們建立一個新分支:
git branch hello-world-images
現在我們建立了一個名為 "hello-world-images" 的新分支。
讓我們確認我們已經建立了一個新分支:
git branch
hello-world-images
* master
我們可以看到新分支的名稱為 "hello-world-images",但在 master 旁邊的 * 指定我們當前在該分支上。
checkout
是用於檢出分支的命令,將我們從當前分支移動到命令末尾指定的分支:
git checkout hello-world-images
現在我們已將當前工作區從 master 分支移動到新分支。
開啟你最喜歡的編輯器並進行一些更改。
在此示例中,我們在工作目錄中新增了一個影像(img_hello_world.jpg)和 index.html 檔案的一行程式碼:
<!DOCTYPE html>
<html>
<head>
<title>Hello World!</title>
<link rel="stylesheet" href="bluestyle.css">
</head>
<body>
<h1>Hello world!</h1>
<div><img src="img_hello_world.jpg" alt="Hello World from Space"
style="width:100%;max-width:960px"></div>
<p>This is the first file in my new Git Repo.</p>
<p>A new line in our file!</p>
</body>
</html>
我們對一個檔案進行了更改,並在工作目錄中新增了一個新檔案(與主分支相同的目錄)。
現在檢查當前分支的狀態:
git status
在 hello-world-images 分支上,有檔案更改,但該檔案未準備好提交,img_hello_world.jpg 不在跟蹤檔案中。
因此,我們需要將這兩個檔案都新增到該分支的暫存區中:
git add --all
使用 --all
而不是單獨的檔名將所有已更改的檔案(新的、修改的和已刪除的)放入暫存區。
檢查分支的狀態:
git status
在 hello-world-images 分支上,有檔案更改,但未準備好提交。所以我們將這些更改提交到該分支:
git commit -m "Added image to Hello World"
現在我們有一個不同於 master 分支的新分支。
注意:在 checkout 命令上使用 -b 選項會建立一個新分支,並移動到該分支,如果該分支不存在的話。
切換分支
現在讓我們看看工作在不同分支上有多麼快速和容易,以及它是如何有效地工作的。
我們當前位於 hello-world-images 分支。我們向此分支新增了一個影像,所以讓我們列出當前目錄中的檔案:
ls
我們可以看到新檔案 img_hello_world.jpg,如果開啟 html 檔案,可以看到程式碼已經發生了變化。一切都按計劃進行。
現在,讓我們看看當我們切換到 master 分支時會發生什麼
git checkout master
不再存在 img_hello_world.jpg!如果開啟 html 檔案,可以看到程式碼已經恢復到修改之前的狀態。
看看工作在不同分支上有多麼容易?以及它是如何允許你在不同的任務上工作的?
###
緊急分支
現在假設我們還沒有完成 hello-world-images,但我們需要在 master 上修復一個錯誤。
我不想直接干預 master,也不想干擾 hello-world-images,因為它還沒有完成。
所以我們建立一個新分支來處理緊急情況:
git checkout -b emergency-fix
現在我們已經從 master 建立了一個新分支,並切換到它。我們可以安全地修復錯誤,而不會干擾其他分支。
讓我們修復我們想象中的錯誤:
<!DOCTYPE html>
<html>
<head>
<title>Hello World!</title>
<link rel="stylesheet href="bluestyle.css">
</head>
<body>
<h1>Hello world!</h1>
<p>This is the first file in my new Git Repo.</p>
<p>This line is here to show how merging works.</p>
</body>
</html>
我們在該檔案中進行了更改,現在需要將這些更改傳輸到 master 分支。
檢查分支的狀態:
git status
在 emergency-fix 分支上,有檔案更改,但未準備好提交,所以我們需要將該檔案暫存,然後提交:
git add index.html
git commit -m "updated index.html with emergency fix"
現在,我們已經為 master 分支準備好一個修復。需要合併這兩個分支。
最後
為了方便其他裝置和平臺的小夥伴觀看往期文章:
微信公眾號搜尋:Let us Coding
,關注後即可獲取最新文章推送
看完如果覺得有幫助,歡迎 點贊、收藏、關注