web-dev-qa-db-ja.com

git:あなたのブランチはXコミットで進んでいます

これは実際どのようにして起こるのでしょうか。

私は現時点では自分で1つのリポジトリで作業しているので、これが私のワークフローです。

  1. ファイルを変更する
  2. コミット
  3. 満足するまで1-2を繰り返す
  4. マスターにプッシュ

それで私がgit statusをするとき、それは私のブランチがXコミットによって先にあることを私に告げます(おそらく私がしたのと同じ数のコミット)。それはあなたがコードをプッシュしたときそれが実際にあなたのローカルにキャッシュされたファイル(.gitフォルダにある)を更新しないからですか? git pullはこの奇妙なメッセージを '修正'しているようですが、なぜそれが起こるのか私はまだ興味がありません。多分私はgitを間違って使っていますか?


メッセージに表示されるブランチを含む

私の地元の支店はマスターより進んでいます

現在のブランチをどこでプッシュ/プルしますか

私はGitHubを推し進めていて、その時点で作業していたコンピュータを引っ張っています。作業しているのは私だけなので、私のローカルコピーは常に完全に最新のものです。

実際にはリモートレポジトリをチェックしません

それが私が思ったことです、私はそれについての私の理解が正しいことを確かめることを考え出しました。

追加の引数を渡しますか?

私が見ることができるものではありません、多分私の最後に起こっているいくつかの面白い設定がありますか?

$ git status
# On branch master
# Your branch is ahead of 'Origin/master' by 1 commit.
#
nothing to commit (working directory clean)
337
SeanJA

git pull remote branchを実行した後にこのメッセージが表示された場合は、git fetchを付けてフォローしてください。 (オプションで、リポジトリから削除されたブランチを削除するためにgit fetch -pを実行します)

Fetchはリモートブランチのローカル表現を更新するようですが、これはgit pull remote branchを実行したときに必ずしも起こるわけではありません。

472
Rich

つかいます

git pull --rebase

--rebaseオプションは、gitがあなたのローカルコミットを脇へ移動させ、リモートと同期してから、新しい状態からあなたのコミットを適用しようとすることを意味します。

108
Marian Zburlea

これら3つの簡単なコマンドを使う

ステップ1git checkout <branch_name>

ステップ2git pull -s recursive -X theirs

ステップ3git reset --hard Origin/<branch_name>

詳細: https://stackoverflow.com/a/39698570/2439715

楽しい。

52
Abhishek Goel

私はあなたがメッセージを誤解していると思います - あなたのブランチはmasterの前にはありません、それはmasterです。これは、最後のPushpull、またはfetchからリモートリポジトリのステータスを記録するリモートトラッキングブランチであるOrigin/masterよりも先です。自分がしたことを正確に伝えています。あなたはリモコンの先を行き、それはあなたがプッシュすることを思い出させています。

49
Josh Lee

誰かがあなたがあなたのメッセージを誤読しているのかもしれないと言った、あなたはそうではありません。この問題は実際にあなたの<project>/.git/configファイルと関係があります。それはこれに似たセクションになるでしょう:

[remote "Origin"]
    url = <url>
    fetch = +refs/heads/*:refs/remotes/Origin/*

プロジェクトの.git/configファイルからフェッチ行を削除すると、 "あなたのブランチはNコミットで 'Origin/master'より先に進んでいます。発生からの迷惑。

それとも私は願っています。 :)

私は引っ張るだけです私のステージサーバーでこの問題を抱えていました。また、ハードリセットを行うと、HEADをremoteと同じにすることができました。

git reset --hard Origin/master

だから今私は再び持っています:

On branch master
Your branch is up-to-date with 'Origin/master'.
9
Anatolii Pazhyn

私の場合はそれを使ってマスターに切り替えたからです

 git checkout -B master

代わりにそれの新しいバージョンを引っ張るために

 git checkout master

最初のコマンド はマスターの頭 を私の最新のコミットにリセットします

私が使った

git reset --hard Origin/master

それを修正する

8
AxCoder

私はこのページのすべての解決策を調べましたが、幸いなことに@ anatolii-pazhynは彼の解決策がうまくいったのでコメントしました。残念ながら私は彼を支持するのに十分な評判を持っていません、しかし私は最初に彼の解決策を試すことをお勧めします:

git reset --hard Origin/master

それは私に与えた:

HEAD is now at 900000b Comment from my last git commit here

私もお勧めします:

git rev-list Origin..HEAD
# to see if the local repository is ahead, Push needed

git rev-list HEAD..Origin
# to see if the local repository is behind, pull needed

また使用することができます:

git rev-list --count --left-right Origin/master...HEAD
# if you have numbers for both, then the two repositories have diverged

最高の運

8
Ryan Erwin

私はWindowsマシンでも同じ問題を抱えていました。 git pull Origin masterコマンドを実行すると、「Xコミットにより 'Origin/master'より先に進む」という警告が表示されます。代わりにgit pull Originを実行してブランチを指定しなかった場合は、警告が表示されなくなります。

4
The Code Father

それから私がgitステータスをするとき、それは私のブランチがXのコミット(おそらく同じ数の私が作ったコミット)だけ進んでいることを私に告げます。

私の経験は、多くの支店があるチーム環境での経験です。私たちは(ローカルクローンで)私たち自身の機能ブランチで働いています、そしてそれはgit statusが私が11のコミット先であることを示したということのうちの1つでした。質問の著者のように、私の作業上の仮定は、+ 11は私自身のコミットからのものであるというものでした。

何週間も前に、私は共通のdevelopブランチから自分の機能ブランチに変更を取り入れましたが、忘れました。今日、私のローカル機能ブランチに戻ってgit pull Origin developを実行したとき、その数は+41コミットに急増しました。 developでは多くの作業が行われていたので、私のローカル機能ブランチはOriginリポジトリの機能ブランチよりさらに進んでいました。

したがって、このメッセージが表示されたら、自分がアクセスできる他のブランチ(自分の、または他のブランチ)から行った可能性のあるプル/マージについて考えてみてください。メッセージが表示されるのは、ローカルリポジトリからpullされた変更をOriginrepo( 'tracking branch')に戻して、情報を同期させるためのgit Pushです。

2
FPGA-guy

現在のブランチと現在のトラックを実行しているブランチの違いを思い出してください。メッセージに表示されているブランチや現在のブランチをどこでプッシュ/プルするかなど、詳細情報を入力してください。

2
wRAR

この質問は少し古いですが...私は同じような状況にあり、ここで私の答えは私が私が持っていたのと同じ問題を解決するのを助けました

最初にPush -fまたはforceオプションを試してください。

それでもうまくいかない場合は、(私の場合のように)リモートリポジトリ(あるいはgit remote -vに表示されるリモートリポジトリへの参照)が更新されない可能性があります。

上記のあなたのプッシュであることの結果はあなたのローカル/ブランチをあなたのリモート/ブランチと同期させました、しかしあなたのローカルレポジトリのキャッシュはまだHEADとして前のコミットを示します。

上記のクローンを確認するには、レポジトリを別の場所に複製し、local/branch HEADとremote/branch HEADを比較してみてください。両者が同じであれば、おそらく私がした問題に直面しているでしょう。

溶液:

$ git remote -v
github  [email protected]:schacon/hw.git (fetch)
github  [email protected]:schacon/hw.git (Push)
$ git remote add Origin git://github.com/pjhyett/hw.git
$ git remote -v
github  [email protected]:schacon/hw.git (fetch)
github  [email protected]:schacon/hw.git (Push)
Origin  git://github.com/pjhyett/hw.git (fetch)
Origin  git://github.com/pjhyett/hw.git (Push)
$ git remote rm Origin
$ git remote -v
github  [email protected]:schacon/hw.git (fetch)
github  [email protected]:schacon/hw.git (Push)

次のようにPush -fを行います。

git Push -f github master###あなたのコマンドにはもはやOriginがないことに注意してください!

git pullをするgit pull github master

git status受信時

# On branch master

nothing to commit (working directory clean)

ビューの数が非常に多く、このエラーを検索するとほとんどの場合このスレッドが一番上に表示されるので、これが誰かに役立つことを願います。

詳細については gitref も参照してください。

2
Vikram

私は実際にTortiseGITで切り替え/チェックアウトをしていたときにこれが起こっていました。

私の問題は、私が別のローカルブランチに基づいてブランチを作成したということでした。これは/.git/configに "merge"エントリを作成し、これは次のようになりました。

[branch "web"]
    merge = refs/heads/develop
    remote = gitserver

私が "web"ブランチに切り替えたときはいつでも、それは私が開発の前に100回以上コミットしていると私に言っていました。まあ、私はもはや開発することを約束していなかったので、それは本当でした。私は単にこのエントリを削除することができました、そしてそれは予想通りに機能しているようです。 Developブランチの背後にいることについて文句を言うのではなく、リモートのrefで適切に追跡しています。

Vikramが言ったように、このStack Overflowスレッドはこの問題を探すときにGoogleで一番の結果であるので、私は自分の状況と解決策を共有すると思いました。

2
Dustin Graham

git fetchはこれを解決します

私の理解が正しければ、あなたの地元の(キャッシュされた)Origin/masterは時代遅れです。このコマンドはサーバーからリポジトリの状態を更新します。

1
user10272064

上記の@Marian Zburliaが述べたのと同じことを繰り返したいと思います。それは私のために働いたし、他の人にも同じことを提案するでしょう。

git pull Origin develop

$ git pull --rebaseが後に続くべきです。

これにより、最後のpullの後に$ git statusに寄せられたコメントは削除されます。

1

git pullまたはgit fetchを示唆する答えは正しいです。
メッセージは、git status.git/FETCH_HEAD.git/refs/remotes/<repository>/<branch>の違いを見たときに生成されます(例:.git/refs/remotes/Origin/master)。

後者のファイルは最後のフェッチからのHEADを記録します(リポジトリ/ブランチ用)。 git fetchを実行すると、両方のファイルがブランチの現在のHEADに更新されます。
(ローカルリポジトリがすでに最新であるために)取得するものがない場合は、.git/FETCH_HEADは変わりません。

1
NoBrassRing

これは私のために働きました

git reset --hard Origin/master

出力は次のようになります。

On branch dev HEAD is now at ae1xc41z Last commit message

ブランチ内のファイルの追跡を解除するためにコミットを実行した後にこのメッセージが表示される場合は、任意のファイルに何らかの変更を加えてコミットを実行してください。どうやらあなたは以前に追跡されたファイルの追跡を取り消すことだけを含むシングルコミットをすることはできません。最後にこの記事は私が全体の問題を解決するのに役立ちました https://help.github.com/articles/removing-files-from-a-repository-s-history/ リポジトリの履歴からファイルを削除するだけです。

0
nurb