Как объединить несколько задержек в git
Это конвейер на ветке frontend
за последние две недели.
| [email protected]{3}
- это весь код с [email protected]{1}
(за исключением двух крошечных коммитов)
| Крошечный коммит
| Крошечная передача
| Огромная сумма денег совершена две недели назад, теперь переустановлена и переместилась на [email protected]{1}
В настоящее время мое рабочее дерево чист.
[email protected]{1}
- это содержимое от массового коммита общего кода разработки две недели назад (это должно было быть спрятано в первую очередь). Эта фиксация была отменена и перемещена в stash.
[email protected]{3}
- это новейшая работа над этим деревом с [email protected]{1}
(минус несколько изменений, которые были совершены).
Мне нужно объединить эти два штампа вместе в моем рабочем дереве, чтобы я мог сделать несколько коммитов из этого огромного пула работы.
Я побежал git stash apply [email protected]{1}
, затем я попробовал:
git stash apply [email protected]{3}
git stash show -p | git stash apply [email protected]{3}
но я получаю "грязное рабочее дерево" в обоих случаях. Как я могу объединить эту работу вместе? Поскольку [email protected]{3}
является более новым, я хочу, чтобы он заменил [email protected]{1}
везде, где есть конфликты.
Ответы
Ответ 1
Вы можете применить только кэш, если в рабочем дереве нет конфликтов с измененными файлами, поэтому, во-первых, убедитесь, что в git status
нет измененных файлов, если есть, зафиксировать их. Затем выполните:
git stash apply [email protected]{1}
git commit -a
# Enter your commit message
git stash apply [email protected]{3}
Затем вы можете либо сделать новую фиксацию, либо изменить предыдущую, чтобы объединить их. Возможно, вам придется разрешать конфликты слияния после каждого применения.
Кроме того, если вы когда-нибудь решили использовать git stash pop
, а не apply
, обратите внимание, что [email protected]{3}
станет [email protected]{2}
, поскольку первый был удален.
Ответ 2
Это немного связано, но это почти всегда работает:
-
Попасть в первый тайник
$ git stash pop
-
Временно зафиксировать изменения с первого тайника
$ git add . && git commit -am 'WIP'
-
Попасть во второй тайник
$ git stash pop
-
Отменить временную фиксацию, сохраняя внесенные изменения
$ git reset --soft HEAD^
Ответ 3
Лучше всего использовать git stash show -p [email protected]{whatever} > stash-{whatever}.diff
, а затем использовать git apply
для каждого из них.
Ответ 4
У меня была аналогичная проблема, и я решил это так.
Используйте git stash pop
, чтобы применить одно из заданий. Затем создайте патч этого тайника с помощью git diff -p > ../stash.diff
. Затем вы можете reset создать свое рабочее дерево (или снова вставить изменения), а другой трюк - git stash pop [email protected]{1}
. Если вы примените свой патч в этот момент, вы можете "объединить" два разных штампа.
Вероятно, вам удастся разрешить некоторые конфликты. Если все пойдет хорошо, вы можете отменить спрятанные изменения.