如何检查 Git 提交是否已推送

GitGitBeginner
立即练习

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

简介

在这个实验中,你将学习如何检查一个 Git 提交是否已被推送到远程仓库。我们将探索不同的方法来实现这一点,首先从远程获取更改,并使用 git log @{u} 来比较本地和远程分支。

然后,你将学习如何使用 git branch -r --contains 来识别包含特定提交的远程分支,最后通过直接检查远程分支来验证推送状态。这种实践方法将为你提供实用技能,让你有信心确定 Git 提交的推送状态。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL git(("Git")) -.-> git/BasicOperationsGroup(["Basic Operations"]) git(("Git")) -.-> git/BranchManagementGroup(["Branch Management"]) git(("Git")) -.-> git/CollaborationandSharingGroup(["Collaboration and Sharing"]) git/BasicOperationsGroup -.-> git/add("Stage Files") git/BasicOperationsGroup -.-> git/commit("Create Commit") git/BranchManagementGroup -.-> git/branch("Handle Branches") git/BranchManagementGroup -.-> git/log("Show Commits") git/CollaborationandSharingGroup -.-> git/fetch("Download Updates") git/CollaborationandSharingGroup -.-> git/push("Update Remote") git/CollaborationandSharingGroup -.-> git/remote("Manage Remotes") subgraph Lab Skills git/add -.-> lab-560055{{"如何检查 Git 提交是否已推送"}} git/commit -.-> lab-560055{{"如何检查 Git 提交是否已推送"}} git/branch -.-> lab-560055{{"如何检查 Git 提交是否已推送"}} git/log -.-> lab-560055{{"如何检查 Git 提交是否已推送"}} git/fetch -.-> lab-560055{{"如何检查 Git 提交是否已推送"}} git/push -.-> lab-560055{{"如何检查 Git 提交是否已推送"}} git/remote -.-> lab-560055{{"如何检查 Git 提交是否已推送"}} end

获取远程仓库并检查 git log @{u}

在这一步中,你将学习如何从远程仓库获取更改,并使用 git log @{u} 查看本地分支与远程分支的差异。

首先,让我们模拟一个远程仓库。在实际场景中,远程仓库通常位于 GitHub 或 GitLab 等平台上,但在这个实验中,我们将使用一个本地目录作为“远程仓库”。

导航到你的项目目录:

cd ~/project/my-time-machine

现在,让我们添加一个名为 origin 的远程仓库,指向模拟的远程仓库。我们假设在 setup 部分已经设置好了远程仓库。

git remote add origin ../my-time-machine-remote

这个命令告诉本地 Git 仓库,在 ../my-time-machine-remote 位置有另一个仓库,我们将其命名为 origin

现在,让我们从这个远程仓库获取最新更改。git fetch 命令会将提交、文件和引用从远程仓库下载到本地仓库,但不会自动合并或修改当前的工作。

git fetch origin

你应该会看到输出,表明 Git 正在从远程仓库获取内容。

获取完成后,我们可以使用 git log @{u}(在这种情况下也可以使用 git log origin/master,因为 origin/mastermaster 分支的上游分支)来查看远程分支上尚未同步到本地分支的提交。@{u}@{upstream} 语法指的是当前分支的上游分支。

git log @{u}

由于本地的 master 分支是从头创建的,远程的 master 分支(模拟的)也是空的,并且我们还没有向远程仓库添加任何提交,所以这个命令可能不会显示任何输出,或者如果远程仓库在初始化时有初始提交,它可能会显示该初始提交。重要的是要理解这个命令的作用:它会显示上游分支(origin/master)上有但当前本地分支(master)上没有的提交。

理解本地分支和远程分支之间的差异对于协作和保持项目的最新状态至关重要。git fetchgit log @{u} 是在不更改本地工作目录的情况下检查远程仓库状态的强大工具。

使用 git branch -r --contains

在这一步中,你将探索如何使用 git branch -r --contains 命令来查找哪些远程分支包含特定的提交。当你想知道某个特定更改是否已包含在远程分支中时,这个命令非常有用。

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

cd ~/project/my-time-machine

现在,让我们在本地仓库中创建一个新的提交。这样我们就有一个提交可以在远程仓库中搜索。

echo "Adding another message" >> message.txt
git add message.txt
git commit -m "Add another message"

你应该会看到确认新提交的输出。

现在,让我们使用 git log --oneline 查看提交历史,并获取最新提交的哈希值。

git log --oneline

复制包含消息“Add another message”的提交的哈希值(一串简短的字符)。它看起来可能像 abcdefg

现在,使用你刚刚复制的提交哈希值运行 git branch -r --contains 命令。将 YOUR_COMMIT_HASH 替换为实际的哈希值。

git branch -r --contains YOUR_COMMIT_HASH

由于我们还没有将这个新提交推送到远程仓库(origin),这个命令的输出中应该不会显示 origin/master。这是因为远程分支 origin/master 还不包含你刚刚在本地创建的提交。

git branch -r 部分用于列出远程跟踪分支。--contains YOUR_COMMIT_HASH 部分则过滤这个列表,只显示包含指定提交的分支。

这个命令是检查你的提交相对于远程分支状态的强大工具。它能帮助你了解你的更改是否已集成到远程仓库中。

与远程分支进行验证

在这最后一步中,你将把本地提交推送到远程仓库,然后再次使用 git branch -r --contains 命令来验证远程分支现在是否包含你的提交。

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

cd ~/project/my-time-machine

现在,让我们将本地的 master 分支推送到 origin 远程仓库。

git push origin master

你应该会看到输出,表明你的提交正在被推送到远程仓库。

推送完成后,让我们获取要验证的提交的哈希值。再次使用 git log --oneline 命令:

git log --oneline

复制包含消息“Add another message”的提交的哈希值。

现在,使用你刚刚复制的提交哈希值运行 git branch -r --contains 命令。将 YOUR_COMMIT_HASH 替换为实际的哈希值。

git branch -r --contains YOUR_COMMIT_HASH

这次,你应该会在输出中看到 origin/master。这证实了你的提交已成功推送到远程仓库,并且远程分支 origin/master 现在包含了这个提交。

推送更改然后在远程分支上验证这些更改的过程是 Git 中常见的工作流程,尤其是在与他人协作时。这能确保你的贡献对团队其他成员可用。

你现在已经成功地从远程仓库获取了内容,使用 git branch -r --contains 命令检查了提交,推送了更改,并在远程分支上验证了提交。这些都是使用 Git 远程仓库的必备技能。

总结

在这个实验中,你学习了如何检查本地 Git 提交是否已推送到远程仓库。首先,你模拟了一个远程仓库,并将其作为 origin 远程仓库添加到本地项目中。然后,你使用 git fetch origin 命令从远程仓库获取最新信息,同时不修改本地的工作状态。

获取信息后,你探索了 git log @{u} 命令,这是一种比较本地分支与其配置的上游分支(在本例中为 origin/master)的强大方法。该命令有助于直观显示存在于远程仓库但本地没有的提交,让你了解分支的同步状态。如果还没有推送任何提交,初始输出可能为空,但理解这个命令对于识别尚未共享到远程仓库的提交至关重要。