Git:ローカルリポジトリが最新かどうかを確認するにはどうすればよいですか?


85

ローカルリポジトリが最新かどうかを知りたいです(最新でない場合は、理想的には変更を確認したいと思います)。

git fetchまたはを行わずにこれを確認するにはどうすればよいgit pullですか?

回答:


96

git fetch --dry-run マニュアルを試してください(git help fetch)は言う:

--dry-run
Show what would be done, without making any changes.

3
ありがとう!ただし、どのファイルが追加/変更/削除されたかを出力から理解するのは困難です。
Misha Moroshko 2011年

1
更新されるタグと、さまざまなブランチのstart..endコミット範囲を確認できます。これが十分でない場合は、適切なフェッチ(プルではなく)として実行します。これにより、独自のブランチ作業に影響を与えることなく、リモートの適切な個別のローカルコピーが得られます。プルは2つをマージしようとしますが、これはあなたが望むものではありません。--dry-runを実行するかどうかに関係なく、データ転送は同じです。
フィリップオークリー

4
実行してgit fetch --dry-runも何も表示されないのはなぜですか?
Paramvir Singh Karwal 2018

3
@ParamvirSinghKarwal Gitは、報告内容がまばらです。何も言うことがなければ、何も起こらなかったかのように何も言いません。たぶん、あなたはあなたの通常のフェッチのrefspecについて最新です。多分追加し--allますか?
フィリップオークリー

2
@AaronBeallその場合は、おそらく、これらの変更をローカルで既にフェッチしているが(フェッチするものは何もない)、まだブランチにマージしていないことを意味します。git pullとほぼ同等git fetch && git mergeです。いずれかの時点でを使用せずにフェッチを実行した場合は--dry-run、すでにローカルでフェッチを行っています。
DuckPuppy

36
git remote show origin

結果:

HEAD branch: master
  Remote branch:
    master tracked
  Local branch configured for 'git pull':
    master merges with remote master
  Local ref configured for 'git push':
    master pushes to master (local out of date) <-------

これには、すべての時間のブランチがリストされています。長い履歴を持つリポジトリがある場合、出力はかなり乱雑になります。
PauloCarvalho20年

28

まずgit remote update、を使用して、リモート参照を最新の状態にします。次に、次のようないくつかのことのいずれかを実行できます。

  1. git status -uno追跡しているブランチが進んでいるか、遅れているか、分岐しているかがわかります。それが何も言わない場合、ローカルとリモートは同じです。サンプル結果:

ブランチDEVで

ブランチは「origin / DEV」より7コミット遅れており、早送りできます。

(「gitpull」を使用してローカルブランチを更新します)

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

-vgit remote update(git remote -v update)を使用すると、どのブランチが更新されたかを確認できるため、これ以上のコマンドは必要ありません。


2
なぜこれまでのところ下がっているのですか?git remote update ; git status -unoそれを解決しました。git fetch --dry-runローカルがリモートの背後にある場合でも、出力はありませんでした。
アーロンビール

17

git status -unoローカルブランチが元のブランチで最新であるかどうかを確認するために使用できます。


19
これはローカルステータスのみを提供し、リモートブランチにはチェックしません。
Ishan Liyanage 2014年

4
ローカルを与えるだけgit remote update ; git status -unoですが、トリックをしました!git fetch --dry-run私はそれを期待(ととき何も出力を与えないgit pull事を引くでしょう)。
アーロンビール

1
この答えは間違っているので削除する必要があります。それがそうであるように、それはGitがどのように機能するかについての非常に一般的ですが間違った神話を永続させます。
プロメテウス

8

実際にはそうgit fetchではありませんが、ローカルブランチは変更されないため、どのように問題が発生するかはわかりません。


私はこれに完全に同意します。Gitプルは、ファイルを損傷し、上書きする可能性があります。ただし、git fetchはメタデータのみをプルダウンするため、git statusなどのコマンドを使用すると、ファイルを上書きすることなく、ローカルリポジトリが最新であるかどうかを確認できます。質問の文字には答えられないかもしれませんが、質問の精神に答えて、必要なツールを提供します。Gitフェッチ、次にgit statusは、ファイルを上書きせずに、ローカルリポジトリがリモートとの関係でどこにあるかを示します。
merlit 6420


5

次の2つのコマンドを発行する必要があります。

  1. git fetch origin
  2. gitステータス

1
これは機能しますが、質問には「フェッチ」なしで明確に示されています。実際に変更をフェッチまたはマージせずに、ローカルリポジトリがリモートリポジトリとどのように異なるかを知りたい場合が多くあります。
pedrambashiri19年

1
@pedrambashiri私は本当に興味があります、何のように?私の知る限り、フェッチだけでは何も害はありません。
プロメテウス

@Prometheus最初に、質問に「フェッチなし」と明確に記載されている場合、他に方法がない場合、またはそれなしで実行する実際のケースがない場合は、回答にフェッチを使用できないことを指摘したいと思います。答えで説明されます。しかし、あなたの質問に答えるために、フェッチはリモートリポジトリのローカルコピーを更新します。この投稿の図を見てくださいblog.osteele.com/2008/05/my-git-workflow
pedram bashiri

4

git fetchローカルリポジトリをリモートサーバー上のファイルと比較する前に、実行する必要があります。

このコマンドは、リモートトラッキングブランチのみを更新し、git mergeまたはを呼び出すまでワークツリーに影響を与えませんgit pull

フェッチした後、ローカルブランチとリモートトラッキングブランチの違いを確認するには、ここで説明するようにgitdiffまたはgitcherryを使用できます


2

使用する場合

git fetch --dry-run -v <link/to/remote/git/repo>

あなたはそれが最新であるかどうかについてのフィードバックを得るでしょう。したがって、基本的には、前に示した回答に「詳細」オプションを追加するだけです。


1

これは、git fetchまたはを使用しないと不可能git pullです。リモートリポジトリにアクセスして「最新」の意味を確認せずに、リポジトリが「最新」であるかどうかをどのように知ることができますか?


5
確認してください!あなたはあなたが思うことに答えただけです!初心者はそれで転倒するので、もっと注意する必要があります!
アマヌエルネガ2014

4
@AmanuelNega:これは単なる基本的なロジックです。ローカルリポジトリがリモートリポジトリと同じ状態にあるかどうかを知りたい場合は、リモートリポジトリの状態を知る必要があります。限目。リモートリポジトリの状態がわからない場合は、ローカルリポジトリが同じ状態にあるかどうかを知ることができない可能性があります。投票数が最も多く、承認された回答ではgit pull、OPが明示的に禁止しているを使用していることに注意してください。
イェルクWミッターク

2
知らされる!git status -unoこれは機能し、git show-branch *masterすべてのマスターブランチのステータスを確認するためにも使用できます。あなたはまだそれが不可能だと言っていますか?リモートにアクセスできる限り、ブランチのステータスを確認できます。
アマヌエルネガ2014

2
@AmanuelNega:git statusローカル参照のステータスのみを通知します。ローカル参照がリモート参照で最新であるかどうか通知しませ。繰り返しますが、リモートリポジトリの状態を取得せずに、リモートリポジトリの状態を知ることは論理的に不可能です。限目。これは時空の基本法則です。
イェルクWミッターク

6
サーバールームで誰かを呼び出して「マスターブランチのHEADのハッシュは何ですか」と言うことができるので、「論理的に」不可能ではありません。その後、ローカルをチェックして、そのハッシュを持っていません。これで、それらが同期していないことがわかります。
ジェームズ・ロビンソン

1

私の答えをフォーマットしようとしましたが、できませんでした。答えを投稿するのがとても難しい理由、スタックオーバーフローチームにお願いします。

それにもかかわらず、

回答: リモート変更に更新するための
git fetch origin
git status(「ブランチは「origin / master」より9コミット遅れています」のような結果が表示されます)
:git pull

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