题 如何将新的本地分支推送到远程Git存储库并进行跟踪?


我希望能够做到以下几点:

  1. 基于其他(远程或本地)分支创建本地分支(通过 git branch 要么 git checkout -b

  2. 推送本地分支 到远程存储库(发布),但做到了 跟踪如此 git pull 和 git push 会立即奏效。

我怎么做?

我知道 --set-upstream 在Git 1.7中,但这是一个创作后的动作。我想找到一种方法来在将分支推送到远程存储库时进行类似的更改。


3657
2018-05-04 12:58


起源


可能重复 你如何使现有的git分支跟踪远程分支? - markus
只是指出--set-upstream是-u - Baiyan Huang


答案:


在Git 1.7.0及更高版本中,您可以签出一个新分支:

git checkout -b <branch>

编辑文件,添加和提交。然后 推着 -u (短缺 --set-upstream 选项:

git push -u origin <branch>

Git将在推送期间设置跟踪信息。


5762
2018-06-03 20:50



值得注意的是,如果你已经在你正在推动的分支上设置了现有的跟踪分支,那么 push.default 被设定为 upstream,这不会做你认为它会做的事情。它将尝试推动现有的跟踪分支。使用: git push -u origin mynewfeature:mynewfeature 或者做 git branch --unset-upstream 第一。 - void.pointer
我仍然需要'git branch --set-upstream-to origin / remote',以便'git status'能够正确地报告我对远程分支的分支状态。 - Paul Whipp
对于使用Visual Studio中的Git的人:实际上这是Visual Studio中的“Publish Branch”。在使用-u参数执行git push后,我终于可以看到我的分支在VS UI中发布了。 - Puterdo Borato
我们需要吗? -u 每次我们把分支推到遥控器或者第一次只需要它时选项? - Stephane
@Stephane你只需要 -u 一次启动跟踪。之后才使用 git push - Todd


如果您不与他人分享您的回购,这对推送非常有用 所有 你的分支到遥控器,和 --set-upstream 正确跟踪您:

git push --all -u

(不完全是OP的要求,但这个单线很受欢迎)

如果你与其他人分享你的回购,这不是一个很好的形式,因为你会用你所有狡猾的实验分支堵塞回购。


448
2018-01-20 11:36



和 git pull --all 将它全部拉回到其他地方? KEWL - commonpike
此命令设置跟踪到正确的分支,而无需推送任何内容。谢谢。 - amey91
Git允许提交分支而不是推送它有很好的理由。只使用git push --all就像放弃一块git架构一样。如果它对你有用,那就完全没问题了,太棒了,永远做到了。但是请不要推荐其他人避免学习git,因为这是一种快速的方法。 - Federico Razzoli
这真的不是正确的答案,并不是一个好的工具,如果没有真正解释它的作用和含义是什么,建议。请考虑回答这个问题。 - akronymn
@Federico @akronymn哪里可以找到做的危险 git push --all -u? - user1823664


在介绍之前 git push -u,没有 git push 获得你想要的选择。您必须添加新的配置语句。

如果您使用以下方法创建新分支:

$ git checkout -b branchB
$ git push origin branchB:branchB

你可以使用 git config 命令避免直接编辑 .git/config 文件。

$ git config branch.branchB.remote origin
$ git config branch.branchB.merge refs/heads/branchB

或者你可以手动编辑 .git/config 文件以获得此分支的跟踪信息。

[branch "branchB"]
    remote = origin
    merge = refs/heads/branchB

132
2018-05-04 13:03





简单地说,创造一个新的 本地 分支,做:

git branch <branch-name>

把它推到了 远程 存储库,做:

git push -u origin <branch-name>

111
2018-04-24 12:09



git branch <branch-name> 和 git checkout -b <branch-name> 两者都创建一个分支,但checkout切换到新分支 - Robert
没有括号 - jairhumberto
dude bracket就是提到你必须替换你想要创建和推送的任何分支名称。 - piyushmandovra


这里给出的解决方案略有不同:

  1. 基于其他(远程或本地)分支创建本地分支:

    git checkout -b branchname
    
  2. 将本地分支推送到远程存储库(发布),但使其可跟踪 git pull 和 git push 会立即奏效

    git push -u origin HEAD
    

    运用 HEAD 是一种“将当前分支推送到远程同名的便捷方式”。资源: https://git-scm.com/docs/git-push 在Git术语中,HEAD(大写)是对当前分支(树)顶部的引用。

    -u 选项只是简称 --set-setupstream。这将为当前分支添加上游跟踪参考。您可以通过查看.git / config文件来验证这一点:

    Enter image description here


55
2017-07-05 08:13



谢谢 :) git push -u origin <branch-name> 不是为我工作,而是使用 HEAD 代替 <branch-name> 完美地工作:) - Daniel Tonon
这个对我有用。最佳答案不起作用。 - jdhao
我爱 HEAD  - 懒得打字;-) - user776686
@ user776686你必须知道你刚刚在那里做了什么,对吗? - Yatrix
喜欢这个答案 - 键入“HEAD”比输入(通常冗长或复杂的)功能分支名称的全名更容易。 - JKubecki


我想你已经克隆了一个项目,如:

git clone http://github.com/myproject.git
  1. 然后在本地副本中,创建一个新分支并检查它:

    git checkout -b <newbranch>
    
  2. 假设您在服务器上创建了一个“git bare --init”并创建了myapp.git,您应该:

    git remote add origin ssh://example.com/var/git/myapp.git
    git push origin master
    
  3. 之后,用户应该能够

    git clone http://example.com/var/git/myapp.git
    

注意: 我假设你的服务器正常运行。如果不是,它将无法正常工作。一个很好的操作方法 这里

添加

添加远程分支:

git push origin master:new_feature_name

检查一切是否正常(获取原点并列出远程分支):

git fetch origin
git branch -r

创建本地分支并跟踪远程分支:

git checkout -tb new_feature_name origin/new_feature_name

更新一切:

git pull

27
2018-05-04 13:04



我链接的William脚本与删除远程分支和一些安全措施的附加选项大致相同 - Tobias Kienzler
>将本地分支推送到远程仓库(发布),但使其>可跟踪,以便git pull和git push立即生效。当你将代码推送到他们的存储库时,github会自动执行的操作:-) - VP.
这不响应问题,原始仓库的<newbranch>不可跟踪(并且重命名为<master>是您在步骤3中克隆的新仓库)。 - Lohrun
看起来有点矫枉过正。是的 git remote add origin 使本地分支可追踪?这是关键命令吗? - Roni Yaniv
@Roni Yaniv:没有 git remote add origin 只注册一个新的远程存储库。在将分支推送到远程存储库之前,这只是一个步骤(如果您不想每次都输入整个地址) - Lohrun


我只是这样做

git push -u origin localBranch:remoteBranchToBeCreated

在已经克隆的项目上。

Git创建了一个名为的新分支 remoteBranchToBeCreated 根据我的承诺,我做了 localBranch


24
2018-03-20 11:13





编辑 过时,只需使用 git push -u origin $BRANCHNAME


使用 git publish-branch 从 威廉的杂项Git工具 (有礼的回购 和 克隆)。

好的,没有Ruby,所以 - 忽略了保护措施! - 获取脚本的最后三行并创建一个bash脚本, git-publish-branch

#!/bin/bash
REMOTE=$1 # Rewrite this to make it optional...
BRANCH=$2
# Uncomment the following line to create BRANCH locally first
#git checkout -b ${BRANCH}
git push ${ORIGIN} ${BRANCH}:refs/heads/${BRANCH} &&
git config branch.${BRANCH}.remote ${REMOTE} &&
git config branch.${BRANCH}.merge refs/heads/${BRANCH}

然后跑 git-publish-branch REMOTENAME BRANCHNAME,其中REMOTENAME通常是原点(您可以修改脚本以将原点作为默认值等)...


19
2018-05-04 13:03



这假设我安装了ruby。没有这样的运气。还有其他想法吗? - Roni Yaniv
ruby脚本调用 git push 和 git config 命令。我使用脚本代码编辑我的答案。您可能会使用此信息创建一个小shell脚本,为您完成创建。 - Lohrun
威廉的杂项git工具似乎已经移动(该链接现已死亡)。一个工作链接是: gitorious.org/willgit - Mike D
“威廉的”链接再次被打破;新的链接似乎是 git-wt-commit.rubyforge.org - ScottJ


通过从现有分支分支来创建新分支

git checkout -b <new_branch>

然后使用将此新分支推送到存储库

git push -u origin <new_branch>

这会创建所有本地提交并将其推送到新创建的远程分支 origin/<new_branch>


15
2018-06-03 20:36