リモート(元の)Gitリポジトリの変更を確認する方法は?


249

質問

次のワークフローを実行するためのGitコマンドは何ですか?

シナリオ

私はリポジトリからクローンを作成し、自分のローカルリポジトリにいくつかのコミットを行いました。その間、私の同僚はリモートリポジトリにコミットしました。今、私はしたいです:

  1. リモートリポジトリに他の人からの新しいコミットがあるかどうかを確認しますorigin

  2. 最後のプル以降、リモートリポジトリに3つの新しいコミットがあったとしましょう。リモートリポジトリのコミット、つまりHEAD~3with HEAD~2HEAD~2with HEAD~1HEAD~1with を比較したいと思います HEAD

  3. リモートで何が変更されたかを知った後、他のユーザーから最新のコミットを取得したいと考えています。

これまでの私の発見

ステップ2の場合:私はキャレット表記知りHEAD^HEAD^^等とチルダ表記をHEAD~2HEAD~3

ステップ3の場合、つまり、たったのgit pull



あなたがリンクしている回答に答える@Danieleはすばらしいものであり、カスタマイズ可能なbashスクリプトも付属しています。+1
gorbysbm

回答:


255

git fetch originリポジトリのリモートブランチを更新して、最新バージョンを指すようにすることができます。リモートに対する差分の場合:

git diff origin/master

はい、キャレット表記も使用できます。

リモートの変更を受け入れる場合:

git merge origin/master

34
差分は逆に見えます。私は使いやすいgit diff HEAD origin/masterので、リモートの変更を受け入れた場合に適用される内容を差分で示します。
cbliard 2013

2
「git fetch origin」と「git show-branch * master」が役に立ちました。
レアマッシオ2017年

159
git remote update && git status 

Gitでプルが必要かどうか確認する答えにこれを見つけました

git remote updateリモート参照を最新にする。その後、次のようないくつかのことを実行できます。

  1. git status -unoあなたが追跡しているブランチが前にあるか、後ろにあるか、分岐しているかを教えてくれます。何も表示されない場合、ローカルとリモートは同じです。

  2. git show-branch *master 名前がmasterで終わるすべてのブランチ(例:masterおよびorigin / master)のコミットが表示されます。

-vと一緒に使用するとgit remote update、更新されたブランチを確認できるので、それ以上のコマンドは必要ありません。


十分ではない。git pull <remote> <branch>ローカルブランチの先端がリモートカウンターの背後にあったため、プッシュする必要があるとすぐに後で実行する必要があります。
Overdrivr

3
@Overdrivrの質問では、ローカルブランチへのコミットを取得する前に変更を確認する方法を求めています。したがって、はい、変更を確認した後、ローカルブランチを更新する必要があります。
Rajani Karuturi、2016

これはリモートが起点か上流か?
vikramvi 2017

1
その-vオプションは機能しません。git remote update -v私が得たerror: unknown switch `v'
シャッド

1
@Shadあなたはすべきではありgit remote -v updateませんgit remote update -v
Rajani Karuturi

34

「起源」で何が起こっているのかを総合的に把握する良い方法は、次のとおりです。

git remote show origin

11
しかし、そのコマンドでは、最後のプル以降に "origin"で行われたコミットの数は表示されませんか?私がそれを理解した方法「git remote show origin」はローカル操作であり、情報を取得するためにネットワークを経由しません。
Lernkurve 2010年

24

使うだけ

git remote update
git status

後者は、私のローカルの背後にあるコミットの数を報告します。(存在する場合)

その後

git pull origin master

私のローカルを最新のものにする:)


13

私の通常の質問はむしろ「リポジトリの新しいものや変更されたもの」なので、変更されたものが便利です。ここで見つけ

git whatchanged origin/master -n 1

1
このコマンドが存在することはありません。ありがとう。これが私が探していたものです
Saurabh Jain

11

1つの潜在的なソリューション

Alan Haggai Alaviのソリューションのおかげで、私は次の潜在的なワークフローを思い付きました。

ステップ1:

git fetch origin

ステップ2:

git checkout -b localTempOfOriginMaster origin/master
git difftool HEAD~3 HEAD~2
git difftool HEAD~2 HEAD~1
git difftool HEAD~1 HEAD~0

ステップ3:

git checkout master
git branch -D localTempOfOriginMaster
git merge origin/master

13
なぜリモートのリビジョン間の差分のために一時的なブランチを作る必要があるのですか?できるgit diff origing/master^ origing/master^^
Pablo Marin-Garcia

@ PabloMarin-Garcia:ありがとう。その時は知りませんでした。
Lernkurve 2013

2

git statusフェッチ後でも、マスターとorigin / masterの違いが常に表示されるとは限りません。組み合わせgit fetch origin && git statusを機能させるには、ローカルのブランチとオリジンの間の追跡情報を指定する必要があります。

# git branch --set-upstream-to=origin/<branch> <branch>

マスターブランチの場合:

git branch --set-upstream-to=origin/master master

0

それは今のところ提案されていないので...そして私はそれが非常に便利だと思います...

私は単に使う

git fetch origin

リモートの変更をフェッチし、ローカルと保留中の両方のリモートコミット(およびそれらに関連する変更)を、--all引数を含む、素晴らしいgitkツール(https://git-scm.com/docs/gitk)で表示します。

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