git diff
Просмотр разницы между рабочей и рабочей папками
git diff --staged
Просмотр разницы между HEAD и Stage
git diff HEAD
Просмотр разницы между HEAD и рабочим каталогом
Здесь Stage
- это помеченные вами изменения для включения в следующий коммит.
Working Directory
- это текущий каталог, над которым вы работаете и вносите изменения.
HEAD
- это ссылка на последний коммит в текущей извлеченной ветке.
Попробуйте один раз, что может помочь вам разобраться:
Предположим, у меня есть файл test.txt
, и у меня есть содержимое Hello
в файле, который в данный момент находится в моем хранилище. Теперь я изменяю файл и добавляю World
и делаю git status
:
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: test.txt
И когда я проверяю git diff
, он показывает что-то вроде этого:
--- a/test.txt
+++ b/test.txt
@@ -1 +1 @@
-Hello
+Hello World
Теперь, если я создаю этот файл и проверяю git status
:
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: test.txt
Теперь я заметил, что забыл добавить восклицательный знак к тексту, поэтому добавляю его и снова проверяю git status
:
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: test.txt
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: test.txt
Таким образом, вы можете видеть, что у нас есть один и тот же файл в промежуточной и неподготовленной областях. И когда я проверяю git diff
, это показывает мне это:
--- a/test.txt
+++ b/test.txt
@@ -1 +1 @@
-Hello World
+Hello World!
Мы изменили Hello World
, который сейчас находится в стадии подготовки, на Hello World!
, поэтому он сравнивается с областью подготовки. А теперь, если я проверю git diff --staged
:
--- a/test.txt
+++ b/test.txt
@@ -1 +1 @@
-Hello
+Hello World
Сравнивает staged
изменения с HEAD
(последний коммит). Поскольку я не поставил изменение !
, оно здесь не отображается. И наконец, когда я сделаю git diff HEAD
, он покажет это:
--- a/test.txt
+++ b/test.txt
@@ -1 +1 @@
-Hello
+Hello World!
Изменения между HEAD
(последним коммитом) и вашим Working Directory
. Поскольку HEAD
содержит только Hello
в файле, а в вашем Working Directory
вы изменили его на Hello World!
(не имеет значения, что вы не поставили изменение !
, он просто будет смотреть файл для изменений, независимо от того, являются ли они постановочными или неустановленными).
Надеюсь, это поможет.