【问题标题】:git checkout tag, git pull fails in branchgit checkout 标签,git pull 在分支中失败
【发布时间】:2012-04-26 05:02:10
【问题描述】:

我已经克隆了一个 git 存储库,然后签出了一个标签:

# git checkout 2.4.33 -b my_branch

这没关系,但是当我尝试在我的分支中运行git pull 时,git 会吐出这个错误:

当前分支没有跟踪信息。请 指定要合并的分支。请参阅 git-pull(1) 了解 详情

git pull <remote> <branch>

如果您想为此分支设置跟踪信息,您可以这样做 与:

git branch --set-upstream new origin/<branch>

我希望git pull 只更新主分支,不理会我当前的分支(无论如何它是一个标签)。这样的事情可能吗?

我需要这个的原因是我有一个自动脚本,它总是 git 拉存储库,当然由于上面的错误而失败..

【问题讨论】:

标签: git git-pull git-checkout


【解决方案1】:

您可以指定要拉取的分支:

git pull origin master

或者您可以设置它,以便您的本地主分支跟踪 github 主分支作为上游:

git branch --set-upstream-to=origin/master master
git pull

当您克隆存储库时会自动为您设置此分支跟踪(仅适用于默认分支),但如果您将远程添加到现有存储库,则必须自己设置跟踪。值得庆幸的是,git 给出的建议让你很容易记住该怎么做。

--set-upstream 显然在 git 1.9.x 中已弃用。 展望未来,你会想要使用类似

的东西
git branch -u origin/master

假设您已经签出了 master。如果不, git branch -u origin/master master 可以工作

【讨论】:

    【解决方案2】:

    如果您像我一样需要一直这样做,您可以通过将以下内容添加到您的 .gitconfig 文件中来设置一个别名来自动执行此操作:

    [alias]
        set-upstream = !git branch --set-upstream-to=origin/`git symbolic-ref --short HEAD`
    

    当您看到消息There is no tracking information... 时,只需运行git set-upstream,然后再次运行git push

    感谢https://zarino.co.uk/post/git-set-upstream/

    【讨论】:

    • 我用这个全局添加:git config --global alias.set-upstream '!git branch --set-upstream-to=origin/`git symbolic-ref --short HEAD`'
    【解决方案3】:

    此命令已弃用:git branch --set-upstream master origin/master

    所以,当尝试设置跟踪时,这是对我有用的命令:

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

    【讨论】:

      【解决方案4】:

      试试这些命令:

      git pull origin master
      git push -u origin master
      

      【讨论】:

        【解决方案5】:

        编辑:对于较新版本的 Git,--set-upstream master 已被弃用,您应该改用 --set-upstream-to

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

        按照提示,您可以运行:

        git branch --set-upstream master origin/master
        

        之后,您只需运行 git pull 即可更新您的代码。

        【讨论】:

        • 这解决了问题。但是我仍然需要了解我的主分支是如何失去对原点的引用的。我在一个分支上做了git checkout master。我不能做git pull,因为对原点的引用丢失了。现在它起作用了。谢谢!
        • 'git branch --set-upstream-to=origin/master master my_branch' 为我工作
        • 我正在尝试在一个分支上工作,我已经克隆了一个 repo,并签出了一个分支,所以我为什么要设置 --set-upstream-to=origin/master。这会将我的更改推到那里吗?为什么我不将其设置为我正在处理的 BRANCH?
        【解决方案6】:

        试试这个

        git checkout master
        
        git pull origin master
        

        【讨论】:

        • 这并不是真正回答问题。此外,虽然没有公认的答案,但投票最多的答案更适合作为这个老问题的答案
        【解决方案7】:

        您可能有多个分支。而且您当前的分支没有将其上游设置为远程。

        解决此问题的步骤:

        git checkout branch_name
        git branch --set-upstream-to=origin/remote_branch_name local_branch_name
        

        例如

        // this set upstream of local branch develop to remote branch  origin/develop,
        git branch --set-upstream-to=origin/develop develop
        

        这样做之后,当你做git pull时,它会从指定的分支拉出来。

        【讨论】:

          【解决方案8】:

          对我有用的是: git branch --set-upstream-to=origin master 当我再次拉动时,我只从主人那里得到了更新,警告就消失了。

          【讨论】:

            【解决方案9】:

            您需要为当前分支设置跟踪(上游)

            git branch --set-upstream master origin/master
            

            已弃用,您可以使用 --track 标志代替它

            git branch --track master origin/master
            

            我也喜欢@casey 注意到的文档参考:

            -u <upstream>
              Set up <branchname>'s tracking information so <upstream> is considered  
              <branchname>'s upstream branch. If no <branchname> is specified,  
              then it defaults to the current branch.
            

            【讨论】:

              【解决方案10】:

              首先,确保您在正确的分支上。
              然后(仅一次):

              git branch --track
              

              之后,这再次起作用:

              git pull
              

              【讨论】:

                【解决方案11】:

                @alesko : 结帐后不能只做git pull my_branch 只更新master 分支。
                因为git pull 也将合并到 current 分支 -> 在您的场景中合并到 my_branch

                @Simon: 这也可以推动。这是为什么呢?

                $ git branch -u origin/master
                Branch master set up to track remote branch master from origin.
                

                并根据文档:

                -u <upstream>
                  Set up <branchname>'s tracking information so <upstream> is considered  
                  <branchname>'s upstream branch. If no <branchname> is specified,  
                  then it defaults to the current branch.
                

                【讨论】:

                  【解决方案12】:

                  我遇到了同样的问题并用这个命令修复了它:

                  $ git push -u origin master
                  

                  从帮助文件中,-u 基本上设置了拉取的默认值:

                  -u, --set-upstream`
                  
                    For every branch that is up to date or successfully pushed, add 
                    upstream (tracking) reference, used by argument-less git-pull(1) and
                    other commands. For more information, see branch.<name>.merge in 
                    git-config(1).
                  

                  【讨论】:

                    【解决方案13】:

                    为了只下载更新:

                    git fetch origin master
                    

                    但是,这只是更新了一个名为 origin/master 的引用。更新本地master 的最佳方式是在另一条评论中提到的结帐/合并。 如果您可以保证您本地的master 没有偏离origin/master 所在的主干线,您可以使用git update-ref 映射您当前的@987654327 @ 到新的点,但这可能不是定期使用的最佳解决方案...

                    【讨论】:

                      【解决方案14】:

                      使用切换回主分支

                      $ git checkout master
                      

                      然后运行git pull 操作

                      $ git pull origin/master
                      

                      之后,您可以再次切换回您的my_branch

                      【讨论】:

                      • 这正是我想要避免的。我想知道是否有“官方”的方式来做到这一点。
                      猜你喜欢
                      • 2018-02-15
                      • 1970-01-01
                      • 2020-04-24
                      • 1970-01-01
                      • 2011-04-26
                      • 2017-03-28
                      • 1970-01-01
                      • 1970-01-01
                      相关资源
                      最近更新 更多