我是一个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进行部署,并使用master分支从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认为'起源/主人'的位置?
如果它在其他地方,我如何将我的笔记本电脑变成'原产地/主人'?
得到这条消息就消失了.这让我觉得Git对某事不满意.
我的mac正在运行Git版本1.6.0.1.
当我git remote show origin
按照dbr的建议运行时,我得到以下内容:
~/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
当我git remote -v
按照Aristotle Pagaltzis的建议跑步时,我得到以下信息:
~/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时使用的临时目录,也可能是我推动它解开的地方.然后我相信我检查了从unfuddle到geekfor
目录的新副本.
所以看起来我应该遵循dbr的建议并做:
git remote rm origin git remote add origin git@spilth.unfuddle.com:spilth/geekfor.git
Earl Jenkins.. 285
我来到这个问题寻找关于"你的分支在......前面"的信息的解释,意思是,在git的一般方案中.这里没有答案,但是当你搜索"你的分支领先于'origin/master'"这个短语时,这个问题目前显示在谷歌的顶端,我已经弄明白了这个消息的真正含义,我以为我会在这里发布信息.
所以,作为一个git新手,我可以看到我需要的答案是一个明显的新手答案.具体来说,"你的分支在......前面"的短语意味着你已经添加并提交到本地存储库的文件,但从未推送到原点.这个消息的意图进一步模糊了这样一个事实:"git diff",至少对我而言,没有显示出任何差异.直到我运行"git diff origin/master"时才被告知我的本地存储库和远程主服务器之间存在差异.
所以,要明确:
"你的分支领先于......" =>你需要推送到远程主机.运行"git diff origin/master"以查看本地存储库与远程主存储库之间的差异.
希望这有助于其他新手.
(另外,我认识到存在可能部分地使该解决方案无效的配置细微之处,例如主设备实际上可能不是"远程"的事实,并且"origin"是约定所使用的可重新配置的名称等.但是新手做的不关心那种事情.我们想要简单明了的答案.一旦我们解决了紧迫的问题,我们可以稍后阅读细微之处.)
伯爵
我来到这个问题寻找关于"你的分支在......前面"的信息的解释,意思是,在git的一般方案中.这里没有答案,但是当你搜索"你的分支领先于'origin/master'"这个短语时,这个问题目前显示在谷歌的顶端,我已经弄明白了这个消息的真正含义,我以为我会在这里发布信息.
所以,作为一个git新手,我可以看到我需要的答案是一个明显的新手答案.具体来说,"你的分支在......前面"的短语意味着你已经添加并提交到本地存储库的文件,但从未推送到原点.这个消息的意图进一步模糊了这样一个事实:"git diff",至少对我而言,没有显示出任何差异.直到我运行"git diff origin/master"时才被告知我的本地存储库和远程主服务器之间存在差异.
所以,要明确:
"你的分支领先于......" =>你需要推送到远程主机.运行"git diff origin/master"以查看本地存储库与远程主存储库之间的差异.
希望这有助于其他新手.
(另外,我认识到存在可能部分地使该解决方案无效的配置细微之处,例如主设备实际上可能不是"远程"的事实,并且"origin"是约定所使用的可重新配置的名称等.但是新手做的不关心那种事情.我们想要简单明了的答案.一旦我们解决了紧迫的问题,我们可以稍后阅读细微之处.)
伯爵
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
,它会检查远程是否缺少提交(与本地存储库相比),如果是,则检查提交的数量.如果您将所有更改推送到"origin",则两者都将同步,因此您将不会收到该消息.
2.
如果它在其他地方,我如何将我的笔记本电脑变成'原产地/主人'?
这样做没有意义.说"起源"被重命名为"笔记本电脑" - 你永远不想用git push laptop
你的笔记本电脑做.
如果你想删除原始遥控器,你可以..
git remote rm origin
这不会删除任何内容(就文件内容/修订历史而言).这将停止"你的分支正前方......"消息,因为它将不再将你的存储库与遥控器进行比较(因为它已经消失了!)
要记住的一件事是没有什么特别之处origin
,它只是git使用的默认名称.
origin
当你做像git push
或做的事情时,Git 默认使用git pull
.所以,如果你有一个遥控器,你会使用很多(在你的情况下是Unfuddle),我建议你将unfuddle添加为"origin":
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
我有一个类似于我的工作目录的问题,ahead of origin by X commits
但git pull
结果是Everything up-to-date
.我确实通过遵循这个建议来解决它.我在这里张贴这个,以防它有其他类似问题.
基本修复如下:
$ git push {remote} {localbranch}:{remotebranch}
括号中的单词应替换为您的远程名称,本地分支名称和远程分支名称.例如
$ git push origin master:master
有时原始主文件(origin/master)的本地缓存版本与真正的原始主文件之间存在差异.
如果你运行git remote update
它将使用origin/master重新同步源master
看到这个问题的公认答案
git pull origin master和git pull origin/master之间的差异
我以为我的笔记本电脑是起源......
这有点荒谬:origin
指的是默认的远程存储库 - 您通常从其中获取/拉取其他人的更改.
我怎么能够:
git remote -v
会告诉你什么origin
是; origin/master
是你的"书签",为最后已知状态master
的分支origin
库,和你自己master
是一个跟踪分支的origin/master
.这应该是应有的.
你没有.至少将存储库作为自身的默认远程存储库是没有意义的.
事实并非如此.它只是告诉你,你已经在本地进行了那么多的提交,这些提交不在远程存储库中(根据该存储库的最后已知状态).