それも可能ですか?
基本的に、リモートリポジトリがあり、そこから次のものを使用してプルします。
git pull
次に、このプルが何を変更するか(差分)を、自分の側に何も触れずにプレビューします。理由は、私が引っ張っているものは「良い」ものではないかもしれず、私のリポジトリを「ダーティ」にする前に他の誰かにそれを修正してほしいからです。
git fetch
を実行した後、git log HEAD..Origin/master
を実行して、最後の共通コミットとOriginのmasterブランチ間のログエントリを表示します。差分を表示するには、git log -p HEAD..Origin/master
を使用して各パッチを表示するか、git diff HEAD...Origin/master
(2つではなく3つのドット)を使用して1つの差分を表示します。
フェッチを実行するとremoteブランチのみが更新され、yourブランチは更新されないため、通常、フェッチを元に戻す必要はありません。すべてのリモートコミットでプルとマージを行う準備ができていない場合は、git cherry-pick
を使用して、必要な特定のリモートコミットのみを受け入れることができます。後で、すべてを取得する準備ができたら、git pull
が残りのコミットにマージされます。
更新:git fetchの使用を避けたい理由が完全にはわかりません。 git fetchは、リモートブランチのローカルコピーを更新するだけです。このローカルコピーは、どのブランチとも関係がなく、コミットされていないローカル変更とは関係ありません。 git fetchをcronジョブで実行する人は聞いたことがあります。これは非常に安全だからです。 (しかし、私は通常、そうすることはお勧めしません。)
git fetchがあなたが探しているものだと思います。
ローカルリポジトリのインデックスにコミットせずに、変更とオブジェクトをプルします。
それらは後でgit mergeとマージできます。
編集:さらなる説明
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
フェッチはgit reset --hard( link )で元に戻すことができますが、ツリー内のコミットされていない変更はすべて失われます取得した変更も同様です。
リモートリポジトリからフェッチし、違いを確認してからプルまたはマージできます。
これは、Origin
というリモートリポジトリと、リモートブランチOrigin/master
を追跡する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
を実行する前に変更をプレビューするための素敵で簡単な方法が得られます。
私はパーティーに遅刻するかもしれませんが、これは私をあまりにも長く悩ませたものです。私の経験では、作業コピーを更新してそれらの変更に対処するよりも、保留中の変更を確認したいです。
これは~/.gitconfig
ファイルに含まれます:
[alias]
diffpull=!git fetch && git diff HEAD..@{u}
現在のブランチをフェッチし、作業コピーとフェッチしたブランチとの差分をとります。したがって、git pull
に伴う変更のみが表示されるはずです。
これら2つのコマンドを使用すると、変更するファイルを確認できます。
最初にgit fetchを実行すると、次のような出力が得られます(出力の一部):
... 72f8433..c8af041開発-> Origin/develop ...
この操作により、2つのコミットIDが得られます。1つ目は古いもの、2つ目は新しいものです。
次に、git diffを使用してこれら2つのコミットを比較します
git diff 72f8433..c8af041 | grep "diff --git"
このコマンドは、更新されるファイルをリストします。
diff --git a/app/controller/xxxx.php b/app/controller/xxxx.php
diff --git a/app/view/yyyy.php b/app/view/yyyy.php
たとえば、app/controller/xxxx.phpおよびapp/view/yyyy.php 更新されます。
git diffを使用して2つのコミットを比較すると、更新されたすべてのファイルが変更された行で出力されますが、grepを使用すると、diff --gitを含む行のみが検索および取得されます出力から。