要从远程 Git 仓库抓取分支并开始在本地处理,请在仓库中打开“终端”,从正确的远程仓库进行抓取,然后创建一个跟踪该远程分支的本地分支。例如,git fetch origin 紧接着 git switch --track origin/feature/login 即可创建并切换到与 origin/feature/login 关联的本地 feature/login 分支。

在仓库中打开“终端”

打开“终端”并进入包含你 Git 仓库的文件夹。在 macOS“终端”中,默认 shell 是 zsh,不过你的配置可能会使用其他 shell。下方的 Git 命令在两者中均可运行;包含 shell 元字符的分支名称应加引号,以免 shell 对其进行解释。Apple 的“终端”使用手册

如果你已经在代码编辑器中打开了该仓库,可直接使用其内置终端(如果可用)。否则,在“终端”中键入 cd ,将仓库文件夹从访达拖入“终端”窗口以插入其路径,然后按 Return 键。在切换分支之前,请确认你位于正确的仓库中并检查是否有任何本地更改:

git status --short
git remote -v

git remote -v 会列出已配置的远程名称和 URL。以下命令使用 origin(常见的远程名称);请将其替换为你 Mac 上显示的实际名称。如果未列出任何远程仓库,则说明此仓库当前没有可从中进行抓取的已配置远程仓库。

抓取远程分支

运行:

git fetch origin

抓取操作会从远程仓库下载提交和引用,并根据仓库的 fetch 配置更新本地的远程跟踪引用。它本身不会将你的工作目录切换到该分支。在通常的配置下,从 origin 抓取的分支会显示为类似 origin/feature/login 的名称。Git 文档将 fetch 描述为更新远程跟踪分支,确切的映射受远程仓库的 fetch refspec 控制。Git fetch 文档

你可以通过以下命令确认该分支在本地可见:

git branch --remotes

在输出中查找 origin/feature/login。如果未显示,请检查分支名称和远程仓库是否正确、你是否可以访问远程仓库,以及远程仓库的 fetch 配置是否包含该分支。如果仓库使用了受限制的 refspec,成功的抓取可能仍然不会显示服务器上的每一个分支。

创建并切换到本地跟踪分支

当远程跟踪分支存在,且你希望本地分支使用相同的名称时,请运行:

git switch --track origin/feature/login

Git 会创建一个本地 feature/login 分支,将其上游设置为 origin/feature/login,并将你的工作树切换到该分支。这种跟踪关系允许 git status 等命令报告本地分支与其上游相比的状态,并为 git pull 等操作提供默认上游。--track 选项用于设置该上游;Git 在这种形式下会直接从远程跟踪分支派生出本地名称。Git switch 文档

如果你希望使用不同的本地分支名称,请显式指定:

git switch --track --create login-work origin/feature/login

这将创建跟踪 origin/feature/login 的本地 login-work 分支。在支持较新 switch 命令的 Git 版本中,--create 是 -c 的完整形式。如果 Git 报告 switch 为未知命令,请通过 git --version 检查已安装的版本;git switch 是在 Git 2.23 中引入的。在这种情况下,请使用旧版的对应命令:

git checkout --track -b login-work origin/feature/login

验证分支并处理常见错误

切换后,确认当前活动分支和跟踪状态:

git status -sb
git branch -vv

状态输出应指明本地分支及其上游。在分支列表中,login-work 应将 origin/feature/login 显示为其跟踪分支。

如果 Git 提示分支存在歧义,请使用上面显示的完全指定格式 remote/branch,而不要依赖自动推断。当恰好只有一个远程仓库具有匹配分支时,Git 的简写命令 git switch feature/login 可以自动创建跟踪分支,但当多个远程仓库都包含该名称时就会产生歧义。Git switch 文档

如果因本地更改会被覆盖而拒绝切换,请在继续之前停下来检查 git status。提交或安全暂存你想保留的工作;除非你清楚会丢失什么,否则不要强制切换或丢弃更改。如果本地分支名称已存在,请慎重选择该分支,或使用 --create 指定一个不同的本地名称;不要假定已存在的分支必然跟踪了你预期的远程分支。

当检出了预期的本地分支且其上游指向预期的远程分支时,工作流程即告完成。抓取操作会刷新本地仓库对远程状态的了解;创建跟踪分支则为你提供了一个本地工作空间,同时保留了与远程的连接。

来源