Может ли Git сделать различие рабочей копии с тайником - PullRequest
47 голосов
/ 09 ноября 2011

Как мне отличить мою текущую рабочую копию от тайника?

Мой вариант использования: моя рабочая копия уже содержит подмножество изменений в моем stash@{0}, но я не хочу применять все изменения в stash@{0}. Я хочу сделать diff, чтобы определить, какие желательные изменения в stash@{0} все еще отсутствуют в моей рабочей копии.

Ответы [ 9 ]

36 голосов
/ 09 ноября 2011

Если это был ваш последний тайник, git diff stash@{0} сделает это.Если нет, вы можете использовать git stash list, чтобы получить индекс, с которым вы хотите сравнить.

14 голосов
/ 19 марта 2014

Я думаю, что OP хотел получить ответ, чтобы увидеть, в чем отличие хранилища, кроме файлов, присутствующих в рабочей копии.

Следующая команда показывает, что содержит хранилище.

git stash show -p stash@{0}
8 голосов
/ 26 июля 2016

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

git add -A                    # Stage all changes in your working copy.
git stash save --keep-index   # Stash your working copy and leave it intact
git diff stash@{0} stash@{1}

Чтобы избавиться от сундука, который вы только что сделали для разборки, используйте git stash pop или git stash drop stash@{0}.

Если вы хотитевместо этого используйте коммит, см. @ ответ Магне .

8 голосов
/ 21 января 2013

Если ваше рабочее дерево грязное , вы можете сравнить его с тайником, сначала зафиксировав грязное рабочее дерево, а затем сравнив его с тайником.После этого вы можете отменить фиксацию вашего рабочего дерева (чтобы сохранить историю в чистоте).

  • Зафиксировать ваше грязное рабочее дерево:

    git add .
    git commit -m "Dirty commit"
    
  • Разберем тайник с этим коммитом:

    git diff stash@{0}
    
  • Затем, после этого, вы можете отменить коммит и вернуть его в рабочий каталог:

    git reset --soft HEAD~1
    git reset .
    

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

3 голосов
/ 05 февраля 2019

Вы можете использовать git stash show -l. Он показывает, что вы хотите, без дополнительного тайника или коммита.

2 голосов
/ 19 июня 2018

Чтобы сделать различие между файлом или папкой, присутствующими в рабочем каталоге, с этим в хранилище, вы можете сделать:

git diff stash@{0} -- /path/to/fileorfolder

Здесь stash@{0} просто представляет коммит HASH, поэтому он работает точно так же, как git diff. stash@{0} это просто обработчик.

1 голос
/ 06 декабря 2016

Вы можете использовать команду Unix diff в сочетании с двумя командами Git, вот так:

diff <(git diff) <(git stash show -p stash@{0})

Конечно, вы можете изменить тайник @ {0} на любой другой тайникхочу.Эта команда фактически сравнивает фактический рабочий каталог (git diff) с одним из ваших тайников.

ОБНОВЛЕНИЕ

Вы также можете установить colordiff иувидеть гораздо лучший результат:

Установка:

  • Ubuntu / Debian: sudo apt-get install colordiff
  • OS X: brew install colordiff

, а затем просто измените команду на:

colordiff <(git diff) <(git stash show -p stash@{0})
0 голосов
/ 06 февраля 2017

Да, вы можете использовать git stash show -p, отметьте это Git diff против тайника для получения дополнительной информации.

0 голосов
/ 14 декабря 2015

Не уверен, что хотел ОП, но я использую это, чтобы увидеть, каков фактический набор различий тайника:

git difftool stash@{0}^!

или

git diff stash@{0}^!

или

git diff stash@{0}^! > patchfile

...