Смотрите изменения в конкретном файле, используя git

472

Я знаю, что могу использовать git diffкоманду для проверки изменений, но, насколько я понял, она основана на каталогах. Это означает, что он дает все изменения всех файлов в текущем каталоге.

Как я могу проверить только изменения в одном конкретном файле? Скажем, я измененные файлы file_1.rb, file_2.rb..., file_N.rb, но я заинтересован только в изменениях в файле file_2.rb. Как я могу проверить эти изменения (до того, как зафиксировать)?

Mellon
источник
1
Возможный дубликат Как просмотреть историю файлов в Git?
CharlesB
4
Мой главный вопрос - как проверить разницу для конкретного файла, прежде чем я внесу все изменения. Журнал Git для совершенных изменений, я думаю.
Меллон
1
В моем опыте лучше использовать визуальный инструмент, как GitKraken
Джованни Бенусси

Ответы:

642

Используйте команду как:

git diff file_2.rb

Смотрите git diffдокументацию для получения полной информации о видах вещей, для которых вы можете получить различия.

Обычно git diffсам по себе показывает все изменения во всем хранилище (а не только в текущем каталоге).

Грег Хьюгилл
источник
101
Если вы хотите увидеть изменения файла, которые вы уже «git add» редактировали, это «git diff --cached»
Ана Беттс
8
Если вы хотите проверить файл в сравнении со старым коммитом: $ git diff [commit hash] file_2.rb
Алекс Анджелико
2
Как выйти из режима сравнения?
Гарри
1
Или используйте SourceTree.
GeneCode
4
@GurpreetsinghDhanju Попробуйте нажать Q
110

Другой метод (упомянутый в этом SO-ответе ) сохранит историю в терминале и даст вам очень глубокую запись самого файла:

git log --follow -p -- file

Это покажет всю историю файла (включая историю за переименованием и различия для каждого изменения).

Другими словами, если файл с именем bar когда-то назывался foo, то команда git log -p bar (без опции --follow) будет показывать историю файла только до точки, в которой он был переименован - он не будет отображать История файла, когда он был известен как foo. Использование git log --follow -p bar покажет всю историю файла, включая любые изменения в файле, когда он был известен как foo.

Эй Джей Зейн
источник
3
Хорошо работает с --stat, чтобы иметь обзор добавленных / удаленных строк.
Том Хейл,
2
Да, этот ответ должен быть как минимум выше, он отслеживает историю, а не только текущую разницу, и вам не нужно отслеживать все хэши коммитов. Довольно простое использование, но очень мощное в изменениях
Ilhicas
87

Вы можете использовать, gitk [filename]чтобы увидеть журнал изменений

да Роча Пирес
источник
2
Это покажет историю изменений в файле, что иногда может быть тем, что вам нужно.
r1k0
26

Вы можете использовать команду ниже, чтобы увидеть, кто что изменил в файле.

git blame <filename>

Vineet
источник
4
Это лучший ответ, так как он говорит вам, кто внес изменения и когда, а также в коммит внесены изменения. Чтобы отфильтровать для определенного изменения, просто сделайте, git blame <filename> | grep <searchfor>где <searchfor>короткое значение. Например, чтобы выяснить , кто изменил fooк barин dist/index.php, вы будете использоватьgit blame dist/index.php | grep bar
Kraang Prime
15

Вы можете выполнить

git status -s

Это покажет имя измененного файла, а затем скопировав интересующий путь к файлу, вы можете увидеть изменения, используя git diff

git diff <filepath + filename>
Техас Павар
источник
8

выводить только данные о коммитах для конкретных изменений файла,

git log --follow file_1.rb

перечислить разницу между различными коммитами для одного и того же файла,

git log -p file_1.rb

перечислить только коммит и его сообщение,

git log --follow --oneline file_1.rb
Мохидин бен Мухаммед
источник
5

Вы также можете попробовать

git show <filename>

Для коммитов git show покажет сообщение журнала и текстовую разницу (между вашим файлом и версией файла с фиксацией).

Вы можете проверить git show Documentation для получения дополнительной информации.

LuisBento
источник
0

Полностью согласен с @Greg Hewgill

И если ваш путь включает пробелы, вы можете использовать, попробуйте добавить с апострофом 'или `

git diff 'MyProject / Моя папка / Моя подпапка / file_2.rb'

MrMins
источник