Git合併簡化:像專業人士一樣合併分支

在Git中合併分支有時可能是一項艱巨的任務,但是git merge命令可以大大簡化這一過程。在本教程中,您將學習如何使用git merge和領先的項目管理工具GitHub來合併分支的基本知識。

讓我們開始進入Git和GitHub的世界,重點是強大的git merge命令。

掌握Git合併的前提條件

在深入研究git merge的細節之前,確保您擁有以下設置:

  • Git(本教程中使用的版本為2.25.1)-從Git的官方網站下載。
  • A GitHub account – Sign up at GitHub.
  • 一台Ubuntu機器(此處使用的是Ubuntu 20.04,但具有Git的任何操作系統都可以)。

初始化Git合併的項目

要有效地使用git merge,首先需要一個Git項目。讓我們為練習設置一個演示項目。

1. 首先創建一個名為~/git-demo的新目錄,並進入其中:

mkdir git-demo && cd git-demo

2. 在~/git-demo目錄中創建一個index.html文件,內容如下。這個基本的HTML文件顯示了關於開始使用git merge的消息。

<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Git Merge Demo</title>
</head>
<body>
    <h4>Let's get started with git merge</h4>
</body>
</html>

3. 在您的項目目錄中初始化一個新的Git存儲庫:

git init 命令用於將現有的未版本化項目轉換為 Git 倉庫,或者用於使用 Git 開始一個新項目。

git init
Initializing a Git repository for git merge

4. 在項目目錄中確認 .git 文件夾的創建。這個文件夾是 Git 跟踪變更的地方:

ls -la
Verifying the existence of the GIT repository in the directory.

5. 使用 git add 命令將項目中的變更加入暫存區。通過將 index.html 文件加入暫存區,您為下一次提交做好了準備。

git add index.html

6. 使用 git status 確認您的文件是否正確加入暫存區。這個命令提供了當前工作目錄狀態的快照。

git status
Confirming the staging of changes for git merge.

7. 接下來,使用 git commit 提交您的變更。這個命令將您的暫存區變更保存到本地倉庫,標誌著版本歷史的重要一步。

git commit -m "initial commit"
Executing the initial commit in preparation for git merge.

如果是第一次使用 Git,請使用以下命令設置您的 Git 身份:git config --global user.email "[email protected]"git config --global user.name "Your Name"

8. 使用 git log 查看您的提交歷史。這個命令有助於跟踪變更,在準備進行 git merge 操作時非常重要。

git log
Checking commit history before performing git merge.

9. 使用 git branch 確認倉庫中存在的分支。在執行 git merge 之前這一步至關重要。

注意:在最新的 Git 版本中,默認分支名稱為 ‘main’,替代了 ‘master’。

git branch
Listing all branches in preparation for git merge.

為 Git 合併操作創建分支

完成初始的Git設置並進行第一次提交後,現在是創建一個新分支的時候了。這個分支將用於有效演示git merge的過程。

1. 更新index.html文件的內容,以演示分支中的更改。這個版本包含了用戶輸入字段,為了進行git merge的演示做準備。

<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Git Merge Demo</title>
</head>
<body>
    <h4>Enhancing Git Merge Skills</h4>
    <form action="">
      <input type="text" name="username" placeholder="Username" />
      <input type="password" name="password" placeholder="Password" />
    </form>
</body>
</html>

2. 使用git status檢查存儲庫的狀態,查看index.html的更改。它應該顯示文件已修改但未提交,準備進入git merge的下一步操作。

Inspecting repository changes for git merge.

3. 使用git checkout -b form創建一個名為“form”的新分支。這個命令不僅創建新分支,還將你的工作分支切換到“form”,這對於實現git merge非常重要。

git checkout -b form
Creating a new branch for git merge.

4. 執行git branch確認新分支的創建。現在你應該看到“form”和“master”兩個分支,其中“form”是活動分支,用星號(*)標示。

git branch
Confirming the active ‘form’ branch for git merge.

5. 將更改提交到form分支。這個操作確保form分支反映了對index.html文件的最新更新,為有效的git merge做好準備。

## 將更新的檔案分階段
git add index.html

## 提交新更改
git commit -m "Added user input fields to form"
Committing updated index.html to the ‘form’ branch for git merge.

本地分支與 Git 合併

現在你的 GitHub 存儲庫中有不同的分支,下一步是將它們合併。本節將重點介紹使用 git merge 命令在本地合併分支,這是 Git 的基本操作。

1. 開始合併,切換到 master 分支,該分支將接收來自 form 分支的更新:

git checkout master

2. 在 master 分支上,執行 git merge formform 分支的更改合併到 master 分支。這是 git merge 過程中的關鍵步驟。

git merge form
Successfully merging branches using git merge.

3. 確認合併,確保你在 master 分支上,並檢查 index.html 的內容是否已更新。

# 確認當前分支
git branch
# 檢查合併的內容
cat index.html
Reviewing index.html content post git merge.

使用 Git Squash 簡化

在 Git 中,Squash 是一種用於整理提交歷史的技巧。當你有多個不必要的提交消息時,Squash 允許你將它們合併為一個全面的提交。這種做法在準備進行 git merge 時尤其有用。

現在讓我們通過對 form 分支上的 index.html 文件進行進一步更改,然後將這些更改合併。

1. 切換回form分支以進行其他更改:

git checkout form

2. 通過添加表單標頭修改index.html。此步驟將創建一個在合併時將被合併的更改:

<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <h4>Mastering Git Merge with Form Updates</h4>
    <form action="">
      <h4>Account Details</h4>
      <input type="text" name="username" placeholder="Username" />
      <input type="password" name="password" placeholder="Password" />
      <button>Submit</button>
    </form>
</body>
</html>

3. 使用清晰的消息對更改進行暫存和提交,描述更新的內容:

git add index.html
git commit -m "Enhanced form with a header for git merge"
Staging and committing changes for squashing in git merge.

4. 通過添加新的輸入字段來增強form分支中的index.html。此修改是為了準備進行有效的git merge

<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Git Merge Example</title>
</head>
<body>
    <h4>Practicing Git Merge</h4>
    <form action="">
      <h4>Enter account details</h4>
      <input type="text" name="fullname" placeholder="Full Name" />
      <input type="text" name="username" placeholder="Username" />
      <input type="password" name="password" placeholder="Password" />
      <button>Submit</button>
    </form>
</body>
</html>

5. 使用明確的消息對這些更改進行暫存和提交,確保工作中的每一步都清楚地記錄下來,以便進行即將進行的git merge

git add index.html
git commit -m "Enhanced form with an additional input field"
Adding another input field to index.html for git merge.

6. 接下來,在index.html的表單下插入一個段落元素,進一步修改文件以準備進行git merge

<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Git Merge Practice</title>
</head>
<body>
    <h4>Let's get started with git merge</h4>
    <form action="">
      <h4>Enter account details</h4>
      <input type="text" name="fullname" placeholder="Full Name" />
      <input type="text" name="username" placeholder="Username" />
      <input type="password" name="password" placeholder="Password" />
      <button>Submit</button>
    </form>
    <p>Already a user?</p>
</body>
</html>

7. 再次暫存和提交更改,使用能夠捕捉此更新精髓的消息,這對於git merge過程至關重要:

git add index.html
git commit -m "Added user status paragraph to form"
Further modifying index.html for git merge.

8. 使用交互模式的git rebase查看並編輯最近的提交。此步驟對於整理提交以進行清潔的git merge非常重要:

git rebase -i HEAD~3

9. 在交互模式中,選擇對第一個提交進行reword操作,並將後續的提交進行squash操作。這將合併您的提交歷史,使您的git merge更加整潔有序:

Preparing commits for squashing in git merge.

10. 在重新命名並保存後,更新合併後的提交消息以反映累積的更改。此步驟完成了合併提交的壓縮過程,為您打造了一個流暢的git merge

Finalizing the commit message for git merge.

確認壓縮操作的成功,這是處理多個提交訊息時git merge過程的一個重要部分。

Successful git squash operation.

要同時進行壓縮和合併,使用git merge --squash。這種技術將form分支壓縮合併到master分支,有效地結合提交。

git merge --squash form

執行git merge --squash命令將form分支的更改合併到master,同時將所有提交壓縮成一個。這種方法是有效的git merge策略的一部分。

Executing git merge with squash option.

實施Git合併的快速轉寄

對於簡化的提交歷史,快速轉寄是一種理想的方法,特別適用於小型更新或錯誤修復。它允許您在不添加其他合併提交的情況下合併分支,保持一個乾淨、線性的歷史,這對於高效的git merge過程至關重要。

當基本分支(通常是master)沒有分歧時,就會發生快速轉寄,這樣可以無縫地集成歷史和指標更新。

1. 切換到form分支以開始快速轉寄過程:

git checkout form

2. 創建並更新一個JavaScript文件,例如index.js,在form分支中暫存並提交更改:

git add index.js
git commit -m "Added JavaScript functionality"

3. 最後,使用快速轉寄方法將form分支合併到master。這一步將主分支與form分支的最新更改對齊,創建一條平滑、線性的git merge路徑。

git checkout master
git merge form
Performing a fast-forward merge in Git.

結論

此教程已指导您通过使用git merge结合分支的各种技术。从合并提交到快进合并,这些方法增强了您在Git中协同管理项目的能力。

现在具备这些技能,考虑在GitHub上为协作项目做出贡献,将您对git merge的知识应用于实际场景。

Source:
https://adamtheautomator.com/git-merge/