Как сквош совершает в git после того, как они были нажаты?
это дает хорошее объяснение раздавливания нескольких коммитов:
http://git-scm.com/book/en/Git-Branching-Rebasing
но это не работает для коммиты, которые уже были вытеснены. Как я могу раздавить самые последние несколько коммитов как в моих локальных, так и в удаленных репозиториях?
EDIT: когда я делаю git rebase -i origin/master~4 master, оставить первый как pick, установите остальные три как squash, а затем выйти (через c-x c - c в emacs), I получить:
$ 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. Я ожидал, что мой редактор будет перезапущен, чтобы я мог ввести сообщение фиксации. Что я делаю не так?
5 ответов:
сквош совершает локально с
git rebase -i origin/master~4 masterа затем сила толчка с
git push origin +master
разницу между
--forceи+из документации
git push:отметим, что
--forceприменяется ко всем ссылкам, которые нажимаются, следовательно, используя это сpush.defaultзначениеmatchingили с несколькими пуш пункты назначения, настроенные с помощьюremote.*.pushможет перезаписать ссылки другие чем текущий филиал (включая местные ссылки, которые строго отстают их удаленный аналог). Чтобы принудительно нажать только на одну ветку, используйте+перед refspec нажать (напримерgit push origin +masterв силу толчок кmasterфилиал).
на ветке я смог сделать это так (для последних 4 коммитов)
git checkout my_branch git reset --soft HEAD~4 git commit git push --force origin my_branch
много проблем можно избежать, только создав
branchдля работы на не работая наmaster:
git checkout -b mybranchследующие работы для
remoteсовершает уже нажал & смесьremotepushed commits /localсовершает только:# example merging 4 commits git checkout mybranch git rebase -i mybranch~4 mybranch # at the interactive screen # choose fixup for commit: 2 / 3 / 4 git push -u origin +mybranchу меня тоже есть некоторые вытяните Примечания запроса что может быть полезным.
незначительная разница в принятом ответе, но у меня было много трудностей с раздавливанием и, наконец, получил его.
$ git rebase -i HEAD~4
- на открывшемся интерактивном экране замените pick С сквош в верхней части для всех коммитов, которые вы хотите раздавить.
- сохранить и закрыть редактор через
esc --> :wqнажмите на пульт дистанционного управления с помощью:
$ git push origin branch-name --force
git rebase -i masterвы получите редактор vm open и msgs что-то вроде этого
Pick 2994283490 commit msg1 f 7994283490 commit msg2 f 4654283490 commit msg3 f 5694283490 commit msg4 #Some message # #some moreздесь я изменил выбор для всех других коммитов на "f" (расшифровывается как fixup).
git push -f origin feature/feature-branch-name-xyzэто исправит все коммиты для одного коммита и удалит все другие коммиты . Я сделал это, и это помогло мне.
Comments