从特定分支拉取git代码

332

我已经将一个git仓库克隆到我的开发服务器上,然后切换到dev分支,但现在我无法使用git pull命令更新分支。

我该如何在服务器上更新代码?


初学者的评论:我试图找到一个关于是否可以使用git pull my_branch替代git fetch my_branch + git checkout my_branch的问题,结果发现这会抛出fatal: my_branch does not appear to be a git repository \n fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists. 如果你想将另一个分支合并到已经检出的分支中或者更新已经检出的分支,你只能使用pull - questionto42
10个回答

444

请查看git-pull手册页

git pull [选项] [<仓库> [<参考规格>...]]

在示例部分中:

将远程分支next合并到当前分支:

$ git pull origin next

因此我想你想要做类似以下操作:

git pull origin dev

如果你想在开发分支上默认执行此操作:

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

10
"--set-upstream" 标志已被弃用并将被移除。建议使用 "--track" 或 "--set-upstream-to Branch dev" 来设置跟踪来自 origin 的远程分支 "dev"。例如:git branch --set-upstream-to origin/dev - Nagendra Rao
请修改此处以反映--set-upstream已被弃用的情况。 - Scott Skiles
就个人而言,我对以下流程感兴趣:当我想从尚未获取的源中拉取一个特定分支并将这些对象放在单独的分支上时,我的当前分支不会与我正在拉取的内容合并。 - Yuri Pozniak

62

以下是您需要做的。首先确保您位于不想拉取的分支中。例如,如果您有主分支和开发分支,并且您正在尝试拉取开发分支,则请留在主分支。

git checkout master

那么,

git pull origin develop

21
这很令人困惑。如果我想将远程的“dev”分支合并到本地的“dev”分支中,我认为你需要保持在本地的“dev”分支上而不是其他任何分支。 - Roman
9
这不是获取远程开发分支,然后将其合并到本地主分支吗? - Brad P.
4
我执行了git checkout developgit pull origin develop,操作成功。如果你想移除一个本地或远程分支,你需要切换到其他分支(git branch -d developgit push origin --delete develop)。请注意,删除分支可能会对代码库产生影响,请谨慎操作。 - ChesuCR
2
非常混乱。我刚刚将我想要测试的分支本地合并到主分支 :) - Fabian Bosler
正如@Roman所说,需要在本地分支中。 - woter324

58

如果您想从特定分支拉取,您需要做的就是:

git pull 'remote_name' 'branch_name'

注意:确保您先提交您的代码。


这个答案需要输入的命令比大多数最受欢迎的答案要少,所以请给这个答案点赞。 - TarmoPikaro
很好!这就是我在寻找的东西。谢谢! - Janbalik

19

通常将 git pull 所做的两个操作分开更清晰。 它首先更新与远程分支对应的本地跟踪分支。可以使用 git fetch 完成此操作。其次,它会合并更改,当然也可以使用git merge 来完成,不过其他选项例如 git rebase 有时也很有用。


17

这里是获取特定或任何分支的步骤:

1. 克隆主分支(您需要提供用户名和密码)

       git clone <url>

2. 上述命令将克隆存储库,并且您现在将成为主分支

       git checkout <branch which is present in the remote repository(origin)>

3. 以上命令将切换到您想要拉取的分支,并自动设置为跟踪该分支

4. 如果出现某些原因导致它不能按照预期工作,在本地系统中检出该分支后,只需运行以下命令

       git pull origin <branch>

15

Laravel文档示例:

git pull https://github.com/laravel/docs.git 5.8

基于命令格式:

git pull origin <branch>


9

对我来说,这个方法完美地运行了,尽管获取所有分支可能有些过多

git init
git remote add origin https://github.com/Vitosh/VBA_personal.git
git fetch --all
git checkout develop

enter image description here


如果你想避免拉取所有内容,只获取特定的分支(比如这里的“develop”),则可以使用以下命令:
git init
git remote add origin https://github.com/Vitosh/VBA_personal.git
git fetch origin develop
git checkout develop

1
为什么要使用 fetch --all 呢?只使用 git fetch origin <name_of_specific_branch> 就足够了。 - ashishsony
@ashishsony - 嗯,对我来说那样做更容易。无论如何,你肯定有道理,我已经编辑了我的答案。 - Vityata

6
您可以使用以下命令在git分支上进行更新/拉取操作。
git pull origin <branch-name>

上述命令将从指定的分支名称进行更新/拉取操作。

如果你想要从另外一个分支进行拉取操作,你需要切换到那个分支。

git checkout master

Than

git pull origin development

希望这对你有用


2

git-pull - 从另一个存储库或本地分支获取并集成

git pull [选项] [<存储库> [<refspec>...]]

您可以参考官方 git 文档 https://git-scm.com/docs/git-pull

例如:

git pull origin dev


你的回答与已经发布的其他回答有什么不同之处呢? - j08691
没什么特别的,只是官方文档(https://git-scm.com/docs/git-pull)提供了很多选项可以供你探索。 - Sesha

0
在我的情况下,Devop已经更新(或HEAD),而Main则较旧(大约落后20个提交),使用git fetch --all--allow-unrelated-histories,可以完美地解决问题。
就像这样:
git clone https://github.com/xxxxxxxx
git remote add origin https://github.com/xxxxxxxx
git fetch --all

(这里出现了合并不相关历史记录的错误,所以)
git pull origin devop --allow-unrelated-histories

在这一点上,我遇到了一些冲突,但通过新的提交已经解决了。

最后

git push -u origin devop

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