如何在git中切换到不同的远程分支

33

我有3个本地分支和3个远程分支,希望在两个位置都处于同一个分支。

本地分支上:

git branch
  A
* B
  master

git branch -r
  origin/A
  origin/B
  origin/master

在远程:

git branch
  A
  B
* master
我能够提交、推送和拉取B分支,但我的更新钩子(update hook)部署的是master分支,我认为这是因为远程分支仍然设置为master。我是用以下命令创建了B分支:

我能够提交、推送和拉取B分支,但我的更新钩子部署的是master分支,我认为这是因为远程分支仍然设置为master。我是用以下命令创建了B分支:

git branch B
git checkout B
git push origin B
3个回答

65

以下是我切换并工作于git仓库中远程分支的方法。

首先查看所有的分支,只需在终端输入以下命令:

git branch --all

然后你会看到本地和远程的所有分支,就像这样:

*master
remotes/origin/develop
remotes/origin/master
remotes/origin/web
remotes/origin/app

假设你想切换到 remotes/origin/develop 分支。输入以下命令:

git checkout remotes/origin/develop

然后再次输入git branch --all以查找此内容:

*(detached from remotes/origin/develop)
master
remotes/origin/develop
remotes/origin/master
remotes/origin/web
remotes/origin/app

然后只需要执行:

git checkout -b develop

从现在开始,您将完全使用remotes/origin/develop分支。


1
我认为答案略有不同。OP 问的是如何切换远程仓库的当前分支。 - alpha_989
1
你能添加 git checkout -b <branch> 的功能说明,或者指出详细文档的位置吗? - abhishah901

9
To switch to a remote repo
git branch -r ## list all the branches including the remote branches
git switch <branchname>

5
据我所知,使用git push没有办法更改远程仓库的当前分支。推送操作只会将本地的修改复制到该仓库中。通常情况下,你要推送的远程仓库应该是--bare的,没有工作目录(因此也没有“当前分支”)。

我认为你是对的,这本来就不是我的问题。问题在于我正在使用更新钩子,所以其中的 git 存档没有得到最新提交,或者其他某些问题。我只知道我的部署分支比本地推送落后了一个提交。 - sanon
你能发布一下你的钩子脚本相关部分吗? - dahlbyk
这是我的更新钩子 git archive $1 | tar -x -C /local/B/ rsync -arq \ --exclude ".git" \ --delete --delete-excluded \ /local/B/ me@dev:/remotedev/html/B/ - sanon
看起来没问题... 当你 git push origin B 时,它应该调用 git archive B。尝试将 echo "$1" 添加到挂钩中以验证参数值。 - dahlbyk
是的,当我推送B时,echo $1会给出ref/heads/B,这是“正在更新的引用名称”根据githook文档。我发现如果使用post-update钩子,它可以按预期工作。post-update的文档说它“接受可变数量的参数,每个参数都是实际更新的引用名称”。在update和post-update钩子中,$1始终相同吗?也许这是一个更好的问题。 - sanon

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