コミットする前にgitでファイルの差分を表示する方法


443

これはしばしば私に起こります:

私は1〜2日の間、同時にいくつかの関連する変更に取り組んでおり、コミットするときは、特定のファイルの変更内容を忘れてしまいます。(これは単なる個人的なgitリポジトリなので、1つのコミットで複数の更新があっても問題ありません。)

チェックインされようとしているローカルファイルとそのファイルの最後のコミットとの間の変更をプレビューする方法はありますか?

何かのようなもの:

git diff --changed /myfile.txt

そしてそれは次のようなものを出力します:

line 23
  (last commit): var = 2+2
  (current):     var = myfunction() + 2

line 149
  (last commit): return var
  (current):     return var / 7

このようにして、最後にチェックインしてから、そのファイルで行ったことをすばやく確認できました。

回答:


732

git addまだ編集していないものを見たい場合:

git diff myfile.txt

または、すでに追加された変更を確認したい場合

git diff --cached myfile.txt

20
チェックアウトgit add -p。すべての変更を確認し、ステージへの変更を選択的に承認し、気が変わったらいつでも中止して、チャンクをインライン編集します。私はそれgit addなしでは絶対にありません。
カイルベイカー

2
どうすればファイルを終了できますか?
Kick Buttowski、

3
@Kick試してみるq
wjandrea

また、diff結果の愚かな 'a /'および 'b /'プレフィックスを削除する場合は、を設定できますgit config --global diff.noprefix true
Liang

64
git diff HEAD file

最後のコミットからワークツリーに追加した変更が表示されます。すべての変更(段階的または非段階的)が表示されます。


1
あなたのソリューションは機能します。しかし、私は少し混乱しています。HEADは最新のコミット番号を指します。したがって、git addを実行すると、HEADではなく作業ディレクトリのインデックスが更新されます。では、どのように違いを示していますか。
Mav55 2018年

17

ローカルの違いを確認するには:

git diff myfile.txt

または、diffツールを使用できます(変更を元に戻したい場合):

git difftool myfile.txt

使用するにはgit difftool、より効率的にインストールして、このようなメルド、DiffMergeかopendiffをなどお好みのGUIツールを使用します。

注:使用することもできます .ファイル名の代わりに)をして、現在のディレクトリの変更を確認ます。

各行の変更を確認するにgit blameは、次のコマンドを使用します。これにより、どのコミットでどの行がコミットされたかが表示されます。


コミット前の実際のファイル(masterブランチは)を表示するには、次のコマンドを実行します。

git show master:path/my_file

15

-v(または--verbose)オプションを試しましたgit commitか?メッセージエディターでコミットの差分を追加します。


いい答えです。これにより、コミットエディターで情報を提供できるようになり、コミットがより簡単になります。Changes not staged for commit:コミットエディターをよりクリーンにする情報領域を閉じる方法はありますか?
Radian Jheng 2016年

15

ファイルを最新のコミットと比較したいかどうかを検討するもう1つのテクニックは、より知識豊富なものです。

git diff master myfile.txt

この手法の利点は、最後から2番目のコミットと比較することもできます。

git diff master^ myfile.txt

そしてその前のもの:

git diff master^^ myfile.txt

また、masterブランチにいない場合は、キャレット「^」文字を「〜」に、「master」を「youブランチ名」に置き換えることができます。


14

これはGUIを保証する完璧なユースケースだと思います。-コマンドラインで十分に実行できることも理解しています。

個人的には、私のコミットはすべてgit-guiから行います。意味があれば、個別のハンク/行で複数のアトミックコミットを作成できます。

Gut Guiは、適切にフォーマットされたカラーインターフェイスで差分を表示できるようにするもので、かなり軽量です。これもあなたがチェックアウトすべきもののようです。


同意します-差分を見ながらコミットメッセージを編集することもできます。
フランソワ

知っておくと便利ですが、CLIを使用したいと思います。私はそれが含まれているいくつかのパッケージを使用しましたが、ワークフローでは厳密にターミナル/ vimに移動しました。ありがとう。
ソースMcBoss

ええ、GUIを使い続けると、そのような便利な機能がたくさんあり、git bisect実際にはアクセスできません。
NoBugs 2014年

2
同意する-コマンドラインを使用する方がはるかに高速で意味のあるオプションがたくさんあります。ただし、変更のプレビューはそれらの1つではありません。
VitalyB 2015年

ターミナルで実行されるテキストユーザーインターフェイスもあります。チェックアウトする価値のあるものは、tig「Gitのテキストモードインターフェース」です。
smido

10

macOSでは、gitルートディレクトリに移動し、次のように入力します。 git diff *


はい、あります。テストしました。gitはインストールされていますか?エラーメッセージはありますか?おそらく、これに関して新しい質問をすることができます。
カタノア2018

4

専用のコミットGUIを使用する以外に、私が見つけた最良の方法は、使用することです。git difftool -dこれにより、diffツールがディレクトリ比較モードで開き、HEADが現在のダーティーフォルダーと比較されます。


まさに私が必要としたもの。ありがとう
Ivan Ferrer Villa

3
git difftool -d HEAD filename.txt

これは、ターミナルでVIスリットウィンドウを使用した比較を示しています。

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