Git - 分支跟踪



在 Git 中,**跟踪分支** 是一个本地分支,它被设置为跟踪远程仓库中的一个分支的状态。当本地分支跟踪远程分支时,Git 允许您轻松同步这两个分支。

使用简单的命令,如 **git pull** 和 **git push**,可以从远程分支获取更改或将您的更改发送到远程分支,而无需每次都显式指定远程分支。

当一个分支跟踪远程分支时,Git 还会告知您您的本地分支是在远程分支之前还是之后。这使得更容易管理更改流程并维护最新的代码库。

分支跟踪的工作原理

当您第一次将本地分支推送到远程仓库时,Git 会自动在本地分支和远程分支之间建立跟踪关系。远程分支通常称为 **origin/branch-name**,其中 **origin** 是远程仓库的默认别名。

例如

  • 您在本地机器上创建一个名为 **feature-branch** 的新分支。

  • 您使用 **git push origin feature-branch** 将此分支推送到远程仓库。

  • Git 将 **feature-branch** 设置为跟踪 **origin/feature-branch**。

从这一点开始,Git 知道本地机器上的 **feature-branch** 对应于远程仓库上的 **origin/feature-branch**。

设置跟踪分支

在创建新的本地分支时,或者当我们想要在现有本地分支和远程分支之间建立关系时,我们可以显式地设置分支跟踪。让我们看看如何在不同的场景中设置跟踪分支

创建新的跟踪分支

在创建新分支时,我们可以使用 **-u** 或 **--set-upstream-to** 选项与 **git branch** 或 **git checkout** 命令一起使用,将其设置为跟踪远程分支。

git checkout -b feature-branch
git push -u origin feature-branch

在此示例中

  • **-b** 选项创建一个名为 **feature-branch** 的新分支。

  • 使用 **git push** 的 **-u** 选项将 **feature-branch** 设置为跟踪 **origin/feature-branch**。

  • 从这一点开始,**git pull** 和 **git push** 将自动同步本地和远程分支之间的更改。

跟踪现有分支

要设置现有分支与远程分支之间的跟踪关系,可以使用以下命令

 git branch --set-upstream-to=origin/feature-branch feature-branch

这会在本地 **feature-branch** 和远程分支 **origin/feature-branch** 之间建立跟踪关系。现在,我们可以轻松地拉取和推送更改,而无需每次都指定远程分支。

克隆仓库并跟踪分支

当您使用 **git clone** 克隆远程仓库时,Git 会自动为默认分支(通常为 **main** 或 **master**)设置跟踪。例如,克隆仓库后,本地 **main** 分支将自动跟踪 **origin/main**。

git clone https://github.com/user/repository.git

检查分支跟踪状态

我们可以使用几个 Git 命令查看本地和远程分支之间当前的跟踪关系。

查看所有分支及其跟踪状态

要查看哪些本地分支正在跟踪远程分支,以及它们的同步状态,请在 **git branch** 命令中使用 **-vv** 选项

git branch -vv

此命令列出所有本地分支,并显示它们正在跟踪哪个远程分支。它还指示分支是在远程分支之前还是之后。例如,我们可能会看到如下输出

  * main  123abc [origin/main: behind 2] Latest commit message
  feature-branch 456def [origin/feature-branch: ahead 1] Another commit message

此输出告诉您

  • main 分支落后于 **origin/main** 两个提交。

  • **feature-branch** 比 **origin/feature-branch** 超前一个提交。

查看特定分支的跟踪状态

要检查特定分支是否正在跟踪远程分支,请使用以下命令

git status

Git 将显示一条消息,指示您的分支是否正在跟踪远程分支,以及它是在之前、之后还是最新状态。

与跟踪分支同步

一旦分支跟踪远程分支,Git 就可以轻松地使用 **git pull** 和 **git push** 命令同步这两个分支之间的更改

排查分支跟踪问题

在使用跟踪分支时,可能会遇到一些常见问题,但通常很容易解决。

错误:没有跟踪信息

如果我们尝试在未设置为跟踪远程分支的分支上运行 **git pull** 或 **git push**,我们可能会看到类似这样的错误

fatal: The current branch feature-branch has no upstream branch.

要解决此问题,我们可以使用 **--set-upstream-to** 选项设置上游分支

git branch --set-upstream-to=origin/feature-branch

或者,我们可以在首次推送时使用 **-u** 选项设置上游分支

git push -u origin feature-branch

之前/之后状态

如果 Git 告诉我们该分支“之前”或“之后”远程分支,则表示一个分支中有一些提交,而另一个分支中没有。我们可以通过运行 **git pull** 来获取和合并来自远程分支的更改或 **git push** 来将您的本地提交上传到远程分支来解决此问题。

广告