それは可能ですか?
基本的に、次のものを使用してプルするリモートリポジトリがあります。
git pull
さて、このプルが何を変更するか (差分) をプレビューしたいと思います。その理由は、私がプルしているものは「良い」ものではない可能性があり、リポジトリを「ダーティ」にする前に他の誰かに修正してもらいたいからです。
それは可能ですか?
基本的に、次のものを使用してプルするリモートリポジトリがあります。
git pull
さて、このプルが何を変更するか (差分) をプレビューしたいと思います。その理由は、私がプルしているものは「良い」ものではない可能性があり、リポジトリを「ダーティ」にする前に他の誰かに修正してもらいたいからです。
を実行した後git fetch、 を実行してgit log HEAD..origin/master、最後の共通コミットとオリジンのマスター ブランチの間のログ エントリを表示します。差分を表示するには、git log -p HEAD..origin/master各パッチを表示するか、 git diff HEAD...origin/master(2 つではなく 3 つのドット) を使用して単一の差分を表示します。
通常、フェッチを元に戻す必要はありません。フェッチを実行すると、リモートブランチのみが更新され、ブランチは更新されないためです。すべてのリモート コミットでプル アンド マージを実行する準備ができていない場合は、 を使用して、必要git cherry-pickな特定のリモート コミットのみを受け入れることができます。後で、すべてを取得する準備ができたらgit pull、残りのコミットにマージします。
更新: git fetch の使用を避けたい理由がよくわかりません。git fetch が行うことは、リモート ブランチのローカル コピーを更新することだけです。このローカル コピーは、ブランチとは何の関係もありません。また、コミットされていないローカルの変更とは何の関係もありません。とても安全なので、cron ジョブで git fetch を実行する人の話を聞いたことがあります。(ただし、通常はそれを行うことはお勧めしません。)
gitfetchがあなたの探しているものだと思います。
ローカルリポジトリのインデックスにコミットせずに、変更とオブジェクトをプルします。
それらは後でgitmergeでマージできます。
編集:さらなる説明
Git-SVNクラッシュコースの リンクから直接
では、リモートリポジトリから新しい変更をどのように取得しますか?あなたはそれらをフェッチします:
git fetch http://host.xz/path/to/repo.git/この時点で、それらはリポジトリにあり、次を使用して調べることができます。
git log origin変更を比較することもできます。git log HEAD..originを使用して、ブランチにない変更だけを確認することもできます。次に、それらをマージしたい場合は、次のようにします。
git merge originフェッチするブランチを指定しない場合は、デフォルトでトラッキングリモートに設定されるので便利です。
マニュアルページを読むと、オプションとその使用方法を最もよく理解できます。
私は例と記憶によってこれをやろうとしているだけです、私は現在テストするためのボックスを持っていません。あなたは見るべきです:
git log -p //log with diff
フェッチはgitreset--hard(link)で元に戻すことができますが、ツリー内のコミットされていないすべての変更と、フェッチした変更は失われます。
リモート リポジトリからフェッチし、違いを確認してから、プルまたはマージできます。
これは、リモート リポジトリと呼ばれるリモート ブランチと、リモート ブランチの追跡originと呼ばれるブランチの例です。masterorigin/master
git checkout master
git fetch
git diff origin/master
git pull --rebase origin master
それを行うためのカスタム git エイリアスを作成しました。
alias.changes=!git log --name-status HEAD..
それでこれを行うことができます:
$git fetch
$git changes origin
これにより、変更を行う前に変更を簡単にプレビューできますmerge。