Почему git format-patch не работает для тайников? - PullRequest
3 голосов
/ 04 января 2011

Если я запускаю

git format-patch -1 stash@{0}

, git возвращается без вывода каких-либо файлов.Почему это происходит?Как я могу сохранить тайник в формате, совместимом с git am?

Ответы [ 4 ]

4 голосов
/ 04 января 2011

Кажется, это происходит потому, что коммит stash представляется в виде слияния (между его родительским элементом и состоянием индекса в данный момент), а format-patch в коммите слияния ничего не делает.

Если вы говорите

git format-patch stash@{0}{,^}

тогда он будет выплевывать патчи между тайником и каждым родителем.

Для иллюстрации вот как выглядит тайник:

*   99aedb8 (refs/stash) WIP on master: 668ff36 initial commit
|\  
| * 6b8d77f index on master: 668ff36 initial commit
|/  
* 668ff36 (HEAD, master) initial commit
1 голос
/ 04 января 2011

Вы можете попробовать

git stash show -p > ~/Desktop/stash.patch

Это сгенерирует файл исправления на вашем рабочем столе для последнего исправления и исходного родителя.

Описано в документации git-stash под опцией показа

0 голосов
/ 15 октября 2013

Если ваши файлы хранятся с использованием git stash -u, то git stash show -p не работает

0 голосов
/ 17 августа 2011

Я могу придумать 2 способа.

Решение 1: создать ветку из тайника.Этот тип побеждает первоначальную цель функции хранения, которая заключается в том, чтобы избежать необходимости создавать отдельную ветвь.

Решение 2. Добавьте все изменения в отслеживаемые файлы в индекс перед сохранением.После сохранения запустите

git format-patch 'stash@{0}^1'..'stash@{0}^2'

, который сравнивает HEAD с индексом (на момент создания тайника).

Я не уверен, почему нельзя просто оставить файлы без добавленияиндекс и запустить git format-patch 'stash@{0}^1'..'stash@{0}'

, что похоже на то же самое.В объекте stash commit должно быть что-то особенное.В любом случае, добавление к индексу будет записывать изменения во втором родительском элементе тайника (фиксация индекса), минуя проблемы с коммитом тайника.

Дополнительные примечания: git format-patch -1 всегда будет пустым для слиянияcommit (тайники являются частным случаем коммита слияния).Я не совсем уверен, почему это так, но смотрите Git: Как создавать патчи для слияния? для более подробной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...