如何检查一个 Git 分支是否与另一个分支同步

GitGitBeginner
立即练习

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

简介

在这个实验中,你将学习如何检查一个 Git 分支是否与另一个分支同步。这是管理项目历史记录并确保分支保持最新状态的一项基本技能。

你将探索三种不同的方法来实现这一目标:使用 git log 比较提交历史记录,使用 git diff 识别分支之间的差异,最后,使用 git merge-base 验证分支之间的关系。在本实验结束时,你将掌握实用的技术,能够自信地确定 Git 分支的同步状态。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL git(("Git")) -.-> git/BasicOperationsGroup(["Basic Operations"]) git(("Git")) -.-> git/BranchManagementGroup(["Branch Management"]) git/BasicOperationsGroup -.-> git/add("Stage Files") git/BasicOperationsGroup -.-> git/commit("Create Commit") git/BasicOperationsGroup -.-> git/diff("Compare Changes") git/BranchManagementGroup -.-> git/branch("Handle Branches") git/BranchManagementGroup -.-> git/checkout("Switch Branches") git/BranchManagementGroup -.-> git/merge("Merge Histories") git/BranchManagementGroup -.-> git/log("Show Commits") subgraph Lab Skills git/add -.-> lab-560051{{"如何检查一个 Git 分支是否与另一个分支同步"}} git/commit -.-> lab-560051{{"如何检查一个 Git 分支是否与另一个分支同步"}} git/diff -.-> lab-560051{{"如何检查一个 Git 分支是否与另一个分支同步"}} git/branch -.-> lab-560051{{"如何检查一个 Git 分支是否与另一个分支同步"}} git/checkout -.-> lab-560051{{"如何检查一个 Git 分支是否与另一个分支同步"}} git/merge -.-> lab-560051{{"如何检查一个 Git 分支是否与另一个分支同步"}} git/log -.-> lab-560051{{"如何检查一个 Git 分支是否与另一个分支同步"}} end

使用 git log 比较提交记录

在这一步中,你将学习如何使用 git log 命令来比较项目历史中的不同提交记录。这就像是查看时间机器中的不同快照,了解它们之间的变化。

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

cd ~/project/my-time-machine

现在,创建一个新文件并进行一次提交。这将为我们提供历史记录中的另一个时间点,以便与第一次提交进行比较。

echo "This is the second message." > second_message.txt
git add second_message.txt
git commit -m "Add a second message file"

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

[master a1b2c3d] Add a second message file
 1 file changed, 1 insertion(+)
 create mode 100644 second_message.txt

现在,项目历史中有了两次提交。再次查看提交日志:

git log

你会看到两条提交记录,最新的记录位于顶部。每次提交都有一个唯一的标识符(一长串字符)。

要比较两个特定的提交记录,可以使用 git log 结合范围语法 commit1..commit2。这将显示从 commit2 可到达但从 commit1 无法到达的提交记录。

找出这两次提交的提交 ID。你可以从 git log --oneline 的输出中获取简短的 ID。例如,如果第一次提交的 ID 是 a1b2c3d,第二次是 e4f5g6h,就使用这些 ID。

git log --oneline

示例输出:

e4f5g6h (HEAD -> master) Add a second message file
a1b2c3d Send a message to the future

现在,比较项目在第一次提交(a1b2c3d)和第二次提交(e4f5g6h)之间的状态。将示例 ID 替换为你实际的提交 ID:

git log a1b2c3d..e4f5g6h

这个命令将显示在 ID 为 a1b2c3d 的提交之后、直到并包括 ID 为 e4f5g6h 的提交之间所做的提交。在这种情况下,它应该会显示第二次提交。

理解如何使用 git log 比较提交记录对于浏览项目历史至关重要。它能让你看到更改的顺序,了解代码库的演变过程。

运行 git diff branch1 branch2

在上一步中,我们使用 git log 查看了项目历史不同阶段存在哪些提交记录。现在,我们将使用 git diff 命令来查看两个不同时间点或不同分支之间的实际「更改」。这就像是比较时间机器的两个版本,确切地了解哪些部分被添加、删除或修改了。

首先,确保你处于项目目录中:

cd ~/project/my-time-machine

目前,你只有一个分支 master。为了演示如何比较分支,我们创建一个名为 feature-branch 的新分支。可以将分支看作是一个平行时间线,你可以在其中开发新功能或进行实验,而不会影响主时间线(master)。

git branch feature-branch

现在,切换到新分支:

git checkout feature-branch

你应该会看到表明已切换分支的输出:

Switched to branch 'feature-branch'

在这个新分支上,对 message.txt 文件进行更改:

echo "Adding a line on the feature branch." >> message.txt

此命令会在 message.txt 文件中追加一行内容。

现在,在 feature-branch 上提交这个更改:

git add message.txt
git commit -m "Add a line to message.txt on feature branch"

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

[feature-branch a1b2c3d] Add a line to message.txt on feature branch
 1 file changed, 1 insertion(+)

现在,有了两个具有不同提交历史的分支(masterfeature-branch)。master 分支有前两次提交,而 feature-branch 除了这两次提交外,还有刚刚进行的新提交。

使用 git diff 查看 master 分支和 feature-branch 之间的差异:

git diff master feature-branch

输出将显示两个分支之间不同的确切行:

diff --git a/message.txt b/message.txt
index a1b2c3d..e4f5g6h 100644
--- a/message.txt
+++ b/message.txt
@@ -1 +1,2 @@
 Hello, Future Me
+Adding a line on the feature branch.

这个输出表明 message.txt 文件存在差异。以 + 开头的行表示与 master 分支相比,在 feature-branch 上添加的行。

使用 git diff 对于确切了解项目不同版本或不同分支之间所做的更改非常有用。它有助于你在合并更改之前审查这些更改,并找出具体修改的位置。

q 退出差异视图并返回命令行。

使用 git merge-base 进行验证

在这一步中,你将探索 git merge-base 命令。该命令可用于查找两个提交之间的最佳共同祖先。可以将其想象成找出两条不同时间线(分支)分叉的时间点。

首先,确保你处于项目目录中:

cd ~/project/my-time-machine

你有两个分支:masterfeature-branchfeature-branch 是从 master 分支创建而来的,之后在 feature-branch 上添加了一个新的提交。这两个分支的共同祖先是在创建 feature-branch 之前 master 分支上的那个提交。

使用 git merge-base 来查找 masterfeature-branch 的共同祖先:

git merge-base master feature-branch

该命令的输出将是共同祖先的提交 ID。这应该是在创建 feature-branch 之前,在 master 分支上进行的第二次提交的 ID。

示例输出:

a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9

(实际的提交 ID 在你的项目中会有所不同)

为了验证这确实是共同祖先,你可以使用 git log --oneline 查看两个分支的历史记录,并直观地确认该提交 ID。

git log --oneline --graph --all

这个命令将以图形化的方式展示所有分支的提交历史。你可以从 masterfeature-branch 的末端回溯,找到它们的历史记录汇合的地方。git merge-base 所确定的提交 ID 应该就是这个汇合点。

理解共同祖先在 Git 中非常重要,尤其是在准备合并分支时。Git 会利用共同祖先来确定需要合并的更改。

总结

在本次实验中,你学习了如何使用各种 Git 命令来检查一个 Git 分支是否与另一个分支同步。首先,你使用 git log 来比较分支之间的提交记录,了解如何查看提交历史,并使用范围语法来识别差异。这让你能够查看哪些提交存在于一个分支中,而不在另一个分支中。

接下来,你探索了 git diff 命令,以检查分支之间的实际内容差异,逐行查看更改。最后,你使用 git merge-base 来查找两个分支的共同祖先提交,这有助于确定一个分支是否完全包含在另一个分支中。这些步骤为验证 Git 中分支的同步性提供了一个全面的方法。