Как я могу увидеть, что изменилось в файле, прежде чем совершить Git?

351

Я заметил, что, работая над одним или двумя билетами, если я отойду, я не уверен, над чем я работал, что изменилось и так далее.

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

Тимоти Т.
источник

Ответы:

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]

Он будет рекурсивно работать с каталогами, и если пути не указаны, он показывает все изменения.

Cascabel
источник
1
@ sveilleux2 Нет, просто запустите git diff без аргументов - как сказано в последнем предложении ответа, если пути не указаны, он показывает все изменения. (Скобки [filename]указывают на необязательный аргумент.) Когда *вы позволяете оболочке перечислять все файлы, поэтому, если вы находитесь в подкаталоге, вы получите только вещи в этом подкаталоге (не весь репозиторий), и вы ' пропущу изменения в скрытых файлах.
Каскабель
# показать различия между текущим коммитом и индексом # то есть то, что вы собираетесь зафиксировать git diff --cached [имя файла] Не имеете в виду: # показать различия между текущим коммитом и индексом # то есть, о чем вы чтобы подтолкнуть ? git diff --cached [имя файла]
ofarooq
3
Чтобы увидеть различия, сделанные после добавления файла (то есть после «git add»), выполните «git diff --staged [filename]»
Sidtharthan
О, почему это так сложно ?! Что, если у нас есть пара дюжин файлов? .. Просто жалуюсь на интерфейс git ... Да, кажется, git add -pэто альтернатива для проверки всех файлов.
Кирби
@Jefromi - пожалуйста, подумайте над тем, чтобы добавить git diff --staged [filename]свой основной ответ, так как это чаще всего необходимо.
Лазарь Терстон
8

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

Рид Хеджес
источник
Так что вместо git add имя файла используйте git add -p?
Тимоти Т.
1
git add -p - это комбинация этапов, позволяющая увидеть изменения, которые вы можете внести, и выбрать их один за другим в интерактивном режиме. См. « Зафиксировать только часть файла» в Git, чтобы узнать больше о git add -p.
Ангелос Асонитис
5

git diff

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

Мик
источник
Цитата слишком большая - по умолчанию она выполняет первое сравнение: между рабочим деревом и индексом.
Каскабель
4

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

По этой причине очень редко я не использую git add -p(или эквивалент magit) для добавления своих изменений.

Dustin
источник
2
git НЕ имеет дело с изменениями - пытаясь думать об этом так, как будто это основной источник путаницы и ошибок. Git имеет дело со снимками.
Крис Додд
3
git diff <path>/filename

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

HariKishore
источник
2

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

Когда вы уже запустили git addсвой список файлов:

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

В более поздних версиях gitвы также можете использовать --staged, что является синонимом --cached.

То же самое можно использовать для еще не добавленных файлов, но без --cachedопции.

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

Псевдоним команды Git для опции "cached":

$ git config --global alias.diff-cached '!git diff --cached $(git diff --cached --name-only)'
Kirby
источник
3
Спасибо за детали git diff --cached --name-only была команда, которую я искал ....
Doogle
1

Перейдите к вашему git-репо и выполните команду ниже:

git diff имя файла

Откроется файл с помеченными изменениями, нажмите клавишу возврата / ввода, чтобы прокрутить файл вниз.

PS имя файла должно включать полный путь к файлу, иначе вы можете запустить без полного пути к файлу, перейдя в соответствующую директорию / папку файла

Яш Бансал
источник
0

Вы также можете использовать git-friendly текстовый редактор. Они показывают цвета на линиях, которые были изменены, другой цвет для добавленных линий, другой цвет для удаленных линий и т. Д.

Хороший текстовый редактор, который делает это - GitHub's Atom 1.0 .

AskYous
источник