Див. Різницю між поточним станом та останнім комітом


93

Іноді, коли я збираюся зробити коміт, я не можу згадати, що саме змінилося з часу останнього коміту. Як я можу побачити різницю поточного стану коду та останнього коміту?

Відповіді:


113

Якщо ви ще не додали файли до індексу (за допомогою git add), просто зробіть

git diff

Це покаже різницю між вашим робочим деревом та індексом.

Якщо ви додали файли до індексу, вам потрібно зробити це, щоб показати різницю між індексом та останнім комітом (HEAD).

git diff --cached

Нарешті, якщо ви хочете побачити зміни, внесені в робоче дерево у порівнянні з останнім комітом ( HEAD), ви можете (як вказує Карлос)

git diff HEAD

Ці зміни є поєднанням git diffі git diff --cached.


2
git diffпорівнює робоче дерево з індексом, а не HEAD.
Carlos Martín Nieto

@ CarlosMartínNieto Ви маєте рацію, сер. Я покращив свій пост, щоб відобразити це.
Klas Mellbourn,

Я запускаю це, але термінал не закінчується, як я можу вийти.? нічого не працює.
Франсіско Корралес Моралес,

@KlasMellbourn, чи можна git diffв одному повідомленні різниці вказати стан стану індексу та попереднього коміту ?
alpha_989

2
Добре розібрався зі своїм git diff --cached HEAD^:)
alpha_989

33

Якщо ви щойно зробили коміт або хочете побачити, що змінилося в останньому коміті порівняно з поточним станом (за умови, що у вас чисте робоче дерево), ви можете використовувати:

git diff HEAD^

Це порівняє HEAD з комітом безпосередньо перед цим. Можна також зробити

git diff HEAD^^

для порівняння із станом гри 2 коміти тому. Щоб побачити різницю між поточним станом та певним комітом, просто виконайте:

git diff b6af6qc

Де b6af6qcприклад хешу коміту.


3
Оголошення для cmd-версії git для Windows - вам потрібно уникнути символу caret (^) за допомогою самої каретки. Отже, "git diff HEAD ^" має бути "git diff HEAD ^^". Так само, "HEAD ^^" вводиться як "HEAD ^^^^".
Ееллор

1
У цій відповіді я думаю, що трохи незрозуміло, до чого відноситься "останній коміт". HEAD^є коміт перед останнім комітом.
Klas Mellbourn,

3

Ви просите git розрізнити поточний / останній коміт, що має скорочення HEAD.

Так git diff HEADбуде порівняно поточний стан робочого дерева з поточним комітом.


3

це також показує різницю та те, які файли було змінено / модифіковано.

$ git status 

Відображає шляхи, які мають відмінності між файлом індексу та поточним комітом HEAD, шляхи, які мають відмінності між робочим деревом та файлом індексу, та шляхи в робочому дереві, які не відстежуються git (і не ігноруються gitignore (5) ). Перші - це те, що ви б зробили, запустивши git commit; друге і третє - це те, що ви могли б зробити, запустивши git add перед запуском git commit.

https://www.kernel.org/pub/software/scm/git/docs/git-status.html


2

Це також працює для мене:

# The last one
git diff HEAD~1 HEAD

# The last but one, etc...
git diff HEAD~2 HEAD~1

Зазвичай це працює для лінійної історії. Це може стати більш складним, якщо є також коміти злиття. Я рекомендую вам ознайомитись із цим документом, щоб отримати гарне і повне пояснення, особливо, що приклад ілюстрації дерева комітів:

https://git-scm.com/docs/gitrevisions

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