あなたのブランチは3つのコミットで「origin / master」よりも進んでいます


354

実行すると次のようになります git status

Your branch is ahead of 'origin/master' by 3 commits.

私は他のいくつかの投稿でこれを修正する方法が実行されていることを読んgit pull --rebaseだことがありますが、正確にリベースとは何ですか?


19
これは重複しているとは思いません...この質問はそれが何を意味するのかを尋ねていますが、他の質問は変更を破棄する方法を尋ねています。
onionjake 14

11
多くの人がこれを複製としてどのようにマークしたのですか?質問は明らかにその人が自分の変更を失いたくないことを示しています。彼らは変更を加えたため、メッセージに混乱しています。いわゆる重複した質問は、その人の変更を失うことになります。
デレク・グリア

4
上記にリンクされている質問は、実際にはこの質問の複製ではないと言っておかなければなりません...
Dave Kanter

15
@DerekGreer:これはどのように重複としてマークされましたか?質問を重複としてマークするほとんどの人は実際に質問を読んで理解する気になりませんので。表面的な類似点がある場合、両者は同一であるという結論にジャンプします。OPまたはその他の場合は、最初から明白であったはずのことを慎重に繰り返すために時間をかけてもかまいません。デュープハンターは実際に注意を払うように世話をしていました。
iconoclast

6
^^^その実践はSO、IMOを殺すことです。
オタク株2017年

回答:


767

ローカルマスターに変更を加え、リモートにプッシュしなかったため、このメッセージが表示されます。これを「解決」するにはいくつかの方法があり、通常はワークフローがどのように見えるかに依存します。

  • 優れたワークフローでは、マスターのリモートコピーが優れているはずですが、マスターのローカルコピーはリモートにあるマスターのコピーにすぎません。このワークフローを使用すると、このメッセージが二度と表示されることはありません。
  • 別の方法で作業していて、ローカルの変更をプッシュする必要がある場合は、git push origin発信元がリモートであると想定するだけです
  • ローカルの変更が悪い場合は、それらを削除するか、ローカルマスターをリモートの状態にリセットします git reset --hard origin/master

82
git reset --hard origin / masterはまさに私が探していたものです。ありがとう。
FluxEngine 2013

4
@iberbeuあなたは私の一日を解決しました... git reset --hard origin / masterは私が探しているものです。+1済み
Ravi

75
また、削除する変更を確認するためにfwiw git diff master origin/master(つまりgit diff local remote
Shanimal '10 / 07/14

1
私はリモートのオリジン/ブランチにローカル/マスターを持っているので、git push origin master:branchwhich を使用してreturnを返しEverything up-to-dateました。
fyrye 2014

2
最後の1つで、必要なものを手に入れました!
RyanG 2015年

38

修正するものはありません。あなたは単に3つのコミットを行い、それらをまだリモートブランチに移動していません。目的に応じて、いくつかのオプションがあります。

  • git push:変更をリモートに移動します(すでにリモートに他の変更がある場合、拒否される可能性があります)
  • 何もせずにコーディングを続け、別の日に同期する
  • git pull:変更がある場合はリモートから取得し、変更にマージします
  • git pull --rebase:上記と同じですが、リモートの変更に加えてコミットをやり直してください

あなたは古典的な状況にあります(通常、ほとんどのワークフローではマスターに多くのことをコミットしません)。これが私が通常行うことです:変更を確認します。たぶんgit rebase --interactiveそれらにいくつかの化粧品をするためにa をし、吸うものを落とし、それらをより論理的にするためにそれらを並べ替えます。次に、でリモートに移動しますgit push。ローカルブランチが最新ではないためにこれが拒否された場合:git pull --rebase最新の変更に加えて作業をやり直すgit push


私はgit pull --rebaseを使用しましたが、コミットが1つ進んでいると表示されます
FluxEngine

だから私は変更を加えてマスターにプッシュし、それから私たちのチームリーダーがマスターにマージされました。つまり、変更は現在のマスターと同期する必要があるだけです。
FluxEngine 2013

@MartyMcFlyここで何が起こっているのかを理解するのは難しい。もう押したって?では、なぜまだマスターにないコミットをするのですか?どういう意味your team lead merged to masterですか?もうマスターにプッシュしたって言わなかったの?追加のコミットには何が含まれていますか?試してみてくださいgit diff origin/masterリモートからどのようにあなたのローカルブランチが異なるを参照してください。
pmr 2013

1
助けてくれてありがとう、私が状況を説明するのに悪い仕事をしたなら申し訳ありません。しかし、私が探していたのはgit reset --hard origin / masterです。しかし、あなたの答えは役に立ちました+1。
FluxEngine 2013

私は岩と難しい場所の間に立ち往生しているようです。変更をコミットしようとしましたが、Gitは言った:あなたは11のコミットを先にしています。リモートリポジトリの更新は許可されていないため、プッシュはできません。「git pull」は言う:すでに最新です。だから私はあなたの3番目の提案を試しましたが、それからgitは言います:リベースでプルすることはできません:ステージングされていない変更があります。コミットまたは隠してください。ああ、それが私が最初にここに来た方法です:-(
Sander de Jong

36

これらの4つの簡単なコマンドを使用する

ステップ1git checkout <branch_name>

これはそのブランチに入るのは明らかです。

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

リモートブランチの変更を取り、競合が発生した場合は変更に置き換えます。ここで行うgit statusと、このような結果が得られます。ブランチは、3つのコミットによって「origin / master」よりも進んでいます。

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

ステップ4git fetch

ブランチをハードリセットします。

楽しい。


17

Bitbucketのプルリクエストをマージした後、この問題が発生しました。

しなければならなかった

git fetch

それだけでした。


2
バンドルからリポジトリを操作していて、現在のバンドルに「git fetch」を適用することでメッセージを取り除くことができました。tnx!
Martin Meeser 2017

読み取り専用のチェックアウトで、私のgitステータスは私が2コミット先であることを示し、ログは本来の状態に見えました-すべてのコミットはオリジンにあります。私はGitプルを行い、5コミット先でした。WTF???? ローカルインデックスを更新するためにフェッチする必要があるだけです...すべて良好です:)
Chris Rutledge

12

通常、マスターと異なるコミットを確認する必要がある場合:

git rebase -i origin/master

このようにして、コミットを確認し、削除するか選択するかを決定できます...


ここまでずっとこの低い答えは私がする必要があったことでした。違いを見つける方法がわかりませんでしたgit diff ...。また、さまざまな魔術師はすべてうまくいきません。私がこれをしたとき、それは私noopに唯一のコミットとして与えました、そして私がそれを受け入れたとき、今私のブランチはorigin / masterと同期しています。したがって、origin / masterからのコミットの差分は事実上何もなかったようです。
フィロヴィヴェロ

11

からのこのメッセージgitは、ローカルリポジトリで3つのコミットを行い、それらをmasterリポジトリに公開していないことを意味します。そのために実行するコマンドはgit push {local branch name} {remote branch name}です。

コマンドgit pull(およびgit pull --rebase)は、リモートリポジトリにコミットがあり、ローカルリポジトリにない場合のその他の状況用です。--rebaseオプション手段gitその後、あなたの地元の脇にコミット移動する、リモートリポジトリとの同期、およびあなたの三つの新しい状態からコミット適用してみてください。競合がある場合は失敗する可能性がありますが、それらを解決するように求められます。rebaseを使用して競合を解決する方法がわからない場合は、を中止して、を実行するgit rebase --abort前の状態に戻すこともできますgit pull --rebase


7

あなたのgitがあなたが先にコミットしていると言ったら、最初に、

git push origin

uが最新の作業をすべてリポジトリにプッシュしたことを確認するには

そして、

git reset --hard origin / master

リセットしてリポジトリと一致させるには


4

これは、Bitbucketのプルリクエストをマージした後で一度起こりました。

私はしなければならなかった:

git fetch

私の問題は解決しました。これが役に立てば幸いです!!!


0
$ git fetch

  - remote: Enumerating objects: 3, done.
  - remote: Counting objects: 100% (3/3), done.
  - remote: Compressing objects: 100% (3/3), done.
  - remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0


$ git pull 

   - Already up to date!
   - Merge made by the 'recursive' strategy.

最終的に:

$ git push origin
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.