如何干净地将远程git分支复制到本地仓库

116
我想要精确地“复制”远程分支到一个特定的本地分支。
例如,团队成员创建了一个实验性功能,将其提交到远程仓库上的一个名为experiment的分支中。我想要在我的本地仓库上检出一个新分支,并且将experiment分支作为完整的"复制"到新检出的分支上。
我不想将它与自己的代码合并 - 我想完全覆盖自己的代码,以便我可以清楚地查看他在“experiment”分支上所做的工作。
如何获取(fetch / pull / whatever ...)他人已提交到远程仓库中的分支到您自己的本地仓库中,而不会尝试对您自己的本地代码执行合并操作?

我喜欢为这种情况保留本地repo的单独副本。这不仅可以避免错误,还可以让我并行工作。 - user1164937
4个回答

190

如果您不关心合并:

git reset --hard <remote>/<branch_name>
这会完全做你想要的事情:没有合并,没有变基,只需将本地分支放置到与远程状态完全相同的状态。
然而在你的情况下,你不需要那样做。你想要创建一个与远程状态相同的本地分支,因此在使用git checkout创建本地分支时,指定远程分支即可:
git checkout -b <my_new_branch> <remote>/<branch_name>

如果你想在本地使用相同的名称,可以将其缩短为:

git checkout <branch_name>

如果你已经有了一个本地分支(例如其中有一些更改), 并且想要放弃你所做的任何修改,而是采用远程分支的完全版本,则可以使用git reset --hard

在检出或重置之前,使用git fetch <remote>确保您拥有最新状态的远程分支。


8
不要重置以放弃你的更改。使用git stash代替,更加安全。 - Adam Dymitruk
3
起初这个方法没起作用,但那是因为我没有先获取远程内容。 - capybaralet
我不明白这个答案。在输入“remote/<branch_name>”或“<remote>/<branch_name>”时,您是否替换“origin”或其他内容? - Jim
我执行了 git checkout -b branchname origin/branchname,但是收到警告:refname is ambiguous. - Alexander
对我没有起作用,我尝试了这个命令 git checkout -b TLA1 origin/TLA1TLA1 是我想要创建的分支,也是我远程仓库中的一个分支,但是我得到了这个错误信息:fatal: 'https://github.com/myremoterepo/TLA1' is not a commit and a branch 'TLA1' cannot be created from it - Ice Bear
显示剩余2条评论

15
假设 git remote 命令的结果为 origin,那么:
git fetch origin remote_branch_name:local_branch_name

会创建一个本地分支,该分支是你需要的远程分支的精确副本。

编辑: 有一种更现代化的替代方案:

git switch remote_branch_name

该命令将创建一个与指定的远程分支同名的本地分支。

没有其他方法适用于我,只有这个方法有效!谢谢。 - Banipreet Singh Raheja

9

我声望不够,不能评论,但是我想为那些仍在努力的人们添加一个示例。在我的示例中,我使用Github作为我的远程服务器,并将分支复制到我的Linux服务器环境/终端。

首先,您需要运行git fetch确保您是最新的。

以“picklerick”命名的远程分支为例

git checkout -b <my_new_branch> <remote>/<branch_name>

我运行了

git checkout -b picklerick remotes/origin/picklerick

也许我只需使用remote/picklerick作为我的远程路径,但这对我起作用。


1

使用以下命令更新本地分支的远程副本

git fetch

从远程分支创建一个新分支

git branch new_branch_name origin/remote_branch_name

这里的origin是您远程仓库的名称。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接