В этом случае ваша локальная ветвь, скорее всего, находилась в исходном (предварительно очищенном) состоянии, а удаленная ветвь была в измененном состоянии.После переписывания истории вы должны удалить все локальные копии или сбросить локальную ветвь на удаленную.Однако теперь вам нужно выполнить некоторую очистку самостоятельно.
Мой локальный сервер был чистым, пульт не был
Если вы очистили свою локальную ветку, вы в конечном итоге получили следующее:
M─┐ eeeee Merge branch 'master' of ...
│ o ddddd Original Commit 2
│ o ccccc Original Commit 1
o │ bbbbb Commit 3
o │ aaaaa Cleaned Commit 2
o │ 99999 Cleaned Commit 1
o─┘ 88888 Previous Commit
Здесь вам нужно избавиться от 99999
и aaaaa
.Вы можете сделать это с интерактивной перебазировкой, как с ответом нитишагара , или вы можете сделать это, сбросив ветку:
git reset --hard bbbbb
git push --force origin master
Пульт был чистым, мой локальный не был
Если вы очистили пульт, ваша история, вероятно, выглядит следующим образом:
M─┐ eeeee Merge branch 'master' of ...
│ o ddddd Commit 3
│ o ccccc Original Commit 2
│ o bbbbb Original Commit 1
o │ aaaaa Cleaned Commit 2
o │ 99999 Cleaned Commit 1
o─┘ 88888 Previous Commit
В этом случае aaaaa
был предыдущим origin/master
, а ddddd
был вашим локальным филиалом.То, что вы хотите получить в итоге:
o ddddd Commit 3
o─┘ aaaaa Cleaned Commit 2
o 99999 Cleaned Commit 1
o 88888 Previous Commit
Вы можете сделать это с помощью одной перебазировки (вы можете даже добавить -i
, чтобы подтвердить, что она делает то, что вы ожидаете):
git checkout master
git rebase --onto aaaaa ddddd^
git push --force origin master
Это можно использовать независимо от того, сколько коммитов вы положили поверх вашей локальной ветки;вы можете ссылаться на ccccc
напрямую (самый последний локальный коммит, который вы хотите удалить), или ddddd^
(родительский коммит первого коммита, который вы хотите сохранить).
Внимание - принудительное нажатие на master
Имейте в виду, что вы переписываете историю снова в основную ветку.Учитывая, что ваши исходные коммиты содержат конфиденциальный файл, и вы ранее были рады переписать историю мастера, чтобы избавиться от этого, вероятно, вы можете сделать это снова.Просто убедитесь, что другие пользователи этого хранилища знают ситуацию.