Как я могу отформатировать патч с тем, что я прячу

В git я прячу свои изменения. Возможно ли, что я могу создать патч с тем, что я спрятал? А затем применить этот патч в каком-то другом репозитории (моего коллеги)?

Я знаю git format-patch -1, но думаю, что это за то, что я совершил. Но я ищу то же самое для изменений, которые я спрятал.

И как я могу применить патч в другом репозитории?


person silverburgh    schedule 29.01.2010    source источник


Ответы (5)


Конечно, git stash show поддерживает это:

git stash show -p

Итак, используйте

git stash list

чтобы узнать номер тайника, который вы хотите экспортировать как патч, то

git stash show -p stash@{<number>} > <name>.patch

чтобы экспортировать его.

Например:

git stash show -p stash@{3} > third_stash.patch
person Greg Hewgill    schedule 29.01.2010
comment
У меня есть связанный с этим вопрос о применении патча. Допустим, мой патч затрагивает несколько файлов. Есть ли способ применить патч «в интерактивном режиме»? Выберите, к каким файлам патча я должен применить патч? Я могу это сделать? - person silverburgh; 30.01.2010
comment
@silverburgh: я быстро просмотрел man patch и не нашел никаких вариантов для интерактивного применения патча. Однако, поскольку файлы патчей сами по себе являются обычными текстовыми файлами, обычно нужно отредактировать патч в текстовом редакторе, чтобы вырезать соответствующие части для применения с помощью patch. В качестве альтернативы, если вы применяете патч в другом репозитории Git, вы можете применить его все, а затем выборочно git checkout файлов, которые вы не хотите изменять (git checkout с именем файла отбрасывает неустановленные изменения). - person Greg Hewgill; 30.01.2010
comment
@silverburgh, вы можете ограничить набор исправленных файлов, используя параметры --exclude и --include приложения git. - person Kelvin; 16.08.2011
comment
@silverburgh, вы можете сделать следующее, если у вас есть патч. примените патч полностью, а затем выполните git add --interactive ${YOUR_FILES}, и это даст вам возможность частично зафиксировать. - person Alexander Oh; 08.02.2013
comment
Мне нужно было использовать это, чтобы отключить цвет: git stash show -p --color=never › wip.patch - person Paul Beckingham; 02.04.2013
comment
Спасибо. Это сработало для меня: git stash show -p stash@{1} > patch.txt - person Ryan; 30.05.2014
comment
Это не сработало, если в вашем тайнике были новые файлы! См. stackoverflow.com/questions/ 22818155/ - person Ryan; 17.01.2019
comment
фильтр stash должен быть перед параметром p, по крайней мере, в Windows git: git stash show stash@{<number>} -p > <name>.patch - person Greg; 04.03.2021

Этот ответ содержит информацию как о сохранении исправления, так и о его применении там, где вы хотите его использовать.

Чтобы спрятать результат в файл:

 git stash show -p --color=never > my-patch-name.patch

Убедитесь, что патч выглядит хорошо:

git apply --stat my-patch-name.patch

Убедитесь, что нет ошибок:

git apply --check my-patch-name.patch

Применить патч

git apply my-patch-name.patch
person calvinf    schedule 14.04.2015
comment
Это работало для меня с файлами с простым текстовым кодом, но мне приходилось учитывать пробелы. Убедитесь, что исправление выглядит корректно: git apply --check --ignore-space-change --ignore-whitespace my-patch-name.patch Примените исправление: git apply --ignore-space-change --ignore-whitespace my-patch-name.patch - person Craig Boland; 16.09.2015
comment
Красивое и лаконичное объяснение. Чтобы это сработало, я должен был находиться в корне репозитория при применении патча, иначе git apply не нашел diff. - person Max; 28.02.2019

Использовать

$> git stash list
stash@{0}: WIP on master: 84fx31c Merged with change to /public/
stash@{1}: WIP on master: 463yf85 FlupResource: also takes json as a query parameter

чтобы получить список ваших недавно спрятанных вещей. Git фактически создает объекты коммитов, когда вы их прячете.

Они являются коммитами, как и все остальное. Вы можете ознакомиться с ними в ветке:

$> git checkout -b with_stash stash@{0}

Затем вы можете опубликовать эту ветку, и ваш коллега может объединить или выбрать этот коммит.

person peritus    schedule 30.01.2010

Приведенные выше решения не будут работать для двоичных данных. Следующее добавляет поддержку для него:

git stash show stash@{0} -p --binary

Изменить

Примечание. Я просто хотел добавить комментарий к приведенным выше ответам, но моей репутации недостаточно.

person Davide Guerri    schedule 10.10.2014

Я считаю, что это может быть одно из недавних обновлений Git. вам больше не нужно исправлять спрятанные изменения. вы можете просто применить свои спрятанные изменения в одной ветке к другой.

скажем, в ветке A вы спрятали некоторые изменения, называемые stash@{1}.

теперь вы переключаетесь на ветку B. вы можете просто сделать:

$git stash apply stash@{1}

это относится к вашей ветке A, которая переходит на ветку B.

person stucash    schedule 05.01.2017