我如何在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的事实是什么导致消息出现。 我怎么能够:
- 找出Git认为'起源/主'的地方是什么?
- 如果它在别的地方,我怎么把我的笔记本电脑变成“起源/主”?
- 得到这个消息走开。 这让我觉得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 push
或git 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
指的是默认的远程仓库 – 通常是从其他仓库获取/拉取其他人的更改。
我怎么能够:
-
git remote -v
会显示你的origin
是什么;origin/master
是origin/master
master
分支的最后一个已知状态的“书签”,而您自己的master
是origin/master
的跟踪分支 。 这是应该的 。 -
你没有。 至less将存储库作为自己的默认远程存储库是没有意义的。
-
事实并非如此。 这只是告诉你,你已经在本地做了那么多的不在远程仓库中的提交(根据仓库的最后一个已知状态)。
[解决方法]
$ 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
问题消失了。