我如何在git中findorigin / master的位置,我该如何改变它?

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

我也使用unfuddle.com来存储我的代码。 我在列车上的Mac笔记本电脑上进行了更改,然后在使用以下命令进行networking连接时将其推送到非工作状态:

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的事实是什么导致消息出现。 我怎么能够:

  1. 找出Git认为'起源/主'的地方是什么?
  2. 如果它在别的地方,我怎么把我的笔记本电脑变成“起源/主”?
  3. 得到这个消息走开。 这让我觉得Git对某事不满意。

我的Mac正在运行Git版本1.6.0.1。


当我运行由dbrbuild议的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的build议运行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时使用的临时目录,也可能是我从其中解压的地方。 然后我相信我检查了一个新鲜的副本从unfrudle到geekfor目录。

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

 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 ,它会检查远程是否缺less提交(与本地存储库相比),如果是,则提交多less提交。 如果你把所有的改变都推给“起源”,两者都会同步,所以你不会得到这个信息。

2.如果是在别的地方,我怎么把我的笔记本电脑变成“起源/主人”?

这样做没有意义。 说“起源”被重新命名为“笔记本电脑” – 你从来不想从你的笔记本电脑做git push laptop电脑。

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

 git remote rm origin 

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

有一件事要记住的是,没有什么特别的origin ,这只是一个默认的名字git使用。

Git在默认情况下使用origin ,例如git pushgit pull 。 所以,如果你有一个遥远的地方,你会使用很多(在你的情况下,Unfuddle),我会build议添加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

我来到这个问题寻找一个解释,什么信息“你的分支前面是…”意味着,在git的总体scheme。 这里没有答案,但是因为这个问题目前显示在谷歌的顶部,当你search“你的分支领先于原点/主人”这个短语时,我已经知道这个消息的真正含义,我想我会在这里发布信息。

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

所以,要明确:


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


希望这有助于其他新手。

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

伯爵

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

基本的解决方法如下:

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

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

 $ git push origin master:master 

有时,原始主机(原始/主机)的本地caching版本和真正的原始主机之间是有区别的。

如果你运行git remote update这将重新起源与主/起源主

看到这个问题的接受答案

git pull origin master和git pull origin / master之间的区别

我以为我的笔记本电脑是起源…

这有点荒谬: origin指的是默认的远程仓库 – 通常是从其他仓库获取/拉取其他人的更改。

我怎么能够:

  1. git remote -v会显示你的origin是什么; origin/masterorigin/master master分支的最后一个已知状态的“书签”,而您自己的masterorigin/master的跟踪分支 。 这是应该的 。

  2. 你没有。 至less将存储库作为自己的默认远程存储库是没有意义的。

  3. 事实并非如此。 这只是告诉你,你已经在本地做了那么多的不在远程仓库中的提交(根据仓库的最后一个已知状态)。

[解决方法]

 $ git push origin 

^这为我解决了它。 它做了什么,它使我的主人(在笔记本电脑上)与远程服务器上的“origin”同步。

我正在努力解决这个问题,以前的答案都没有解决我所看到的问题。 我已经把问题归结为基础知识,看看我能否清楚问题。

我创build一个新的存储库(rep1),把一个文件放在里面并提交。

 mkdir rep1 cd rep1 git init echo "Line1" > README git add README git commit -m "Commit 1" 

我创build了一个rep1的克隆,并称之为rep2。 我看里面rep2,看到文件是正确的。

 cd ~ git clone ~/rep1 rep2 cat ~/rep2/README 

在rep1中,我对文件进行了一次更改并提交。 然后在rep1我创build一个远程指向rep2并推送更改。

 cd ~/rep1 <change file and commit> git remote add rep2 ~/rep2 git push rep2 master 

现在当我进入rep2并且做一个“git status”的时候,我被告知我已经领先了。

 # On branch master # Your branch is ahead of 'origin/master' by 1 commit. # # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # modified: README # 

rep2中的README与第二次提交之前的原本一样。 我做的唯一修改是rep1,我想要做的就是把它们推送到rep2。 这是什么我不抓?

它正在等待你“推”。 尝试:

$ git push

最近我有这个问题,我想这是因为我删除了一些我不需要的文件。 问题是,git不知道文件已被删除,它看到服务器仍然有它。 (服务器=原点)

所以我跑了

 git rm $(git ls-files --deleted) 

然后运行一个提交和推送。

这解决了这个问题。

我也是一个git新手。 我有同样的问题,“你的分支在N / N的提交之前”。 做build议的'git diff origin / master'确实显示了一些我并不在意的差异。 所以…

由于我的git克隆是用于托pipe的,我想要一个精确的副本repo,并不在意保留任何本地修改,所以我决定保存我的整个repo,然后创build一个新的:

(在主机上)

 mv myrepo myrepo git clone USER@MASTER_HOST:/REPO_DIR myrepo 

为了方便起见,我曾经对我的托pipe机器上的克隆进行了更改。 不再。 我会做这些变化的主人,混帐在那里,做一个混帐拉。 希望这应该让我的git克隆在主机上完全同步。

/奈良

我想知道关于我的回购的同样的事情。 在我的情况下,我有一个旧的遥控器,我没有推到了,所以我需要删除它。

获取遥控器列表:

 git remote 

删除一个你不需要的

 git remote rm {insert remote to remove} 

您可以在自己的提交之前重置为特定的提交。

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

使用git log来查找本地更改发生之前提交的提交内容。

 $ git log commit 3368e1c5b8a47135a34169c885e8dd5ba01af5bb ... commit baf8d5e7da9e41fcd37d63ae9483ee0b10bfac8e ... 

记下本地提交并直接重置到以前的提交:

 git reset --hard baf8d5e7da9e41fcd37d63ae9483ee0b10bfac8e 

我遇到了这个问题:“你的分支是由nn提交的”原点/主“。” 当我推送到远程存储库:

 git push ssh://git@xxx.repositryhosting.com/yyy/zzz.git 

当我发现我的远程地址是在文件.git / FETCH_HEAD中,并使用:

 git push 

问题消失了。