Git 分支管理:最佳化版本控制與應急處理的關鍵策略

小万哥丶發表於2024-03-01

使用 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,關注後即可獲取最新文章推送

看完如果覺得有幫助,歡迎 點贊、收藏、關注

相關文章