如何检查 Git 仓库是否与远程仓库同步

GitGitBeginner
立即练习

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

简介

在这个实验中,你将学习如何检查本地 Git 仓库是否与远程仓库保持同步。我们将介绍实现这一目标的关键步骤,首先是在不改变本地工作的前提下,从远程仓库获取最新的更改。

在完成获取操作后,你将学习如何比较本地分支和远程分支,以找出它们之间的差异。最后,我们将探讨如何使用 git log 命令直观地验证本地提交是否与远程仓库同步,确保你拥有项目的最新版本。


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/status("Check Status") git/BranchManagementGroup -.-> git/log("Show Commits") git/CollaborationandSharingGroup -.-> git/fetch("Download Updates") git/CollaborationandSharingGroup -.-> git/pull("Update & Merge") git/CollaborationandSharingGroup -.-> git/remote("Manage Remotes") subgraph Lab Skills git/status -.-> lab-560101{{"如何检查 Git 仓库是否与远程仓库同步"}} git/log -.-> lab-560101{{"如何检查 Git 仓库是否与远程仓库同步"}} git/fetch -.-> lab-560101{{"如何检查 Git 仓库是否与远程仓库同步"}} git/pull -.-> lab-560101{{"如何检查 Git 仓库是否与远程仓库同步"}} git/remote -.-> lab-560101{{"如何检查 Git 仓库是否与远程仓库同步"}} end

使用 git fetch 获取远程仓库内容

在这一步中,你将学习如何从远程 Git 仓库获取更改。假设你正在和其他人一起进行一个项目,他们已经做了一些更新。git fetch 就是你用来获取这些更新,同时又不改变自己工作内容的命令。

首先,我们来模拟拥有一个远程仓库。我们会通过将一个远程 URL 添加到现有的本地仓库来实现这一点。在实际场景中,这个 URL 会是托管在 GitHub 或 GitLab 等平台上的仓库的 URL。

如果你还没有进入项目目录,请导航到该目录:

cd ~/project/my-time-machine

现在,让我们添加一个虚拟的远程 URL。我们将这个远程仓库命名为 origin,这是一种常见的命名约定。

git remote add origin https://github.com/example/my-time-machine.git

这个命令不会产生任何输出,但它已经将你的本地仓库配置为知晓一个名为 origin 的远程仓库。

现在,让我们使用 git fetch 来获取远程仓库中更改的信息。由于这是一个虚拟 URL,git fetch 实际上不会下载任何代码,但它会模拟这个过程,并向你展示它会做什么。

git fetch origin

你可能会看到类似这样的输出(具体输出可能会根据你的 Git 版本和配置而有所不同):

fatal: repository 'https://github.com/example/my-time-machine.git/' not found

不要担心“repository not found”错误。这是预期的,因为我们使用的是虚拟 URL。重要的是你已经执行了 git fetch 命令。

在实际场景中,git fetch origin 会连接到远程仓库,下载所有本地仓库中不存在的新提交和分支,并将它们存储在一个特殊区域。它 不会 将这些更改合并到你当前的工作分支中。这使你能够在决定将他人的更改集成到自己的工作之前,先了解他们做了哪些更改。

可以把 git fetch 想象成去邮局取邮件。你拿到了邮件(更改),但在准备好之前,你不会打开它并把它放在你的桌子上(将其合并到你的工作中)。

使用 git status 比较本地和远程仓库

在这一步中,你将使用 git status 命令,查看在获取远程仓库内容后,本地仓库与远程仓库的差异。

如果你还没有进入项目目录,请导航到该目录:

cd ~/project/my-time-machine

现在,运行 git status 命令:

git status

你应该会看到类似以下的输出:

On branch master
Your branch is up to date with 'origin/master'.

nothing to commit, working tree clean

下面来详细分析一下这个输出:

  • "On branch master":这表明你当前位于 master 分支。
  • "Your branch is up to date with 'origin/master'":这是关键信息。它表示本地的 master 分支与 origin 远程仓库的 master 分支拥有相同的提交。

尽管上一步中的 git fetch 命令由于使用了虚拟的远程 URL 而导致出错,但 Git 仍然更新了其内部跟踪信息。在实际场景中,如果 git fetch 成功获取了新的提交,git status 的输出会提示你的本地分支落后于远程分支,并建议你使用 git pull 来集成这些更改。

git status 命令是了解仓库状态的重要工具。它会告诉你当前所在的分支、本地分支是否与远程分支同步,以及工作目录或暂存区是否有未提交的更改。定期检查 git status 是一个好习惯,能让你随时了解项目的状态。

使用 git log 验证同步的提交

在这一步中,你将使用 git log 命令查看提交历史,了解 git fetch 对查看结果的影响。

如果你还没有进入项目目录,请导航到该目录:

cd ~/project/my-time-machine

运行 git log 命令查看提交历史:

git log

你应该会看到在上一个实验中所做的提交:

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

    Send a message to the future

注意,现在的输出显示 (HEAD -> master, origin/master)。这表明本地的 master 分支(HEAD -> master)和 origin/master 的远程跟踪分支(origin/master)都指向同一个提交。这证实了你的本地仓库与远程仓库是同步的(或者至少与 git fetch 命令执行后 Git 所掌握的远程仓库信息是同步的)。

在实际场景中,如果 git fetch 从远程仓库获取了新的提交,运行 git log 会显示这些新提交。它们会出现在日志历史中,origin/master 指针会指向远程仓库的最新提交,而本地的 master 分支仍会指向你最后一次的本地提交。日志中的这种直观差异能让你在合并更改之前,确切地了解远程仓库有哪些可用的更改。

git log 命令对于理解项目的历史至关重要。它能让你查看提交的顺序、提交者、提交时间以及提交信息。结合 git fetch 使用时,它能帮助你直观地看到本地历史和远程仓库历史之间的差异。

q 键退出日志视图。

总结

在这个实验中,你学习了如何检查本地 Git 仓库是否与远程仓库保持同步。首先,你了解了 git fetch 的作用,它可以从远程仓库获取更改,而不会修改本地工作副本。接着,你模拟添加了一个远程仓库,然后执行 git fetch 命令,观察它与远程仓库的交互情况。

后续步骤(在提供的内容中未详细说明)通常包括使用 git status 比较本地分支和获取到的远程分支,以及使用 git log 直观地查看提交历史,识别任何差异,从而确认本地仓库是否与远程仓库同步。