Git diff против кошелька
Как я могу увидеть, что изменения, сделанные с помощью un-stashing, будут отображаться в текущем рабочем дереве? Я хотел бы знать, какие изменения будут внесены до их применения!
Ответы
Ответ 1
См. последний тайник:
git stash show -p
См. произвольный код:
git stash show -p [email protected]{1}
Из git stash
manpages:
По умолчанию команда показывает diffstat, но она принимает любые формате, известном как git diff (например, git show-show -p stash @{1} для просмотра второй самый последний тайник в форме патча).
Ответ 2
Чтобы увидеть последний тайник:
git stash show -p
Чтобы увидеть произвольный код:
git stash show -p [email protected]{1}
Кроме того, я использую git diff для сравнения кошелька с любой веткой.
Вы можете использовать:
git diff [email protected]{0} master
Чтобы увидеть все изменения по сравнению с мастером ветки.
Или вы можете использовать:
git diff --name-only [email protected]{0} master
Чтобы легко находить только измененные имена файлов.
Ответ 3
Если ветвь, в которой ваши спрятанные изменения основаны на изменениях, тем временем, эта команда может быть полезна:
git diff [email protected]{0}^!
Это сравнивает тайник с фиксацией, на которой он основан.
Ответ 4
Если ваше рабочее дерево грязно, вы можете сравнить его с кошельком, сначала совершив грязное рабочее дерево, а затем сравните его с приложением. Впоследствии вы можете отменить фиксацию с грязным рабочим деревом (поскольку вы можете не захотеть иметь эту грязную фиксацию в своем журнале фиксации).
Вы также можете использовать следующий подход для сравнения двух скрепок друг с другом (в этом случае вы просто сначала нажимаете одну из стачек).
-
Зафиксируйте свое грязное рабочее дерево:
git add .
git commit -m "Dirty commit"
-
Сбросьте тайник с этим фиксацией:
git diff HEAD [email protected]{0}
-
Затем, после этого, вы можете вернуть фиксацию и вернуть ее в рабочий каталог:
git reset --soft HEAD~1
git reset .
Теперь вы разобрали грязное рабочее дерево со своим кошельком и вернулись туда, где вы были изначально.
Ответ 5
@Magne - это единственный ответ (очень поздний), который дает наиболее гибкую/полезную интерпретацию вопроса, но он немного сложнее, чем необходимо. Вместо фиксации и сброса просто спрячьте свою рабочую копию, сравните, а затем распакуйте.
git stash save "temp"
git diff [email protected]{0} [email protected]{1}
git stash pop
Это показывает разницу между вершиной стека stash и вашей рабочей папкой, временно делая изменения рабочей папки стать вершиной стека stash (stash @{0}), перемещая оригинальную верхнюю часть вниз на одну (stash @{1} ) затем сравнив, используя исходную вершину в позиции "новый набор", чтобы увидеть изменения, которые могут возникнуть в результате применения его поверх текущей работы.
"Но что, если у меня нет текущей работы?" Тогда вы в нормальном скучном деле. Просто используйте ответ @Amber
git stash show
или @czerasz ответ
git diff [email protected]{0}
или признать, что копить и расстегивать быстро и легко в любом случае, просто распакуйте изменения и осмотрите их. Если вы не хотите, чтобы они в данный момент выбрасывались (текущий индекс/рабочая папка меняется). В полном объеме это
git stash apply
git diff
git reset
git checkout
Ответ 6
Это работает для меня на git версии 1.8.5.2:
git diff stash HEAD
Ответ 7
Если у вас есть инструменты для diff (например, для сравнения)
git difftool stash HEAD
Ответ 8
Объединив то, что я узнал в этом потоке, и этот, когда я хочу увидеть "что находится внутри кошелька", я сначала запускаю:
git stash show [email protected]{0}
Это покажет, какие файлы были изменены. Затем, чтобы получить хороший визуальный diff в diffftool, я делаю:
git difftool --dir-diff [email protected]{0} [email protected]{0}^
При этом будут отображаться все отличия сразу от заданного штампа против его родителя.
Вы можете настроить инструмент diff в ~/.gitconfig
, например. с Meld:
...
[diff]
tool = meld
Ответ 9
FWIW
Это может быть немного избыточным для всех других ответов и очень похоже на принятый ответ, который находится на месте; но, возможно, это поможет кому-то.
git stash show --help
предоставит вам все, что вам нужно; включая информацию о показе.
показать [<stash> ]
Покажите изменения, записанные в кошельке, как разницу между сохраненным состоянием и исходным родителем. Когда нет, отображается последний. По умолчанию команда показывает diffstat, но она примет любой формат, известный как git diff (например, git stash show -p stash @{1}, чтобы просмотреть второй самый последний тайник в патч-форме). Вы можете использовать переменные конфигурации stash.showStat и/или stash.showPatch для изменения поведения по умолчанию.
Ответ 10
Один из способов сделать это, не перемещая что-либо, - воспользоваться тем, что patch
может читать git diff (в основном, unified diff)
git stash show -p | patch -p1 --verbose --dry-run
Это покажет вам пошаговый предварительный просмотр того, что обычно делает патч. Дополнительным преимуществом этого является то, что патч не помешает самому записать патч в рабочее дерево, если по какой-то причине вам просто нужен git, чтобы замолчать о коммитах перед изменением, продолжайте и удалите --dry- бегите и следуйте многословным инструкциям.
Ответ 11
Она список заначки
git stash list
[email protected]{0}: WIP on feature/blabla: 830335224fa Name Commit
[email protected]{1}: WIP on feature/blabla2: 830335224fa Name Commit 2
Так что получите номер тайника и сделайте:
Ты можешь сделать:
git stash show -p [email protected]{1}
Но если вам нужен diff (это другое, чтобы показать тайник, вот почему я пишу этот ответ. Diff
рассмотрите текущий код в вашей ветке и show
просто показать, что вы будете применять)
Ты можешь использовать:
git diff [email protected]{0}
или же
git diff [email protected]{0} <branch name>
Еще одна интересная вещь:
git stash apply
git stash apply [email protected]{10}
Это применяет тайник, не удаляя его из списка, вы можете git checkout.
удалить эти изменения или, если вы счастливы, git stash drop [email protected]{10}
чтобы удалить тайник из списка.
Отсюда я никогда не рекомендую использовать git stash pop
и использовать комбинацию git stash apply
и git stash drop
Если вы применяете stash в неправильной ветке... ну, иногда трудно восстановить ваш код.
Ответ 12
На всякий случай, чтобы сравнить файл в рабочем дереве и в тайнике, используйте команду ниже
git diff [email protected]{0} -- fileName (with path)