我是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,这是导致消息显示的原因。我怎么能:

  1. 找出Git认为'origin / master'在哪里?
  2. 如果它在其他地方,我如何将笔记本电脑变成'origin / master'?
  3. 获取此消息即可消失。这让我觉得Git对某事不满意。
  4. 我的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时可能使用的临时目录,也可能是我推动它解开的地方。然后我相信我从unfuddle检查了一个新的副本到 geekfor 目录。

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

    git remote rm origin
    git remote add origin git@spilth.unfuddle.com:spilth/geekfor.git
    
有帮助吗?

解决方案

  

1。找出Git认为'origin / master'正在使用的地方 <代码> GIT中的远程

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'?

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

如果要删除原始遥控器,请执行..

git remote rm origin

这不会删除任何内容(就文件内容/修订历史而言)。这将阻止“你的分支领先于......”。消息,因为它将不再将您的存储库与远程数据库进行比较(因为它已经消失!)

要记住的一件事是 origin 没有什么特别之处,它只是git使用的默认名称。

当您执行 git push git pull 之类的操作时,Git默认使用 origin 。所以,如果你有一个遥控器,你使用了很多(在你的情况下是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

其他提示

我来到这个问题寻找关于“你的分支在前面......”的消息的解释。意思是,在git的一般方案中。这里没有答案,但是当你搜索“你的分支超前于'origin / master'”这一短语时,这个问题目前显示在谷歌的顶部,我已经弄明白了这个消息真的意思是,我以为我会在这里发布信息。

所以,作为一个git新手,我可以看到我需要的答案是一个明显的新手答案。具体来说,“你的分支在......前面”是什么。短语意味着您已添加并提交到本地存储库的文件,但从未推送到原点。该消息的意图进一步被“git diff”(至少对我来说)显示没有差异这一事实所模糊。直到我跑“git diff origin / master”才开始。我被告知我的本地存储库和远程主服务器之间存在差异。

所以,要明确:


“您的分支领先于......” =&gt;您需要推送到远程主站。运行&quot; git diff origin / master&quot; 以查看本地存储库与远程主存储库之间的差异。


希望这有助于其他新手。

(另外,我认识到存在可能部分地使该解决方案无效的配置细微之处,例如主设备实际上可能不是“远程”的事实,并且“origin”是约定使用的可重新配置的名称,但是新手并不关心那种事情。我们想要简单明了的答案。一旦我们解决了紧迫的问题,我们可以稍后阅读细微之处。)

厄尔

我遇到的问题类似于我的工作目录提交之前的,但是 git pull 导致所有内容 - 最新。我确实设法通过这个建议来修复它。我在这里发帖,以防其他人遇到类似问题。

基本修复如下:

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

括号中的单词应替换为您的远程名称,本地分支名称和远程分支名称。 e.g。

$ git push origin master:master

有时原始主文件(origin / master)的本地缓存版本与真正的原始主文件之间存在差异。

如果你运行 git remote update ,这将使用origin / master重新启动origin master

查看此问题的已接受答案

git pull origin master&amp; git pull origin / master

  

我以为我的笔记本电脑是原产地......

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

  

我怎么能:

  1. git remote -v 将显示 origin 是什么; origin / master origin 存储库的 master 分支的最后已知状态的“书签”,以及您自己的 master origin / master 跟踪分支这就是应该的全部内容

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

  3. 事实并非如此。它只是告诉你,你已经在本地进行了那么多的提交,这些提交不在远程存储库中(根据该存储库的最新已知状态)。

[解决方案]

$ git push origin

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

我正在努力解决这个问题,之前的答案都没有解决我所看到的问题。我已经把这个问题简化为基础知识,看看我是否可以解决问题。

我创建了一个新的存储库(rep1),在其中放入一个文件并提交它。

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

我创建了rep1的克隆并将其命名为rep2。我查看rep2内部,看文件是否正确。

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

在rep1中,我对文件进行了一次更改并提交了它。然后在rep1中创建一个指向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不知道文件已被删除,并且它看到服务器仍然拥有它。 (server = origin)

所以我跑了

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

然后运行提交并推送。

解决了这个问题。

我也是一个git新手。我遇到了同样的问题,'你的分支是在原始/主要由N提交'消息。做建议的'git diff origin / master'确实显示了一些我不想保留的差异。所以...

由于我的git克隆用于托管,并且我想要一个主要仓库的精确副本,并且不关心保留任何本地更改,我决定保存我的整个仓库,并创建一个新的:

(在主机上)

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

为了方便起见,我曾经在我的主机上对克隆进行了更改。不再。我将对master进行更改,git在那里进行修改,并执行git pull。希望这应该让我的git clone在主机上完全同步。

/奈良

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

获取遥控器列表:

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提交的'origin / master'之前。”当我用:

推送到远程存储库时
git push ssh://git@xxx.repositryhosting.com/yyy/zzz.git

当我发现我的远程地址位于.git / FETCH_HEAD文件中并使用时:

git push
问题消失了。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top