Это дает хорошее объяснение раздавливания нескольких коммитов:
http://git-scm.com/book/en/Git-Branching-Rebasing
но это не работает для коммитов, которые уже были переданы. Как раздавить последние несколько коммитов в локальных и удаленных репозиториях?
РЕДАКТИРОВАТЬ: Когда я это сделаю git rebase -i origin/master~4 master
, оставлю первый как pick
, установить остальные три как squash
, а затем выйти (через cx cc в emacs), я получаю:
$ git rebase -i origin/master~4 master
# Not currently on any branch.
nothing to commit (working directory clean)
Could not apply 2f40e2c... Revert "issue 4427: bpf device permission change option added"
$ git rebase -i origin/master~4 master
Interactive rebase already started
где 2f40 - pick
коммит. И теперь ни один из 4 коммитов не появляется в git log
. Я ожидал, что мой редактор будет перезапущен, чтобы я мог ввести сообщение коммита. Что я делаю неправильно?
git push --force origin master
git rebase -i origin/master
, и на самом деле хочет знать, как перебазировать коммиты дальше, чем, напримерgit rebase -i origin/master~20 master
.+
форсирует только refspec, которому он предшествует.--force
заставит все refspecs выдвигаться. Пожалуйста, смотрите обновленный ответ.На ветке я смог сделать это так (за последние 4 коммита)
источник
Незначительная разница с принятым ответом, но у меня было много затруднений при раздавливании, и я наконец получил его.
esc --> :wq
Нажмите на пульт, используя:
источник
Множество проблем можно избежать, только создав
branch
для работы и не работаяmaster
:git checkout -b mybranch
Следующие работы для
remote
коммитов уже переданы и смесьremote
коммитов /local
только коммитов:У меня также есть некоторые заметки с запросом на выдачу, которые могут быть полезны
источник
git rebase -i master
вы получите редактор vm и сообщения что-то вроде этого
Здесь я изменил выбор для всех других коммитов на "f" (обозначает исправление).
git push -f origin feature/feature-branch-name-xyz
это зафиксирует все коммиты в одном коммите и удалит все остальные коммиты. Я сделал это, и это помогло мне.
источник
Когда вы работаете с Gitlab или Github, у вас могут возникнуть проблемы с этим. Вы раздавливаете свои коммиты одним из вышеуказанных методов. Мой любимый это:
выберите сквош или фикс для вашего коммита. На этом этапе вы должны проверить состояние git. И сообщение может быть:
И вы можете испытать желание потянуть это. НЕ ДЕЛАЙТЕ ЭТОГО, иначе вы окажетесь в той же ситуации, что и раньше.
Вместо этого нажмите на ваше происхождение с:
Знак + позволяет принудительно толкать только одну ветку.
источник
Для сжатия двух коммитов, один из которых уже был помещен в одну ветку, работали следующие:
По умолчанию это будет включать в себя сообщение о коммите самого нового коммита в качестве комментария к старому коммите.
источник
1)
git rebase -i HEAD~4
Разработать: Работает на текущей ветке; ГОЛОВА ~ 4 означает сжатие последних четырех коммитов; интерактивный режим (-i)
2) В этот момент редактор открыл со списком коммитов, чтобы изменить второй и последующие коммиты, заменив выбор на сквош, затем сохранив его.
вывод: Успешно перебазирован и обновлен refs /heads / branch-name.
3)
git push origin refs/heads/branch-name --force
вывод:
источник