Как я могу повторно объединить коммиты, которые были возвращены в github?
Я сделаю все возможное, чтобы кратко описать мою текущую ситуацию, и был бы очень признателен за некоторые советы.
Сегодня утром я слился с большой веткой кода, в которой произошла критическая ошибка. Чтобы отменить это, мой коллега отменил слияние (в котором было несколько коммитов) в GitHub, и после вытягивания все оказалось хорошо.
После внесения некоторых изменений в ветку функций, я хотел убедиться, что она может войти снова, поэтому я использовал "git merge master" в своей ветви функций (как я всегда делаю), чтобы убедиться, что все обновлено.
Удивительно, но результатом этого стало удаление всего нового кода, который мне нужен, чтобы слить обратно в главное репо!
Это связано с возвратом, который произошел на ветке? Просматривая журнал git, я вижу, что все коммиты все еще там. И что еще более странно, запрос на получение в github не показывает никаких оригинальных коммитов в diff, только то, что я изменил с момента возврата.
Может ли кто-нибудь помочь мне разобраться в этом?
Я знаю, что некоторые люди предлагали просто отменить возврат, но мне нужно вернуться в чистоте, так как сделанные мной изменения касаются структуры большей части кода.
2 ответа
Я столкнулся с этой же самой проблемой однажды. Мое решение, которое работало, состояло в том, чтобы "отменить возврат" до слияния мастера обратно в мою ветку.
То, что это делает, оставляет вас со всеми вашими изменениями, включая новые исправления, которые вы получили.
git checkout master
git checkout -b master-with-revert-revered
git revert <revert commit id>
git checkout fixed-branch
git merge master-with-revert-revered
После этого ваша фиксированная ветвь должна быть без проблем присоединена непосредственно к мастеру.
Я думаю, что rebase- это то, что мне нужно, просто пытаясь выяснить, как полностью удалить коммиты, которые я добавляю снова из ветви функций.
если вам нужно "удалить / объединить" коммит, вы должны использовать squash
,
Сквош - это один из вариантов перебазирования.
Для того, чтобы использовать его, вам нужно сделать интерактивный ребаз.git rebase -i HEAD~10
откроет vi (или любой другой редактор, который вы используете) и позволит вам "переставить" ваши коммиты. Вы можете удалить коммит, объединить их в один, изменить их порядок и многое другое.
Вы найдете список опций внутри vi вместе со списком коммитов, которые вы решите восстановить (в приведенном выше примере это займет последние 10 HEAD~10
)