gitでプッシュしようとしているものを確認するにはどうすればよいですか?


588

git pushコマンドを実行した場合に何がプッシュされるかを確認する方法はありますか?

私が描いているのは、Githubの「プルリクエスト」機能の「変更されたファイル」タブのようなものです。プルリクエストを発行すると、プルリクエストを受け入れた場合に何がプルされるかを調べて確認できます。集約変更のgithubの例

コマンドラインはOKですが、私はある種のGUI(上のスクリーンショットのような)を好みます。



多くの関連する質問/回答。ここでは別のだ:stackoverflow.com/questions/2176278/preview-a-git-push/...
マイケル・

回答:


665

プッシュするファイルのリストについては、次を実行します。

git diff --stat --cached [remote/branch]

例:

git diff --stat --cached origin/master

プッシュされるファイルのコード差分については、次を実行します。

git diff [remote repo/branch]

変更されるファイルの完全なファイルパスを表示するには、次のコマンドを実行します。

git diff --numstat [remote repo/branch]

これらの差分をGUIで表示する場合は、そのためにgitを構成する必要があります。ビジュアルdiffプログラムで「git diff」出力を表示するにどうすればよいですか?を参照してください


8
コミットなしのgit diff --cachedの両方のバリエーションは、HEADに関する違いのみを表示します。git diff [--stat] --cached origin / masterを意味していると思います。オリジンのメインブランチがマスターであると想定しています
mfontani

52
これはまさにあなたが望むものではありません。HEAD原点ではなく、インデックスではなくを比較する必要があります(git diff origin/master HEAD)。インデックスを比較しても、コミットするためにステージングされた変更がない場合にのみ、同じ結果が得られます。ステージングされた変更がある場合、それらは差分に含まれますが、まだコミットされていないため、プッシュされません。
Cascabel

5
この回答を編集して、@ Jefromiからのコメントに情報を含める必要 git diff --stat origin/master HEADがあります。これが正しい回答です。
トニートッパー、2013

2
@mfontaniは私にとって正しい答えを持っています。変更したすべてをコミットした場合に何がコミットされるかではなく、すでにコミットしたものから何がプッシュされるかを確認したい。git diff --cached [remote/branch]トリックを実行します:)
poshaughnessy 2013年

2
origin / masterと入力する代わりに、@ {u}を使用できます。例:git diff @ {u}またはgit diff HEAD @ {u}これは、上流の追跡ブランチがすでに作成およびリンクされている場合にのみ機能することに注意してください。何がどこにリンクされているかを考える必要がないように、ブランチとリモートがたくさんあるときに便利です。
Damien Sawyer

192

常にドライランがあります:

git push --dry-run

実際にデータを送信する以外のすべてを行います。

よりグラフィカルなビューが必要な場合は、多数のオプションがあります。

gitに付属するTigとgitkスクリプトはどちらも、ローカルコピーの現在のブランチとリモートコピーまたはオリジンのブランチを表示します。

代替テキスト

したがって、オリジンの後にあるコミットは、プッシュされるコミットです。

入力してプッシュするブランチでシェルからgitkを開きgitk&、リモートにあるものとリモートにプッシュするものの違いを確認するには、ローカルのプッシュされていないコミットを選択してリモートを右クリックし、 「これを比較->選択」を選択: 代替テキスト


18
git push --dry-runは、私が見たいもののようなものを何も表示しません。gitkの方が近いですが、プッシュされるすべての変更の合計は表示されません。したがって、6つのコミットをリモートにプッシュしている場合、プッシュされるものの合計を確認したいと思います。1つのコミットが次のコミットによって完全に無効になる可能性があるため、各コミットが個別に何を持っているかは気にしません。
cmcculloh

1
プッシュされるものの差分が必要な場合は、git diff --stat HEAD origin/masterまたはを実行しgit diff HEAD origin/masterます。重要なのはHEADです。それ以外の場合は、コミットされていない変更を差分に含めます
Daniel Alder

リモートにデータをプッシュしようとする前に、gitが自動的に予行演習しない理由はありますか?大量のデータをプッシュする場合、すべてのデータがアップロードされ、その後エラーが表示されます。データをアップロードする時間と帯域幅を無駄にしただけで、今すぐ再アップロードする必要があります。これは奇妙な動作のようです。
Zeusstl 2015年

1
の問題git push --dry-runは、リモートでの書き込み権限が必要なことです。したがって、上流にプッシュする権限のないクローンがあり、ローカルのプッシュ--dry-runされていない変更を確認したい場合は、実行しないでください。
Ed Avis

これは良い解決策ですが、リモートに接続する必要があることに注意してください(該当する場合は、SSHキーの入力を含みます)。branchとの違いを見たいだけの場合origin/branchは、実際にはリモートリポジトリに接続する必要がないため、Ionuț G. Stanの答えを使用します。これは、必要に応じて、良い場合も悪い場合もあります。
Sean the Bean

169

単純にプッシュされるのを待ってコミットを一覧表示するにはこれはあなたが覚えているだろうものです

git cherry -v

SHA1の横にコミットサブジェクトを表示します。


5
興味深い点の1つは、比較するリモートを指定できることgit cherry -v heroku/remoteです。たとえば、コードを複数のリモートに保持している場合です。
fagiani 2016年

これらのコミットに含まれる違いを実際に相関させることができる最良の補完コマンドは何ですか?
Hassan Baig

このコマンドは便利ですが、プッシュ中に変更されるファイルの名前など、詳細を教えてください。
LS

21

おそらく実行したいでしょうgit difftool origin/master...。これは、現在のブランチにあるものの、まだorigin / masterブランチにないものの統合されたdiffを表示し、選択したグラフィカルdiffツールに表示する必要があります。最新の状態にするには、git fetch最初に実行してください。


2
git difftool -d origin/master、私はdifftoolをmeldに設定しているので、うまく機能します。
Aquarius Power

git difftool -dアクエリアスパワーに感謝します。唯一の問題は、移動されたファイルを検出せず、代わりに削除および追加されたものとして表示することです。
EM0

8

リモートリポジトリにプッシュする前にローカルバージョンを比較する1つの方法(ドライランでのプッシュの一種):

TortoiseGitを使用:
ルートフォルダープロジェクトを右クリック> TortoiseGit>以前のバージョンとの差分>
バージョン2の場合refs/remotes/origin/master


8

試してみてくださいgit diff origin/master..master(それorigin/masterがあなたの上流であると仮定して)とは異なりgit push --dry-run、これは上流への書き込み権限がなくても機能します。


5

を使用するとgit gui、実際のコミットで変更された内容のリストを確認できます。gitkreflogの簡単なインターフェースを提供するwich も使用できます。と比較して、何がプッシュされるかを確認remotes/...masterてください。スクリーンショットに似たインターフェースを提供します。

どちらのプログラムもgitに含まれています。


1
コミットされているがプッシュされていないすべてを示すgit guiの場所はありません。
cmcculloh

git guiでは、変更されたがコミットされていないものを確認できます。ビア(GIKにはgitk --allあなたがすべてのコメントの完全なリストを取得する今、あなたはプッシュにリモートであなたのDEV-ブランチの実際の状態を比較することができます。。
FUZ

4

変更されたファイルを確認し、使用できるブランチと比較した実際のコード変更表示masterするには:

git diff --stat --patch origin master

:Intellij IDEのいずれかを使用している場合は、最上位のプロジェクトを右クリックし、[ Git] > [ ブランチ比較]を選択して、必要なオリジンを選択できますorigin/master。表示されるファイルツリーでファイルをダブルクリックすると、視覚的な差分を確認できます。上記のコマンドラインオプションとは異なり、ローカルバージョンは差分ウィンドウから編集できます。


3

次の方法でコミットを一覧表示できます。

git cherry -v

次に、^の数がコミットの数と等しい次のコマンドと比較します(例では2つのコミット)。

git diff HEAD^^

最新のコミットのリストを見るのは単に良いことです。これはファイルの名前を与えません。したがって、一部の人は模擬実行オプションとパッチオプションを使用して回答したので、より優れています。git diff --stat --patch origin master git push --dry-run
Sree Rama

2

Mac OS Xを使用している場合は、Towerを入手することをお勧めします。これは、Gitとのやり取りが私にとって喜びになった素晴らしいプログラムです。端末コマンドを覚える必要がなくなりました。ファイルの違いを表示、追跡、解決するための優れたGUIを提供します。

いいえ、私は彼らとは関係ありません。私は彼らのソフトウェアを使用し、本当に気に入っています。

http://www.git-tower.com/


2
Towerを使用していますが、コミットされているがプッシュされていないファイルをどのように確認できますか?
Michael Irey 2013

これは質問の答えにはなりません。
reinierpost

1

ちょうど私の2セントを追加する...私はgitlabランナーのgitlabパイプラインでジョブを実行するときにこれを実装したいと思いました。これを行う最良の方法は、次のスクリプトを使用することでした。

git diff --name-only $CI_COMMIT_BEFORE_SHA $CI_COMMIT_SHA

また、私の場合、拡張子を使用してファイルをフィルタリングし、これを実現するために使用しました:

git diff --name-only $CI_COMMIT_BEFORE_SHA $CI_COMMIT_SHA '*.py'

その後、たとえばこのリストを別の場所に転送できます。おそらくリンターです。;)

これが誰かを助けることを願っています。


1
  1. リモートで書き込み権限がある場合
git push --dry-run
  1. リモートでの書き込み権限がない場合
git diff --stat HEAD remote/branch

0

の後git commit -m "{your commit message}"、プッシュの前にコミットハッシュを取得します。したがってgit、次のコマンドを実行して、何をプッシュするかを確認できます。

git diff origin/{your_branch_name} commit hash

例えば: git diff origin/master c0e06d2


回答ありがとうございます。質問はかなり古く、投票数が多いため、この努力は必要なかったと思います。さまざまな質問に労力を費やすほうがよいでしょう。
Pbd
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.