2011-09-27 3 views
7

私は検索して、この質問に答えが見つかりませんでした。Git - 最初にフェッチしないでローカルとリモートを比較しますか?

私はHerokuで動作しているアプリを持っています。私のローカルマシンから 私は一般的に実装し、ちょうど:

git add . 
git commit -m "whatever change, I know I can add and commit at the same time..." 
git push <the-heroku-repo> 

そして、それが上がるとHerokuのアプリでマスターブランチが更新されます。ここまでは順調ですね。

今すぐ。私は、Herokuのレポから自動的にプルを作り、それを更新する別のマシンを持っていたいと思います。

git clone <the-heroku-repo> 

私のアプリを取得することを、私はこれでGitの設定を見ることができます:私はちょうどプルを行うことができます。この新しいリポジトリを更新するには

core.repositoryformatversion=0 
core.filemode=true 
core.bare=false 
core.logallrefupdates=true 
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/* 
[email protected]:theapp.git 
branch.master.remote=origin 
branch.master.merge=refs/heads/master 

だから私はしていることをやります:

git pull origin 

または私はフェッチとマージできます。

上記の間
git fetch origin 
git merge origin/master 

私の質問

私がやって変更何であるかを確認することができフェッチやマージ:

git log -p master..origin/master 

は、ローカルのmasterブランチと最新の違いを見つける方法はあります前のバージョンを取得せずに遠隔のHerokuレポのバージョン?ローカルとリモートを比較し、変更を確認するだけです。私はちょうど正しい方法を見つけることができません。

ありがとうございました。

+0

フェッチせずに、リモートのリポジトリからの更新を知ることはできません –

+0

'git log'の前に' git fetch origin'を実行することに問題がありますか? –

+0

おそらく、問題は私はフェッチコマンドの定義に基づいています: "git fetchはリモートリポジトリから新しいブランチとデータをダウンロードします"。比較の出力に基づいて、その変更をフェッチしてマージする必要はないと判断したとします。なぜ帯域幅を使用し、リポジトリに不要なものを適用するのでしょうか。再び、多分問題は私です。既存の変更を手前に知っておくことで、できるだけ通話やリソースを節約しようとしています。 – Pod

答えて

14

あなたが使用してoriginリポジトリ内の支店に関するいくつかのサマリー情報を取得することができますが:

git remote show origin 

...あなたは何とかそれらを比較するために、あなたのリポジトリに originから枝を取得する必要があります。これは git fetchの機能です。 git fetch originを実行すると、デフォルトでは、 origin/masterなどの「リモートトラッキングブランチ」だけが更新されます。これらは、最後にフェッチしたときに対応するブランチがどこにあったかを格納します。 originあなたが働いている地元の枝はすべて git fetchの影響を受けません。

git fetch origin 
git log -p master..origin/master 

...そして、あなたはそれで満足している場合、その後、あなたはからマージまたはorigin/master上にリベースすることができますので、それは何しても安全です。


私はgit fetch originコマンドに関連するリソース(ディスク容量や帯域幅のいずれか)心配しないことをお勧めします。 gitは、更新されているリモート追跡ブランチを完了するのに必要なオブジェクトだけを効率的に送信します。ソースコードに異常に大きなファイルが格納されていない限り、違いはありません。さらに、使用する予定がない場合でも、他のリポジトリからのブランチの完全な履歴を保持することは、たとえばその開発履歴を調べることができるようにすると便利なことがよくあります。

+0

それらの素早いコメントと答えをありがとう。だからそれは私だった:-) – Pod

+2

私はよく私を提供していたプルを使用していたが、私はフェッチ/マージを好むために十億回読むので、私はそれを使い始めた。それは正常に動作しますが、GITのフェッチはすべてのリモートブランチを「一時的なスペース」にフェッチし、その名前を「リモートトラッキングブランチ」と言う最初の人です。私は実際にあなたのリポジトリの中にあることをマージするまでではないので、フェッチされたデータがどこに行くのかは分かりません。ありがとう – luigi7up

関連する問題