Как просмотреть файл diff в git перед коммитом

Это часто случается со мной:

Я работаю над парой связанных изменений одновременно в течение дня или двух, и когда приходит время коммитить, я забываю, что изменилось в конкретном файле. (Это всего лишь личное git-репо, поэтому я согласен иметь более одного обновления в коммите.)

Есть ли способ предварительного просмотра изменений между моим локальным файлом, который должен быть зарегистрирован, и последним коммитом для этого файла?

Что-то вроде:

<code>git diff --changed /myfile.txt
</code>

И это напечатало бы что-то вроде:

<code>line 23
  (last commit): var = 2+2
  (current):     var = myfunction() + 2

line 149
  (last commit): return var
  (current):     return var / 7
</code>

Таким образом, я мог быстро увидеть, что я сделал в этом файле с момента последней проверки.

Ответы на вопрос(9)

Чтобы проверить местные различия:

git diff myfile.txt

или вы можете использовать инструмент сравнения (если вы хотите отменить некоторые изменения):

git difftool myfile.txt

To use git difftool more efficiently, install and use your favourite GUI tool such as Meld, DiffMerge or OpenDiff.

Примечание: вы также можете использовать. (вместо имени файла), чтобы увидеть текущие изменения каталога.

Чтобы проверить изменения для каждой строки, используйте:git blame который будет отображать, какая строка была зафиксирована в каком коммите.

Для просмотра фактического файла перед фиксацией (гдеmaster это ваша ветка), запустите:

git show master:path/my_file

Я думаю, что это идеальный вариант использования, гарантирующий графический интерфейс. - Хотя я полностью понимаю, что это также может быть достигнуто достаточно хорошо в командной строке.

Лично каждый коммит я делаю из гит-гуй. В котором я могу сделать несколько атомарных коммитов с отдельными фрагментами / строками, если это имеет смысл.

Gut Gui позволяет просматривать различия в хорошо отформатированном цветном интерфейсе, довольно легкий. Похоже, это то, что вы должны проверить тоже.

 15 мар. 2014 г., 05:22
Да, если вы придерживаетесь GUI, есть много интересных функций, таких какgit bisect которые действительно не доступны.
 06 апр. 2012 г., 12:47
Я согласен - он также позволяет вам редактировать сообщение коммита, глядя на diff.
 29 июн. 2015 г., 10:46
Я согласен - есть много вариантов, для которых это намного быстрее и имеет больше смысла использовать командную строку. Однако предварительный просмотр изменений не является одним из них.
 Sauce McBoss07 апр. 2012 г., 03:20
Полезно знать, но я бы хотел придерживаться CLI. Я использовал пару пакетов, в которых он был, но я перешел в строго терминал / vim для моего рабочего процесса. Спасибо хоть.

Лучший способ, который я нашел, кроме использования выделенного графического интерфейса, - это использоватьgit difftool -d - Это открывает ваш diff инструмент в режиме сравнения каталогов, сравнивая HEAD с текущей грязной папкой.

 30 янв. 2019 г., 10:55
именно то, что мне было нужно. Спасибо

Другой метод, который стоит рассмотреть, если вы хотите сравнить файл с последним коммитом, который более педантичен:

git diff master myfile.txt

Преимущество этого метода в том, что вы можете сравнить его с предпоследним коммитом:

git diff master^ myfile.txt

и тот, что до этого:

git diff master^^ myfile.txt

Также вы можете заменить "~" для каретки '^' персонаж и «название вашей ветви»; для "мастера" если вы не в мастер ветке.

git diff HEAD file

покажет вам изменения, которые вы добавили в ваше рабочее дерево с момента последнего коммита. Все изменения (поэтапно или не поэтапно) будут показаны.

 12 янв. 2018 г., 17:11
Ваше решение работает. Но я немного смущен. HEAD указывает на последний номер коммита. Итак, когда мы добавляем git add, обновляется индекс рабочего каталога, а не HEAD. Так как же это показывает разницу.
git difftool -d HEAD filename.txt

Это показывает сравнение, используя окно щелевой VI в терминале.

Ты пробовал-v (или же--verbose) вариант дляgit commit? Он добавляет разницу в коммит в редакторе сообщений.

 20 нояб. 2014 г., 09:59
С мерзавцем 1.7.2
 16 окт. 2016 г., 08:55
Хороший ответ. Это может предоставить информацию в редакторе коммитов, облегчает коммит. Есть ли способ закрыть информационную областьChanges not staged for commit: что может сделать редактор коммитов более чистым.
Решение Вопроса

Если вы хотите увидеть, что у вас нетgit addредактировать еще:

git diff myfile.txt

или если вы хотите увидеть уже добавленные изменения

git diff --cached myfile.txt
 06 апр. 2012 г., 12:07
Обратите внимание, что двойной тире требуется только в том случае, если существует возможная путаница между ревизией и именем файла (и в этом случае git сообщит вам об этом).
 16 мая 2017 г., 06:22
проверять, выписыватьсяgit add -p, Проверяйте каждое изменение, выборочно одобряйте изменения на этапе, отменяйте в любое время, если вы передумали, и даже встроенное редактирование чанка. я никогдаgit add без этого.
 01 нояб. 2018 г., 21:53
как вы можете выйти из файла?
 Sauce McBoss07 апр. 2012 г., 04:01
Спасибо! это был git diff myfile.txt. Спасибо также за двойную подсказку черты.

В macOS перейдите в корневой каталог git и введитеgit diff *

 14 февр. 2018 г., 22:01
это не работает на win10
 28 сент. 2018 г., 21:03
Да, я только что проверил. У вас установлен git? Есть сообщения об ошибках? Возможно, новый вопрос можно было бы задать по этому поводу.
 28 сент. 2018 г., 13:59
Это не работает на macOS High Sierra.

Ваш ответ на вопрос