【问题标题】:Track branch after creation?创建后跟踪分支?
【发布时间】:2011-04-07 11:22:30
【问题描述】:

这是我的场景(这是一个非常简单的场景):我在本地创建了一个分支,没有使用--track。我做了一些提交并像这样推送它:

git push origin test

但现在我不想每次推送这个分支时都输入origin test,所以我想让它跟踪origin/test(或者反过来?)。

我怎样才能做到这一点?我试过了:

git branch --set-upstream origin/test

它没有工作。当我尝试推送时,它显示“一切都是最新的”,它似乎创建了一个名为“origin/test”的实际分支,这不是我想要的。

更新:这里是.git/config的内容(运行--set-upstream之后):

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
[remote "origin"]
    url = git@***.unfuddle.***/***.git
    fetch = +refs/heads/*:refs/remotes/unfuddle/*
    push = refs/heads/master:refs/heads/master
[gui]
    wmstate = normal
    geometry = 1098x644+298+187 207 207
[branch "test"]
    remote = origin
    merge = refs/heads/test

【问题讨论】:

    标签: git git-branch git-remote


    【解决方案1】:

    调用git branch --set-uptstream时忘记指定本地分支

    git branch --set-upstream test origin/test
    

    编辑: 好的,也许你没有忘记它(因为最后一个参数可以省略),但是你想设置本地分支来跟踪远程分支(manpage git-branch),而不是你做了相反的事情(假设你当前在分支test)

    git branch [--set-upstream | --track | --no-track] [-l] [-f] <branchname> [<start-point>]
    

    您指定 origin/test 跟踪 test。

    【讨论】:

    • 这不起作用。在此命令之后执行git push 会产生“一切都是最新的”,尽管我在上次推送后做出了提交。
    • 复制粘贴评论?您确定您在我的回答中执行了评论,而不是来自@Aasmund 的评论?你的.git/config 里有什么?应该有类似[branch "test"] remote = origin merge = refs/heads/test
    • 是的。我复制并粘贴了,因为这两个命令的行为相同。
    • 刚刚也尝试了相反的方法 (--set-upstream origin/test test),我得到了同样的结果。
    • 您需要删除使用错误命令创建的本地 origin/test 分支才能正常工作。我相信正确的顺序是 用于设置上游,但如果本地原点/测试分支仍然存在,它将有效地影响远程原点的分支测试。
    【解决方案2】:

    --set-upstream 已被弃用。请改用--track 或--set-upstream-to。

    git branch --track test origin/test
    

    【讨论】:

      【解决方案3】:

      试试git push -u origin test。

      【讨论】:

      • 这不起作用。在此命令之后执行git push 会产生“一切都是最新的”,尽管我在最后一次推送之后做出了提交。
      【解决方案4】:

      我最终手动编辑了.git/config。这是它现在的样子:

      [core]
          repositoryformatversion = 0
          filemode = true
          bare = false
          logallrefupdates = true
      [remote "origin"]
          url = git@***.unfuddle.***/***.git
          fetch = +refs/heads/*:refs/remotes/unfuddle/*
      [branch "master"]
          remote = origin
          merge = refs/heads/master
      [branch "test"]
          remote = origin
          merge = refs/heads/test
      

      现在似乎可以工作了。我从另一个项目中得到了这个例子,我使用--track 设置了分支。

      我认为问题在于[remote "origin"] 中的push 语句,我认为这使它总是推送主分支。

      【讨论】:

        猜你喜欢
        • 2017-10-26
        • 2019-08-14
        • 2015-02-25
        • 2016-04-04
        • 2012-07-01
        • 1970-01-01
        • 2023-03-10
        • 2023-01-14
        • 2011-03-20
        相关资源
        最近更新 更多