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)