233

私はGit初心者です。最近、Rails プロジェクトを Subversion から Git に移動しました。ここのチュートリアルに従いました: http://www.simplisticcomplexity.com/2008/03/05/cleanly-migrate-your-subversion-repository-to-a-git-repository/

また、unfuddle.com を使用してコードを保存しています。通勤電車の中で Mac ラップトップに変更を加えてから、次のコマンドを使用して、ネットワークに接続しているときにそれらを unfuddle にプッシュします。

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 を実行しています。


git remote show origindbr の提案に従って実行すると、次のようになります。

~/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 -vAristotle 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 をプッシュした場所だったと思います。次に、 unfuddle からgeekforディレクトリに新しいコピーをチェックアウトしたと思います。

したがって、dbrのアドバイスに従って次のことを行う必要があるようです。

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

13 に答える 13

285

gitの一般的なスキームで、「あなたのブランチは...」というメッセージが何を意味するかについての説明を探して、この質問に来ました。ここには答えがありませんでしたが、現在、この質問は「Your branch is ahead of 'origin/master'」というフレーズを検索すると Google の上部に表示されるため、メッセージが実際に何を意味するのかを理解しました。 、ここに情報を投稿すると思いました。

したがって、git の初心者として、私が必要としていた答えは明らかに初心者の答えであることがわかります。具体的には、「your branch is ahead by...」というフレーズが意味するのは、ローカル リポジトリに追加してコミットしたものの、オリジンにはプッシュしていないファイルがあることです。このメッセージの意図は、少なくとも私にとっては、「git diff」が違いを示さなかったという事実によってさらに難読化されています。"git diff origin/master" を実行するまで、ローカル リポジトリとリモート マスターに違いがあると言われました。

したがって、明確にするために:


"your branch is ahead by..." => リモート マスターにプッシュする必要があります。「git diff origin/master」を実行して、ローカル リポジトリとリモート マスター リポジトリの違いを確認します。


これが他の初心者に役立つことを願っています。

(また、マスターが実際には「リモート」ではない可能性があり、「オリジン」は慣例で使用される再構成可能な名前であるなど、このソリューションを部分的に無効にする可能性のある構成の微妙な点があることも認識しています。しかし、初心者はそうします私たちは単純明快な答えを望んでいます.差し迫った問題を解決した後で微妙な点について読むことができます.)

伯爵

于 2010-04-06T17:00:57.487 に答える
214

1.Git が「オリジン/マスター」が使用していると考えている場所を調べる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.他の場所にある場合、ラップトップを「オリジン/マスター」にするにはどうすればよいですか?

これを行う意味はありません。「origin」の名前が「laptop」に変更されたとしgit push laptopます。ラップトップからは絶対にやりたくありません。

元のリモートを削除する場合は、..

git remote rm origin

これは何も削除しません(ファイルコンテンツ/リビジョン履歴に関して)。これにより、リポジトリがリモートと比較されなくなるため、「your branch is ahead by..」というメッセージが表示されなくなります (存在しないためです!)。

覚えておくべきことの 1 つは、 には特別なことはなくorigin、git が使用するデフォルトの名前にすぎないということです。

originのようなことをするとき、Git はデフォルトで使用します。したがって、よく使うリモコン (あなたの場合は Unfuddle) がある場合は、unfuddle を「origin」として追加することをお勧めします。git pushgit pull

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

または、set-url を使用して 1 つのコマンドで上記を実行します。

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

git push次に、代わりにorgit pullを実行するだけで更新できますgit push unfuddle master

于 2008-11-10T06:16:45.063 に答える
39

ahead of origin by X commits作業ディレクトリがあった場合と同様の問題が発生しましたが、git pull結果としてEverything up-to-date私はこのアドバイスに従ってそれを修正することができました。同様の問題を抱えている他の人に役立つ場合に備えて、ここに投稿します。

基本的な修正は次のとおりです。

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

括弧内の単語をリモート名、ローカルブランチ名、およびリモートブランチ名に置き換える必要がある場合。例えば

$ git push origin master:master
于 2011-03-30T01:02:42.803 に答える
24

オリジン マスターのローカル キャッシュ バージョン (オリジン/マスター) と真のオリジン マスターとの間に違いがある場合があります。

これを実行するgit remote updateと、オリジンマスターがオリジン/マスターと再同期されます

この質問に対する受け入れられた回答を参照してください

git pull origin master と git pull origin/master の違い

于 2012-06-08T12:47:06.160 に答える
10

私のラップトップが起源だと思っていました…</p>

それはちょっと無意味です:originデフォルトのリモートリポジトリを指します – 通常、他の人の変更をフェッチ/プルするものです.

どうやって:

  1. git remote -voriginがあるかを示します。は、リポジトリのブランチのorigin/master最後の既知の状態の「ブックマーク」であり、独自のは の追跡ブランチです。これですべてです。masteroriginmasterorigin/master

  2. あなたはそうしない。少なくとも、リポジトリがそれ自体のデフォルトのリモート リポジトリであることは意味がありません。

  3. そうではありません。これは、(そのリポジトリの最新の既知の状態によると) リモート リポジトリにないローカルで非常に多くのコミットを行ったことを示しているだけです。

于 2008-11-10T05:09:59.317 に答える
3

[ 解決 ]

$ git push origin

^これで解決しました。それが何をしたか、それは私のマスター(ラップトップ上)をリモートサーバー上の「オリジン」と同期させました。

于 2011-06-01T19:28:24.857 に答える
1

私はこの問題に苦しんでいます、そして、私がそれを見るように、前の答えのどれも質問に取り組みません。問題を基本に戻し、問題を明確にできるかどうかを確認しました。

新しいリポジトリ(rep1)を作成し、その中に1つのファイルを入れて、コミットします。

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では、ファイルに1つの変更を加えて、コミットします。次に、rep1で、rep2を指すリモートを作成し、変更をプッシュします。

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

rep2に移動して「gitstatus」を実行すると、元の場所より進んでいると言われます。

# 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のREA​​DMEは、2回目のコミット前の元の状態です。私が行った唯一の変更はrep1に対するものであり、私がやりたかったのはそれらをrep2にプッシュすることだけでした。私が把握していないのは何ですか?

于 2010-07-29T18:10:13.527 に答える
1

あなたの「押し」を待っています。試す:

$ git push

于 2011-04-20T03:03:51.777 に答える
1

私もgit初心者です。「あなたのブランチはオリジン/マスターよりも N コミット進んでいます」というメッセージで同じ問題がありました。提案された「git diff origin/master」を実行すると、保持する必要のないいくつかの差分が表示されました。そう ...

私の git クローンはホスティング用であり、マスター リポジトリの正確なコピーが必要で、ローカルの変更を保持する必要がなかったため、リポジトリ全体を保存して新しいリポジトリを作成することにしました。

(ホスティング マシン上)

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

便宜上、以前はホスティング マシン上のクローンに変更を加えていました。もういや。これらの変更をマスターに加え、そこで git commit し、git pull を実行します。うまくいけば、これにより、ホスティング マシン上の私の git クローンが完全に同期されるはずです。

/奈良

于 2012-01-03T23:17:21.257 に答える
1

最近この問題が発生しましたが、不要になったファイルをいくつか削除したことが原因であると考えました。問題は、ファイルが削除されたことを git が認識せず、サーバーがまだファイルを持っていることを認識していることです。(サーバー = オリジン)

だから私は走った

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

そして、コミットとプッシュを実行しました。

これで問題は解決しました。

于 2011-07-25T22:22:19.877 に答える
0

私は自分のレポについて同じことを考えていました。私の場合、もうプッシュしていない古いリモコンがあったので、それを削除する必要がありました。

リモートのリストを取得します。

git remote

必要のないものを削除します

git remote rm {insert remote to remove}
于 2011-06-10T00:07:17.787 に答える
0

自分のコミットが行われる前に、特定のコミットにリセットすることができます。

$ 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
于 2011-08-23T15:24:19.233 に答える
-1

「あなたのブランチは 'origin/master' よりも nn コミット進んでいます」という問題がありました。リモートリポジトリにプッシュしたとき:

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

リモートアドレスがファイル .git/FETCH_HEAD にあり、次を使用したことがわかったとき:

git push

問題は消えました。

于 2012-01-17T11:48:34.007 に答える