Перегляньте зміни певного файлу за допомогою 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сам по собі показує всі зміни у цілому сховищі (не тільки в поточному каталозі).


100
Якщо ви хочете побачити зміни у файлі, які ви вже "git add" 'ed, це "git diff --cached"
Ана Беттс

8
Якщо ви хочете перевірити файл на старішій версії файлу: $ git diff [віддав хеш] file_2.rb
Alex Angelico

2
Як вийти з розгляду?
Гаррі

1
Або скористайтеся SourceTree.
GeneCode

4
@GurpreetsinghDhanju Спробуйте натиснути Q

110

Інший метод (згаданий у цій відповіді ТА ) дозволить зберегти історію в терміналі і дасть вам дуже глибокий запис самого файлу:

git log --follow -p -- file

Це покаже всю історію файлу (включаючи історію, що перевищує перейменування та відрізняється від кожної зміни).

Іншими словами, якщо колись ім'я файлу bar було названо foo, то git log -p bar (без опції - follow) відображатиме лише історію файлу до того моменту, коли він був перейменований - він не відображатиме історія файлу, коли він був відомий як foo. Використовуючи панель git log --follow -p, буде показана вся історія файлу, включаючи будь-які зміни у файлі, коли він був відомий як 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 / My Folder / My Sub Folder / file_2.rb'

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.