Як я бачу, що змінилося у файлі, перш ніж зробити git?


351

Я помітив, що працюючи над одним-двома квитками, якщо я відійду, я не впевнений, над чим працював, на що змінився, тощо.

Чи є спосіб побачити зміни, внесені до даного файлу, перш ніж додавати git, а потім виконувати git?

Відповіді:


525

Ви шукаєте git diff. Залежно від вашої точної ситуації є три корисні способи її використання:

# show differences between index and working tree
# that is, changes you haven't staged to commit
git diff [filename]
# show differences between current commit and index
# that is, what you're about to commit
# --staged does exactly the same thing, use what you like
git diff --cached [filename]
# show differences between current commit and working tree
git diff HEAD [filename]

Він працюватиме рекурсивно в каталогах, і якщо шляхи не вказані, він показує всі зміни.


1
@ sveilleux2 Ні, просто запустіть git diff без жодних аргументів - як сказано в останньому реченні відповіді, якщо шляхи не вказані, воно показує всі зміни. (В дужках [filename]вказується необов’язковий аргумент.) Якщо *ви дозволяєте оболонці перелічити всі файли, тож якщо ви знаходитесь в підкаталозі, ви отримаєте лише речі в цьому підкаталозі (не цілому репо), і ви ' Ви пропустите зміни в прихованих файлах.
Каскабель

# покажіть відмінності між поточним коміксом та індексом #, тобто тим, що ви збираєтесь зробити git diff - кеш [ім'я файлу] Чи не ви маєте на увазі: # показати відмінності між поточним коміксом та індексом #, тобто тим, про що ви збираєтеся щоб підштовхнути ? git diff - cached [ім'я файлу]
ofarooq

3
Щоб побачити відмінності після додавання файлу (тобто після "git add"), зробіть "git diff --staged [ім'я файлу]"
Sidtharthan

О, чому це так складно ?! Що робити, якщо у нас є кілька десятків файлів? .. Просто поскаржившись на git-інтерфейс ... Так, здається, git add -pце альтернатива огляду всіх файлів.
Кірбі

@Jefromi - будь ласка, врахуйте, що ви додасте git diff --staged [filename]у своїй основній відповіді, як це частіше потрібна ситуація.
Лазар Турстон



8

Для мене git add -p- це найкорисніший спосіб (і як я думаю, що розробники git вважають?) Переглянути всі нестандартні зміни (він показує різницю для кожного файлу), вибрати хороший набір змін, які повинні відбуватися з комітом, а потім, коли у вас є інсценізувати всі ці, потім використовувати git commitта повторити для наступного виконання. Тоді ви можете зробити кожен прийом корисним або змістовним набором змін, навіть якщо вони відбулися в різних файлах. Я б також запропонував створити нову гілку для кожного квитка або подібної діяльності та переключитися між ними за допомогою checkout(можливо, використовуючи, git stashякщо ви не хочете здійснювати зобов'язання перед перемиканням), хоча якщо ви робите багато швидких змін, це може бути болем. Не забувайте часто зливатися.


Тож замість git add file використовуйте git add -p?
Тимофій Т.

1
git add -p - це комбінація поетапних операцій, що бачать зміни, які ви можете здійснити, та вибираючи їх по черзі в інтерактивному режимі. Див. Розділ Введення лише частини файлу в Git для отримання додаткової інформації про git add -p.
Анжелос Асоніт

5

git diff

Показати зміни між робочим деревом та індексом або деревом, зміни між індексом та деревом, зміни між двома деревами або зміни між двома файлами на диску.


Цитата трохи забагато - за замовчуванням вона проводить перше порівняння: між робочим деревом та індексом.
Каскабель

4

Пам'ятайте, ви вносите зміни , а не файли.

З цієї причини дуже рідко я не використовую git add -p(або магнітний еквівалент) для додавання змін.


2
git НЕ займається змінами - намагання думати про це так, ніби це є основним джерелом плутанини та помилок. git займається знімками.
Кріс Додд

3
git diff <path>/filename

шлях може бути повним системним шляхом до файлу або
якщо ви знаходитесь у проекті, ви вставляєте модифікований шлях до файлу також
для модифікованих файлів з використанням шляху:git status


2

Ну, мій випадок, коли ви не хочете дбати про список файлів. Просто покажіть їх усім.

Коли ви вже працювали git addзі списком файлів:

$ git diff --cached $(git diff --cached --name-only)

В останніх версіях програми gitви можете --stagedтакож використовувати , що є синонімом --cached.

Те саме можна використовувати для не доданих файлів, але без --cachedопції.

$ git diff $(git diff --name-only)

Псевдонім команди Git для параметра "кешування":

$ git config --global alias.diff-cached '!git diff --cached $(git diff --cached --name-only)'

3
Дякую за деталі git diff - cached --name-only була командою, яку я шукав ....
Doogle

1

Перейдіть до відповідної програми git repo та виконайте команду нижче:

ім'я файлу git diff

Він відкриє файл із позначеними змінами, натисніть клавішу return / enter, щоб прокрутити файл вниз.

PS-ім'я файлу має містити повний шлях до файлу, інакше ви можете запустити без повного шляху до файлу, перейшовши у відповідний каталог / папку файлу


0

Можна також використовувати текстовий редактор, сприятливий для git. Вони показують кольори на модифікованих лініях, інший колір для доданих ліній, інший колір для видалених ліній тощо.

Хороший текстовий редактор, який робить це - Atom 1.0 GitHub .

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