Как сквош совершает в 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. Я ожидал, что мой редактор будет перезапущен, чтобы я мог ввести сообщение фиксации. Что я делаю не так?

781   5  

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 совершает уже нажал & смесь remote pushed 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

    Ничего не найдено.