これは実際どのようにして起こるのでしょうか。
私は現時点では自分で1つのリポジトリで作業しているので、これが私のワークフローです。
それで私が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)
git pull remote branch
を実行した後にこのメッセージが表示された場合は、git fetch
を付けてフォローしてください。 (オプションで、リポジトリから削除されたブランチを削除するためにgit fetch -p
を実行します)
Fetchはリモートブランチのローカル表現を更新するようですが、これはgit pull remote branch
を実行したときに必ずしも起こるわけではありません。
つかいます
git pull --rebase
--rebaseオプションは、gitがあなたのローカルコミットを脇へ移動させ、リモートと同期してから、新しい状態からあなたのコミットを適用しようとすることを意味します。
ステップ1:git checkout <branch_name>
ステップ2:git pull -s recursive -X theirs
ステップ3:git reset --hard Origin/<branch_name>
詳細: https://stackoverflow.com/a/39698570/2439715
楽しい。
私はあなたがメッセージを誤解していると思います - あなたのブランチはmaster
の前にはありません、それははmaster
です。これは、最後のPush
、pull
、またはfetch
からリモートリポジトリのステータスを記録するリモートトラッキングブランチであるOrigin/master
よりも先です。自分がしたことを正確に伝えています。あなたはリモコンの先を行き、それはあなたがプッシュすることを思い出させています。
誰かがあなたがあなたのメッセージを誤読しているのかもしれないと言った、あなたはそうではありません。この問題は実際にあなたの<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'.
私の場合はそれを使ってマスターに切り替えたからです
git checkout -B master
代わりにそれの新しいバージョンを引っ張るために
git checkout master
最初のコマンド はマスターの頭 を私の最新のコミットにリセットします
私が使った
git reset --hard Origin/master
それを修正する
私はこのページのすべての解決策を調べましたが、幸いなことに@ 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
最高の運
私はWindowsマシンでも同じ問題を抱えていました。 git pull Origin master
コマンドを実行すると、「Xコミットにより 'Origin/master'より先に進む」という警告が表示されます。代わりにgit pull Origin
を実行してブランチを指定しなかった場合は、警告が表示されなくなります。
それから私がgitステータスをするとき、それは私のブランチがXのコミット(おそらく同じ数の私が作ったコミット)だけ進んでいることを私に告げます。
私の経験は、多くの支店があるチーム環境での経験です。私たちは(ローカルクローンで)私たち自身の機能ブランチで働いています、そしてそれはgit status
が私が11のコミット先であることを示したということのうちの1つでした。質問の著者のように、私の作業上の仮定は、+ 11は私自身のコミットからのものであるというものでした。
何週間も前に、私は共通のdevelop
ブランチから自分の機能ブランチに変更を取り入れましたが、忘れました。今日、私のローカル機能ブランチに戻ってgit pull Origin develop
を実行したとき、その数は+41コミットに急増しました。 develop
では多くの作業が行われていたので、私のローカル機能ブランチはOrigin
リポジトリの機能ブランチよりさらに進んでいました。
したがって、このメッセージが表示されたら、自分がアクセスできる他のブランチ(自分の、または他のブランチ)から行った可能性のあるプル/マージについて考えてみてください。メッセージが表示されるのは、ローカルリポジトリからpull
された変更をOrigin
repo( 'tracking branch')に戻して、情報を同期させるためのgit Push
です。
現在のブランチと現在のトラックを実行しているブランチの違いを思い出してください。メッセージに表示されているブランチや現在のブランチをどこでプッシュ/プルするかなど、詳細情報を入力してください。
この質問は少し古いですが...私は同じような状況にあり、ここで私の答えは私が私が持っていたのと同じ問題を解決するのを助けました
最初に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 も参照してください。
私は実際にTortiseGITで切り替え/チェックアウトをしていたときにこれが起こっていました。
私の問題は、私が別のローカルブランチに基づいてブランチを作成したということでした。これは/.git/config
に "merge"エントリを作成し、これは次のようになりました。
[branch "web"]
merge = refs/heads/develop
remote = gitserver
私が "web"ブランチに切り替えたときはいつでも、それは私が開発の前に100回以上コミットしていると私に言っていました。まあ、私はもはや開発することを約束していなかったので、それは本当でした。私は単にこのエントリを削除することができました、そしてそれは予想通りに機能しているようです。 Developブランチの背後にいることについて文句を言うのではなく、リモートのrefで適切に追跡しています。
Vikramが言ったように、このStack Overflowスレッドはこの問題を探すときにGoogleで一番の結果であるので、私は自分の状況と解決策を共有すると思いました。
git fetch
はこれを解決します
私の理解が正しければ、あなたの地元の(キャッシュされた)Origin/master
は時代遅れです。このコマンドはサーバーからリポジトリの状態を更新します。
上記の@Marian Zburliaが述べたのと同じことを繰り返したいと思います。それは私のために働いたし、他の人にも同じことを提案するでしょう。
git pull Origin develop
$ git pull --rebase
が後に続くべきです。
これにより、最後のpullの後に$ git status
に寄せられたコメントは削除されます。
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
は変わりません。
これは私のために働きました
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/ リポジトリの履歴からファイルを削除するだけです。