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


472

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

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



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>


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 для получения дополнительной информации.



0

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

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.