2011-05-14 11 views

答えて

155

git pullは、実際にgit fetchを実行してからgit mergeを実行するのと同じです。 git fetchは、いわゆるリモートトラッキングブランチを更新します。通常、と表示されるorigin/mastergithub/experimentなどのようなものです。これらは、git fetch(または成功した場合はgit push)のときに更新されるリモートリポジトリのブランチの状態のキャッシュのようなものです。

git fetch origin 

を...そして実行します:

だから、あなたがリモートあなたのGitHubリポジトリを参照するoriginと呼ばれ、あなたはどうなるんだと仮定し

git diff master origin/master 

を...あなたのmasterとGitHubの違いを見るためにこれらの相違がうまくいけば、git merge origin/masterとマージできます。masterが現在のブランチであるとします。

個人的には、git fetchgit mergeを別々に行うのは、一般的にはa good ideaと思います。

+0

良い説明をありがとう。 –

+2

リモートトラッキングを設定していれば、コマンドを少しシンプルにすることができます。フェッチするには 'git fetch'、違いを確認するには 'git diff .. @ {u}'です。私は原点、マスター、原点/マスターをまっすぐに保つことができないので、短いコマンドは大いに役立ちます – ChrisBob

+0

メソッドを試してみましたが、 'git diff master origin/master'とその反対の出力はありませんでしたが、' git status'では私の枝は4つのコミットによって「起源/マスター」に先んじています。何が起きていますか? – Jason

27

git diffの出力に興味がない場合は、git cherryを実行すると、リモートトラッキングブランチがローカルブランチより先にコミットのリストを出力します。例えば

git fetch origin 
git cherry master origin/master 

好きになるでしょう出力何か:

+ 2642039b1a4c4d4345a0d02f79ccc3690e19d9b1 
+ a4870f9fbde61d2d657e97b72b61f46d1fd265a9 

は私のローカルブランチにマージされていない、私のリモート追跡ブランチに2つのコミットがあることを示します。

git cherry origin/master master 

は、あなたがまだあなたのリモートリポジトリにプッシュしていないローカルコミットの一覧が表示されます:

これは、他の方法で動作します。

+1

ありがとう、ちょうど私が必要なもの。ちょうどそれを明確にする:もしgit cherryの結果が空であれば、チェリーピッキングには何もないし、私の地元のレポは最新です。 – eyecatchUp

+1

うん、それは正しいです。 – braitsch

+0

詳細オプション '-v'を使用して、コミットメッセージを表示することもできます。 例: 'git cherry -v origin/master master'が出力されます:' + 2642039b1a4c4d4345a0d02f79ccc3690e19d9b1修正バグ ' – Yoluk

4

そして、これを行うための別の有用なコマンド(gitの後にフェッチ)です:

git log origin/master ^master 

これは、原点/マスターではなく、マスターにあるコミットを示しています。 git pullを実行しているときに、コミットがリモートに送信されるかどうかを確認するために反対に行うこともできます。

関連する問題