我如何在git中找到origin / master的位置,以及如何更改它?

我是Git新手。 我最近将一个Rails项目从Subversion移到了Git。 我在这里跟着教程:http://www.simplisticcomplexity.com/2008/03/05/cleanly-migrate-your-subversion-repository-to-a-git-repository/

我也使用unfuddle.com来存储我的代码。 我在列车上的Mac笔记本电脑上进行了更改,然后在使用以下命令建立网络连接时将它们推开:

git push unfuddle master

我使用Capistrano进行部署,并使用主分支从unfuddle存储库中提取代码。

最近,我在笔记本上运行“git status”时发现了以下消息:

# On branch master
# Your branch is ahead of 'origin/master' by 11 commits.
#
nothing to commit (working directory clean)

我对此感到困惑。 我认为我的笔记本电脑是原产地......但不知道我最初从Subversion提取或推到Unfuddle的事实是什么导致该消息出现。 我怎么能够:

  • 找出Git认为'起源/主人'在哪里?
  • 如果它在别的地方,我怎么把我的笔记本电脑变成'origin / master'?
  • 让这条消息消失。 这让我觉得Git对某事不满意。
  • 我的Mac正在运行Git版本1.6.0.1。


    当我按照dbr的建议运行git remote show origin ,我得到以下结果:

    ~/Projects/GeekFor/geekfor 10:47 AM $ git remote show origin
    fatal: '/Users/brian/Projects/GeekFor/gf/.git': unable to chdir or not a git archive
    fatal: The remote end hung up unexpectedly
    

    当我按照Aristotle Pagaltzis的建议运行git remote -v ,我得到以下结果:

    ~/Projects/GeekFor/geekfor 10:33 AM $ git remote -v
    origin  /Users/brian/Projects/GeekFor/gf/.git
    unfuddle    git@spilth.unfuddle.com:spilth/geekfor.git
    

    现在,有趣的是,我正在geekfor目录中处理我的项目,但它说我的起源是gf目录中的本地机器。 我相信gf是将我的项目从Subversion转换为Git时使用的临时目录,并且可能是我推动解压的地方。 然后我相信我从一堆新鲜的副本中检出了geekfor目录。

    所以看起来我应该遵循dbr的建议做:

    git remote rm origin
    git remote add origin git@spilth.unfuddle.com:spilth/geekfor.git
    

    1.找出Git认为'origin / master'正在使用git-remote

    git remote show origin
    

    ..它会返回像.. ..

    * remote origin
      URL: me@remote.example.com:~/something.git
      Remote branch merged with 'git pull' while on branch master
        master
      Tracked remote branch
        master
    

    远程基本上是到远程存储库的链接。 当你做...

    git remote add unfuddle me@unfuddle.com/myrepo.git
    git push unfuddle
    

    ..git会将更改推送到您添加的地址。 它就像一个书签,用于远程存储库。

    当你运行git status ,它会检查远程是否缺少提交(与本地存储库相比),如果是,则提交多少提交。 如果您将所有更改推送到“源”,两者都将同步,因此您不会得到该消息。

    2.如果它在别的地方,我怎么把我的笔记本电脑变成'origin / master'?

    这样做没有意义。 说“起源”更名为“笔记本电脑” - 你永远不想从你的笔记本电脑做git push laptop电脑。

    如果你想删除远程的来源,你做..

    git remote rm origin
    

    这不会删除任何东西(根据文件内容/修订历史记录)。 这将停止“你的分支在......之前”消息,因为它不再将你的存储库与远程数据库进行比较(因为它已经不存在了!)

    有一点要记住的是,没有什么特殊的origin ,它只是一个默认名称的Git使用。

    当你做git pushgit pull类的事情时,Git会默认使用origin 。 所以,如果你有一个遥控器使用了很多(在你的情况下是Unfuddle),我会建议添加unfuddle作为“原点”:

    git remote rm origin
    git remote add origin git@subdomain.unfuddle.com:subdomain/abbreviation.git
    

    或者使用set-url在一个命令中执行上述操作:

    git remote set-url origin git@subdomain.unfuddle.com:subdomain/abbreviation.git
    

    然后你可以简单地做git push或者git pull来更新,而不是git push unfuddle master


    我来到这个问题寻找一个关于什么信息“你的分支在......前面”的解释,在git的总体方案中的解释。 这里没有答案,但是因为当你搜索短语“你的分支早于'origin / master'”时,这个问题目前出现在Google的顶部,而且我已经知道了这个消息的真正含义,我想我会在这里发布信息。

    所以,作为一个git新手,我可以看到我需要的答案是一个明显的新手答案。 具体来说,“你的分支在......前面”的意思是你有一些文件你已经添加并提交到你的本地仓库,但从未推到原点。 至少对我而言,“git diff”没有显示出任何区别,这个消息的意图进一步被混淆了。 直到我运行“git diff origin / master”时才被告知我的本地存储库和远程主服务器存在差异。

    所以,要清楚:


    “你的分支在......之前” =>你需要推送给远程主人。 运行“git diff origin / master”以查看本地存储库与远程主存储库之间的区别。


    希望这有助于其他新手。

    (另外,我认识到配置的细微之处可能会使这个解决方案部分失效,例如主控制器实际上可能不是“远程”的事实,并且“起源”是可以通过约定等使用的可重新配置名称。但是新手可以不关心这种事情,我们希望得到简单而直接的答案,一旦我们解决了紧迫的问题,我们可以在稍后阅读有关细节。)

    伯爵


    我有一个类似于这个问题的地方,那就是我的工作目录在ahead of origin by X commitsahead of origin by X commits但是git pull导致了Everything up-to-date 。 我确实设法通过遵循这个建议来解决它。 我在这里发布此信息,以防其他人遇到类似问题。

    基本修正如下:

    $ git push {remote} {localbranch}:{remotebranch}
    

    括号中的单词应该用远程名称,本地分行名称和远程分行名称替换。 例如

    $ git push origin master:master
    
    链接地址: http://www.djcxy.com/p/539.html

    上一篇: How can I find the location of origin/master in git, and how do I change it?

    下一篇: “Thinking in Scala" if I have a Java/C++ background?