23

まず、似たような言葉の質問がいくつかあることを知っています。

それらのどれも(AFAICT)、この質問の私のバージョンに一致する答えはありません。

私の状況は次のとおりです。

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

既存の質問では、受け入れられ、支持された回答は、文字通りそれが言うことを意味することにほとんど同意しています...私は先に進んでおり、新しいコミットをオリジン/マスターにプッシュする必要があります。

私のローカルmasterブランチはリモートの背後にあり、実際にはローカルで作業を行う前origin/masterに必要であるという逆の状況が当てはまることを私は知っています。git pull origin master(またはおそらくただgit fetch origin?)

Your branch is ahead of 'origin/master' by 857 commits.私の質問は...メッセージが文字通り意味をなすように表現される理由はありますか?

現時点で私が理解している方法は、メッセージの意味とは反対であるためです(「私のブランチ」はオリジン/マスターの後ろにあります)。

それとも、「リモート マスター ブランチの HEAD が、ローカルのオリジン/マスター トラッキング ブランチより先にある」という意味ですか?

update FWIW 私は半ダースの他の開発者のチームで働いています。私たちは皆、プル、コミット、プッシュなどを 1 日に何度も問題なく行っています。ここにバグはありません...なぜGitがそのメッセージをこのように表現するのかを理解しようとしているだけです-表現自体が不適切に選択されているのか、それともGitの基本的な概念がこのように表現する原因となっているのかそして、私は正しく理解していません。

詳細
は、ここからの出力の関連部分であると私が推測するものですgit config -l

remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
remote.origin.url=https://code.google.com/a/google.com/p/xxxxx/
branch.master.remote=origin
branch.master.merge=refs/heads/master
branch.master.mergeoptions=--no-ff
4

5 に答える 5

27

あなたはこれを考えすぎています。メッセージは、リモコンが遅れていることを示していません。これは、ローカルリポジトリの「origin/master」に対する記録されたコミットがであると言っています。そのメッセージを生成するどの時点でも、gitはリモートと通信しませんでした。.gitディレクトリを調べて、.の内容を返しました.git/refs/remotes/origin/master。自分で試してみてください。これらのコマンドは両方とも、リポジトリのトップレベルから同じものを返す必要があります。

cat .git/refs/remotes/origin/master
git rev-parse origin/master

2番目のコマンドは、「origin/master」ポインターを見つけるための単純な配管コマンドです。'origin / master'を任意のブランチに置き換えて、そのブランチの最新のコミットを取得できます。

そのメッセージは、ローカルの「マスター」が857のコミットによって「gitrev-parseorigin/master」によって返されるコミットよりも進んでいることを示しています。この状況はどのようにして発生しましたか?正確には言えませんが、誤って別のブランチを「マスター」にマージすることにかなりのお金をかけます。私がこの問題を見るたびに、それはユーザーエラーからの悪いマージです。

まず、git fetch origin「origin/master」ポインタが最新であることを確認するために発行します。次に、あなたのを研究しますgit log。あなたが期待していない最近のものを探してください。tigのようなプログラムをダウンロードするかgitk、コミット履歴の視覚的なグラフを取得するために使用します。git pull stable「マスター」をチェックアウトしているときに誤って発行したのは良い賭けです。または同様のもの。

于 2012-06-14T15:19:49.037 に答える
5

git rebase -p

First, rewinding head to replay your work on top of it...再生する作業がないため、設定は完了です。

于 2013-02-05T20:14:22.533 に答える
1

最後に、問題を修正するための質問の実際の 解決策:

マージ後に git push が必要だったためです。これは私にも起こりました、同じエラーメッセージです。Andy magoon も正しかったです。なぜなら、私がプッシュを行ったとき、バイトがプッシュされていない白紙の状態になっているからです。ただし、通常、リベースは最適な方法ではありません。

    $ git status ./
On branch master-blah1
Your branch is ahead of 'origin/master-blah1' by 869 commits.
  (use "git push" to publish your local commits)
nothing to commit, working directory clean


    $ git push
    Counting objects: 7, done.
    Delta compression using up to 48 threads.
    Compressing objects: 100% (7/7), done.
    Writing objects: 100% (7/7), 653 bytes | 0 bytes/s, done.
    Total 7 (delta 4), reused 0 (delta 0)

$ git status ./
On branch master-blah1
Your branch is up-to-date with 'origin/master-blah1'.
nothing to commit, working directory clean
于 2016-05-21T18:46:56.863 に答える