能否创建一个跟踪不存在的远程分支的分支?

10
我希望您能够以这种方式检出分支,以便随后的git push将其正确地推送到相同名称下的 origin 。
当远程分支已经存在时,这很容易实现。
git checkout -b branch origin/branch

然而,即使origin/branch还不存在,我也想这样做。

4个回答

7

只需创建本地分支即可

git checkout -b branch

远程仓库不知道你的本地分支,因此你必须第一次“手动”推送它。
git push origin branch

现在,如果您希望您的本地仓库能够跟踪远程仓库的本地分支,请执行以下操作。
git branch --set-upstream branch origin/branch

2
我想要的是避免“手动”推送,因为我不想重新制作我的脚本 ;) - Almad
这只是为了创建远程副本,仅需要一次。之后,设置上游(第三个命令),你就万事大吉了。 - KingCrunch
我正在编写的是单一目的的 RC 分支脚本...但如果不可能,这也是一个答案--谢谢。 - Almad
使用git push命令创建远程分支可能会解决这个问题,但在我看来,这绝对不是一个满意的答案。我希望能够跟踪一个不存在的远程分支(当我初始化一个新的裸项目时)。 - rektide
@rektide 如果它不存在,你想要追踪什么?你只能引用已经存在的对象。"我想让我的椅子看起来像那边的椅子"-"但那边没有椅子":? -- 公平地说,我的回答解决了OP的问题,但不是你的问题,因为你的问题有一个非常简单的答案:你不能。 - KingCrunch
--set-upstream已经过时,应该编辑为--set-upstream-to或--track。 - psparrow

6

据我所知,没有简单的方法。

以下是我对此的尝试。这是一个bash函数,它设置了一个新的本地分支,使得从该分支进行git push时,将推送到一个同名的新远程分支。

function featurebranch() {
  if [ "$@" != "" ]; then
    git branch "$@" origin/master
    git checkout "$@"
    git config branch."$@".remote origin
    git config branch."$@".merge refs/heads/"$@"
    git config branch."$@".rebase true
  fi
}

这需要使用git config命令,因为使用git push -ugit branch --trackgit branch --set-upstream-to命令都涉及实际存在的远程分支。

如果有任何git大师检查并指出任何问题,我将不胜感激。谢谢。;-)


我喜欢它,或者至少是它的想法。问题(来自非git-master):(1)git-status说上游已经消失并提示您进行重置,(2)我会让用户指定来源分支,并将其保存为独立的可执行bash脚本,以便可以命名为“git-featurebranch”,而无需混淆别名。一旦我测试了我的修改,我会跟进的。 - nhed
Gregory - 我把我的修改发布在这里:https://gist.github.com/nhed/239aa94078b0b533d6f5 - nhed
1
这应该是被批准的答案 :) - spacifici

1

Git 1.7.0+

首先,创建本地分支:

git checkout -b new-branch

在这一点上,远程仓库并不知道本地分支的存在,因此我们需要将其推送并设置跟踪引用。
git push -u origin new-branch

 

Git < 1.7.0

创建本地分支:

git checkout -b new-branch

在版本1.7.0之前的Git需要三个命令来推送分支并设置跟踪引用。

git push origin new-branch
git config branch.new-branch.remote origin
git config branch.new-branch.merge refs/heads/new-branch

 

使用别名(Git 1.7.0+)

奖励:使用此 Git 别名可以在一个命令中创建本地分支并推送跟踪的远程分支:

git config --global alias.cb $'!sh -c \'git checkout -b "$0" && git push -u origin "$0"\''

然后要创建一个新的分支,你只需要运行:

git cb new-branch

可以使用git < 1.7.0中详细说明的步骤,在后续版本中创建一个设置跟踪分支的分支,而无需进行网络请求,这可能是OP正在寻找的。之后执行git push将会创建远程分支。 - Ákos Vandra-Meyer
我的设置:cb = "!git checkout -b $1; git config branch.$1.remote origin; git config branch.$1.merge refs/heads/$1 #" - Ákos Vandra-Meyer

0

经过尝试和测试。 git版本2.10.1(Apple Git-78)

1) git checkout -b localBranchNameThatDoesNotExistInRemote

2) Do your changes , and go a git commit 

3) git push origin localBranchNameThatDoesNotExistInRemote --force

注意 - 您当前所在的分支是本地分支,您正在尝试推送到不存在的远程分支,两者必须具有相同的名称


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