如何检查 Git 分支是否已完全合并到主分支

GitGitBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在这个实验中,你将学习如何有效地检查一个 Git 分支是否已完全合并到另一个分支,特别关注 main 分支。这是维护一个整洁有序的 Git 仓库的关键技能。

你将首先使用 git branch --merged main 命令来识别已完全合并到 main 分支的分支。接着,你将使用 git log main ^branch 命令验证结果,以确认目标分支的所有提交都已存在于 main 分支中。最后,你将使用一个部分合并的分支来测试这些方法,以了解不同的结果。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL git(("Git")) -.-> git/BranchManagementGroup(["Branch Management"]) git/BranchManagementGroup -.-> git/branch("Handle Branches") git/BranchManagementGroup -.-> git/checkout("Switch Branches") git/BranchManagementGroup -.-> git/merge("Merge Histories") git/BranchManagementGroup -.-> git/log("Show Commits") git/BranchManagementGroup -.-> git/cherry_pick("Cherry Pick") subgraph Lab Skills git/branch -.-> lab-560045{{"如何检查 Git 分支是否已完全合并到主分支"}} git/checkout -.-> lab-560045{{"如何检查 Git 分支是否已完全合并到主分支"}} git/merge -.-> lab-560045{{"如何检查 Git 分支是否已完全合并到主分支"}} git/log -.-> lab-560045{{"如何检查 Git 分支是否已完全合并到主分支"}} git/cherry_pick -.-> lab-560045{{"如何检查 Git 分支是否已完全合并到主分支"}} end

使用 git branch --merged main

在这一步中,你将学习如何使用 git branch --merged 命令来查看哪些分支已完全合并到另一个分支。这是一个非常有用的命令,有助于保持仓库的整洁和有序。

首先,确保你位于项目目录中。打开终端并导航到 my-time-machine 目录:

cd ~/project/my-time-machine

现在,创建一个名为 feature-branch 的新分支并切换到该分支。你将模拟在这个分支上进行一些更改。

git branch feature-branch
git checkout feature-branch
echo "Adding a new feature" >> feature.txt
git add feature.txt
git commit -m "Add new feature"

提交后,你应该会看到类似以下的输出:

[feature-branch a1b2c3d] Add new feature
 1 file changed, 1 insertion(+)
 create mode 100644 feature.txt

现在,切换回 master 分支并将 feature-branch 合并到其中。

git checkout master
git merge feature-branch

你应该会看到表明合并成功的输出:

Updating e1f2g3h..a1b2c3d
Fast-forward
 feature.txt | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 feature.txt

现在已经将 feature-branch 合并到 master 分支,让我们使用 git branch --merged 来查看哪些分支现在已完全合并到 master 分支。

git branch --merged master

这个命令将列出所有其提交已全部并入 master 分支的分支。你应该会看到 masterfeature-branch 都被列出,这表明 feature-branch 现在已完全合并到 master 分支。

了解哪些分支已合并非常重要,因为这有助于你识别可以安全删除的分支,从而保持仓库的整洁。这就像知道游戏中哪些支线任务你已经完成,现在可以忽略一样。

使用 git log main ^branch 进行验证

在上一步中,你使用了 git branch --merged 来查看哪些分支已合并到 master 分支。现在,你将使用另一个命令 git log 从另一个角度来验证这一点。使用 main ^branch 语法的 git log 命令是一种强大的方法,用于查看存在于 main 分支但不在 branch 分支中的提交。

首先,确保你位于 my-time-machine 目录中:

cd ~/project/my-time-machine

现在,使用 git log 来查看存在于 master 分支但不在 feature-branch 分支中的提交。

git log master ^feature-branch

由于在上一步中你已将 feature-branch 完全合并到 master 分支,因此 feature-branch 分支的所有提交现在也都存在于 master 分支中。因此,这个命令应该会显示在合并之前原本仅存在于 master 分支上的提交。它不应该显示你在 feature-branch 分支上所做的“Add new feature”提交。

你应该会看到类似以下的输出,仅显示 master 分支的初始提交:

commit e1f2g3h4i5j6k7l8m9n0o1p2q3r4s5t6u7v8w9x (HEAD -> master)
Author: Jane Doe <[email protected]>
Date:   Mon Aug 7 10:00:00 2023 +0000

    Send a message to the future

如果 feature-branch 没有完全合并,这个命令将显示存在于 master 分支但不在 feature-branch 分支中的提交,以及存在于 feature-branch 分支但不在 master 分支中的任何提交。这里没有显示“Add new feature”提交这一事实,证实了该提交现在已存在于 master 分支中。

git log main ^branch 这种语法是一种直观确认一个分支的所有提交是否存在于另一个分支的好方法。它有助于你理解仓库中不同分支之间的关系。

使用部分合并的分支进行测试

在前面的步骤中,你已经了解了 git branch --mergedgit log main ^branch 在处理完全合并的分支时的工作方式。现在,让我们看看当处理部分合并的分支时会发生什么,即该分支的部分(而非全部)提交已合并到另一个分支。

首先,确保你位于 my-time-machine 目录中:

cd ~/project/my-time-machine

创建一个名为 partial-feature 的新分支并切换到该分支:

git branch partial-feature
git checkout partial-feature

现在,在这个新分支上进行两次提交:

echo "Adding part 1 of the feature" >> partial.txt
git add partial.txt
git commit -m "Add part 1"
echo "Adding part 2 of the feature" >> partial.txt
git add partial.txt
git commit -m "Add part 2"

提交后,你应该会看到类似以下的输出:

[partial-feature a1b2c3d] Add part 1
 1 file changed, 1 insertion(+)
 create mode 100644 partial.txt
[partial-feature e1f2g3h] Add part 2
 1 file changed, 1 insertion(+)

现在,切换回 master 分支,并仅合并 partial-feature 分支的第一个提交。你可以使用 git cherry-pick 来完成此操作。首先,你需要“Add part 1”提交的哈希值。你可以通过运行 git log partial-feature 并复制第一个提交的哈希值来找到它。

git checkout master
## Replace <commit_hash> with the actual hash of the "Add part 1" commit
git cherry-pick <commit_hash>

你应该会看到表明 cherry-pick 操作成功的输出:

[master i1j2k3l] Add part 1
 Date: Mon Aug 7 10:05:00 2023 +0000
 1 file changed, 1 insertion(+)
 create mode 100644 partial.txt

现在,再次使用 git branch --merged master 命令:

git branch --merged master

你应该会看到列出了 masterfeature-branch,但没有 partial-feature。这是因为 partial-feature 分支仍然有“Add part 2”提交,该提交尚未合并到 master 分支。git branch --merged 仅列出所有提交都存在于目标分支中的分支。

最后,使用 git log master ^partial-feature 命令:

git log master ^partial-feature

这个命令将显示存在于 master 分支但不在 partial-feature 分支中的提交。它应该会显示 master 分支的初始提交、“Add new feature”提交(现在已在 master 分支中)以及“Add part 1”提交(你通过 cherry-pick 操作合并的)。它不应该显示“Add part 2”提交,因为该提交仅存在于 partial-feature 分支中。

这展示了 git branch --mergedgit log main ^branch 如何帮助你了解分支的合并状态,即使只有部分提交被合并。

总结

在本次实验中,你学习了如何检查一个 Git 分支是否已完全合并到另一个分支,特别是 main(或 master)分支。首先,你使用了 git branch --merged main 命令,该命令会列出所有提交都已完全合并到 main 分支的分支。这是一种快速识别可清理分支的方法。

接着,你探索了一种更细致的验证方法,即使用 git log main ^branch 命令。这个命令会显示存在于 main 分支但不在指定分支中的提交。如果该命令没有输出,则证实指定分支的所有提交都已存在于 main 分支中,从而验证了完全合并。最后,你使用一个部分合并的分支对这些方法进行了测试,以了解输出的差异,并进一步巩固了你对如何准确确定分支合并状态的理解。