У меня есть восемь коммитов на ветке, которые я хотел бы послать по электронной почте некоторым людям, которые еще не являются просветленными. Пока что все, что я делаю, либо дает мне 8 файлов патчей, либо начинает давать мне файлы патчей для каждого коммита в истории ветки, с самого начала. Я использовал git rebase --interactive для сжатия коммитов, но теперь все, что я пытаюсь, дает мне миллионы патчей с начала времен. Что я делаю не так?
git format-patch master HEAD # yields zillions of patches, even though there's
# only one commit since master
git
patch
squash
git-squash
skiphoppy
источник
источник
Ответы:
Я бы порекомендовал сделать это на одноразовой ветке следующим образом. Если ваши коммиты находятся в ветке "newlines", и вы уже переключились обратно на свою "master" ветку, это должно сработать:
Надеюсь это поможет!
источник
git comit -m "My squashed commits"
иначе добавило бы другие неотслеживаемые файлыgit checkout 775ec2a && git checkout -b patch && git merge --squash branchname
Просто добавьте еще одно решение в банк: если вы используете это вместо:
Тогда все равно будет 8 патчей ... но все они будут в одном патч-файле и будут применяться как один с:
источник
git rebase -i ...
и раздавить их всех до одного.Я всегда использую Git Diff, так что в вашем примере, что-то вроде
источник
git log
, см. мой ответ для примераЭто адаптация ответа Адама Александра, если ваши изменения в мастер ветке. Это сделать следующее:
источник
Как вы уже знаете, a
git format-patch -8 HEAD
даст вам восемь патчей.Если вы хотите, чтобы ваши 8 коммитов отображались как один, и вы не против переписать историю своей ветви (
o-o-X-A-B-C-D-E-F-G-H
), вы можете:или, и было бы лучшим решением, воспроизвести все ваши 8
X
коммитов из (коммит до ваших 8 коммитов) в новой веткеТаким образом, у вас есть только один коммит в ветке «delivery», и он представляет все ваши последние 8 коммитов
источник
git merge master
просто делает быструю перемотку вперед и не сводит коммитов в один. Перейдите на,git merge --squash master
чтобы получить все коммиты раздавленными и видимыми в области постановки. Ваш поток будет работать с этим изменением. (Я использую GIT версии 2.1.0.)Формат-патч между двумя тегами:
источник
Самый простой способ - использовать
git diff
и добавлять,git log
если вы хотите получить сообщение с комбинированной фиксацией, которое выведет метод squash. Например, чтобы создать патч между коммитомabcd
и1234
:Тогда при применении патча:
Не забывайте
--binary
аргументgit diff
при работе с нетекстовыми файлами, например изображениями или видео.источник
Основываясь на ответе Адама Александра:
источник