Можно ли удалить один файл (т.е. разность одного файла) из git stash с несколькими файлами

Я ищу способ удалить одно изменение из тайника, скомпилированного из нескольких изменений, кто-нибудь знает способ сделать это? Лучший способ описать это (в связи с тем, что git commit а также git stash так похожи) это то, что я хотел бы знать способ git commit --amend заначка

Все началось, когда я git stash несколько изменений перед извлечением из общего репозитория. пока я пытался git pop код из тайника, у меня был конфликт (я не мог разрешить) с файлом, который я не заботился о дуэте из-за того, что у меня был сценарий для его автоматической генерации, и меня больше интересовали другие файлы, расположенные в мой тайник

Пока я искал решение, я нашел этот вопрос: Как мне извлечь один файл (или изменения в файл) из git stash? - это казалось многообещающим, а также было дано кому-то, кто задавал мне подобный вопрос, но это не помогло...

2 ответа

Решение

Нет, невозможно удалить одно изменение из тайника - по крайней мере, с помощью команд высокого уровня, которые git stash обеспечивает. Поскольку тайник внутренне является просто коммитом, вы можете использовать низкоуровневые команды для манипулирования им, но это, вероятно, больше проблем, чем оно того стоит.

Мое эмпирическое правило таково: если вещи начинают усложняться с git stashпришло время преобразовать тайник в реальный коммит (обычно в отдельной ветке). Затем вы можете использовать все приятные команды git для управления коммитами (checkout, reset, rebase и т. Д.).

В вашем случае я бы порекомендовал такие шаги:

Если git stash pop создает конфликт, очищает вашу рабочую копию (повторно извлекает файлы с маркерами конфликта и т. д.).

Затем запустите:

git stash branch wip-branch

Это создаст и извлечет новую ветку с именем "wip-branch", начиная с коммита, при котором изначально был создан тайник. Затем будут применены изменения из тайника. Таким образом, не может быть конфликта, потому что спрятанные изменения повторно применяются к коммиту, на котором они основаны.

Теперь у вас есть реальная ветка "wip-branch" с вашими скрытыми изменениями, которые вы можете перебазировать, объединить, выбрать вишню и т. Д. В соответствии с вашим сердцем:-).

Примечание: пока я пользовался git stash регулярно я почти останавливался, потому что создание реального (временного) коммита в реальной ветке не намного больше работы и дает мне больше возможностей (не говоря уже о том, что я могу использовать правильные комментарии коммитов, поэтому я не забываю, что изменения означают).

Может быть, это проще:

  • примени свой тайник
  • git checkout файл с конфликтом (сбросить его, игнорируя любой конфликт в нем)
  • дерьмо снова
Другие вопросы по тегам