如何检查 Git 提交是否存在于特定分支中

GitGitBeginner
立即练习

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

简介

在这个实验中,你将学习如何确定特定的 Git 提交是否存在于某个特定分支中。我们将探索 git branch --contains 命令,以识别包含给定提交的所有分支,从而深入了解该提交的历史和集成点。

你还将学习如何结合分支名称使用 git log 来验证某个提交是否存在于该分支的历史记录中,以及如何高效地在多个分支中检查某个提交。这个实验将为你提供理解和浏览 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/BranchManagementGroup -.-> git/branch("Handle Branches") git/BranchManagementGroup -.-> git/log("Show Commits") subgraph Lab Skills git/add -.-> lab-560059{{"如何检查 Git 提交是否存在于特定分支中"}} git/commit -.-> lab-560059{{"如何检查 Git 提交是否存在于特定分支中"}} git/branch -.-> lab-560059{{"如何检查 Git 提交是否存在于特定分支中"}} git/log -.-> lab-560059{{"如何检查 Git 提交是否存在于特定分支中"}} end

运行 git branch --contains 命令查找包含特定提交的分支

在这一步中,你将学习如何使用 git branch --contains 命令来找出哪些分支包含特定的提交。当你想要了解项目的历史,以及查看某个特定更改被集成到哪些地方时,这个命令非常有用。

首先,确保你位于 my-time-machine 目录中。打开终端并输入以下命令:

cd ~/project/my-time-machine

现在,创建一个新文件并进行一次提交。这样我们就有一个新的提交可供操作。

echo "Another message for the future" > message2.txt
git add message2.txt
git commit -m "Add another message"

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

[master <commit-id>] Add another message
 1 file changed, 1 insertion(+)
 create mode 100644 message2.txt

现在我们有了一个新的提交。接下来,找出这个新提交的提交 ID。可以使用 git log --oneline 命令查看精简的提交日志:

git log --oneline

输出结果大致如下:

<commit-id-2> (HEAD -> master) Add another message
<commit-id-1> Send a message to the future

列表中的第一个提交 ID 就是 "Add another message" 这次提交的 ID。复制这个提交 ID。

现在,使用 git branch --contains 命令并传入这个提交 ID。将 <commit-id-2> 替换为你复制的实际提交 ID:

git branch --contains <commit-id-2>

输出结果应该会显示 master 分支,这表明这个提交位于 master 分支上:

* master

git branch --contains <commit> 命令非常强大,因为它可以帮助你追踪提交的谱系。如果你有多个分支,这个命令会列出包含该特定提交的所有分支。这对于理解更改如何在项目的不同开发线路中流动至关重要。

使用 git log 结合分支名进行验证

在上一步中,我们使用 git branch --contains 命令查看了哪些分支包含特定的提交。现在,我们将结合分支名使用 git log 命令来验证该分支的历史记录。这将展示该分支历史中的所有提交。

确保你仍然位于 ~/project/my-time-machine 目录中:

cd ~/project/my-time-machine

从上一步我们知道,最新的提交位于 master 分支上。让我们专门查看 master 分支的日志:

git log master --oneline

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

<commit-id-2> (HEAD -> master) Add another message
<commit-id-1> Send a message to the future

这个输出确认了我们的两个提交确实都在 master 分支上。使用 git log <branch-name> 是检查特定分支历史记录、查看从该分支顶端可访问的所有提交的好方法。

比较 git branch --contains <commit>git log <branch-name> 的输出,有助于你理解提交和分支之间的关系。git branch --contains 会告诉你哪些分支的历史记录中 包含 某个提交,而 git log <branch-name> 则会显示通向该特定分支顶端的线性历史记录。

q 键退出日志查看模式。

检查多个分支

在这一步中,你将创建一个新分支,并了解当一个提交存在于多个分支上时,git branch --contains 命令的表现。这将进一步展示该命令在理解项目分支结构方面的强大功能。

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

cd ~/project/my-time-machine

现在,创建一个名为 feature-branch 的新分支:

git branch feature-branch

此命令会创建一个新分支,但不会切换到该分支。你仍然位于 master 分支上。

让我们查看一下现有的分支:

git branch

你应该会看到列出了两个分支,其中 master 分支会被高亮显示(表示它是当前分支):

* master
  feature-branch

现在,再次使用 git log --oneline 命令获取最新提交的提交 ID:

git log --oneline

输出结果与之前类似:

<commit-id-2> (HEAD -> master, feature-branch) Add another message
<commit-id-1> Send a message to the future

注意,最新提交现在同时显示了 HEAD -> masterfeature-branch。这意味着 feature-branch 是基于这个提交创建的。

现在,再次使用 git branch --contains 命令并传入这个提交 ID。将 <commit-id-2> 替换为实际的提交 ID:

git branch --contains <commit-id-2>

这次,输出应该会显示两个分支,因为该提交同时存在于 masterfeature-branch 的历史记录中:

* master
  feature-branch

这展示了 git branch --contains 命令如何显示所有在其历史记录中包含特定提交的分支。这对于跟踪更改在不同开发线路中的合并或集成位置非常有用。

总结

在本次实验中,你学习了如何检查某个 Git 提交是否存在于特定分支中。首先,你使用了 git branch --contains <commit-id> 命令,该命令会列出包含指定提交的所有分支。这是理解 Git 仓库中更改历史和集成情况的基础工具。

接着,你探索了如何使用 git log <branch-name> 命令来验证某个提交是否存在于分支中。此命令会显示特定分支的提交历史,让你能够直观地确认目标提交是否属于该分支的谱系。最后,你了解了如何扩展这些技巧,以检查某个提交在多个分支中的存在情况,从而全面了解该提交在项目分支结构中的分布情况。