Git 复制远程分支到本地分支
本篇文章将介绍如何使用新的 git switch -c
命令将远程分支复制到本地分支。 我们将讨论两种较早的方法来执行此操作 - git checkout
远程分支到本地,以及带有 -c 标志的 git branch
。
我们只将内容复制到本地分支,但不与远程创建任何跟踪关系。 这里的用例是创建备份或浏览内容,但我们不想将更改合并到远程分支中。
在 Git 中将远程分支复制到本地分支的最新和最佳方法 - git switch -c
之前,命令 git checkout 因多种目的而超载。 它检查到不同的分支并从提交中恢复更改。
这在开发人员中引起了很多混乱。
较新版本的 Git(Git v2.23,2019 年第三季度及更高版本)引入了一个新命令 - git switch 以签入不同的分支。 通过它的 --create 选项,如果在我们切换到它之前它不存在,我们可以使用它来创建一个新分支。
这是现在将远程复制到本地分支的最佳推荐方法。
我们设置了一个包含几个分支的远程仓库,并使用 git branch
命令列出它们。
$ git branch -a
在远程存储库中,它看起来像这样:
我们会将名为 another_branch 的分支复制到我们的本地存储库。
首先,我们将使用 git fetch 命令将远程分支提取到我们的本地存储库。
git fetch --all
我们看到这会获取远程分支。
我们现在使用 git switch
命令创建 origin/another_branch 的副本。
我们传递了几个选项 - -c 标志来创建新的副本分支(它事先不存在)。 我们还提供了 --no-track 选项,因为我们只想要分支的副本而不是克隆(在本文后面)。
$ git switch -c <new_branch> <old_branch> --no-track
此命令创建了一个名为 new_local_copy 的新副本并切换(选中)到其中。
如果我们现在列出本地存储库中的所有分支,则复制的分支 new_local_copy 不会跟踪我们复制的分支 another_branch。
最好使用 git switch
远程分支在我们的本地存储库中复制它。
在 Git 中将远程分支复制到本地分支的旧方法 - git checkout
git checkout 是一个在旧 Git 版本中做很多事情的命令。 其中一个正在切换到另一个分支。
因此,Git checkout 远程分支到本地是制作本地副本的旧方法。
我们首先签出到我们要复制的远程分支。 (确保先获取分支。)
$ git checkout <remote_branch>
接下来,我们使用 git branch
命令创建该分支的新副本。 我们再次通过 --no-track 选项,因为我们不想在两个分支之间创建任何跟踪关系。
$ git branch <new_branc> --no-track
我们在下面看到新创建的分支没有跟踪旧的远程分支。
在这种旧方法和新引入的 git switch
命令之间,git branch
命令学会了 --copy 选项来复制分支。 我们现在将看到如何使用此方法将远程复制到新的本地分支。
在 Git 中将远程分支复制到本地分支使用 git branch
命令中的 --copy 选项是一个两步过程。
我们首先使用 git checkout
命令检查远程分支。 请注意 --no-track 选项。
$ git checkout <old_branch> --no-track
接下来,我们通过将 -c 标志(对于 --copy)传递给 git branch
命令来复制到一个新分支。
$ git branch -c <old_branch> <new_branch>
同样,您可以在下面看到新副本不跟踪旧分支。
Git 复制和克隆之间的区别
Git 复制与 Git 克隆不同。有一些细微的差别。
- 复制分支时,新分支不会跟踪旧分支。 这意味着两者之间没有联系——新分支只是复制了旧分支的内容。 但是,克隆会跟踪旧分支。 这意味着您可以在不传递显式参数的情况下以原始形式推送、拉取、合并、变基和使用这些命令——跟踪关系自动填充分支名称。
- 在 Git 中,克隆针对效率进行了优化。 因此,当您克隆时,新分支不会获得旧分支的引用日志、配置和挂钩。 副本也会复制所有这些。 这在某些情况下至关重要,例如,当您尝试借助 reflog 恢复丢失的提交时。
- Git 复制操作有几个典型的用例 - 最常见的是创建远程分支的备份。 另一个用例是当开发人员想要下载和探索一个有趣的远程功能分支而不打算将他的更改推送到主代码库时。