Git сбросить и / или удалить коммит на удаленной ветке - PullRequest
0 голосов
/ 16 апреля 2020

У меня небольшая проблема, связанная с git. В начале проекта у меня чистый поток (рис. 1 и 2). Рисунок 1 взят из Intellij, а рисунок 2 - после выполнения команды gitk &. Как и ожидалось, мы видим те же состояния.

This image is from Intellij This image is from gitk

Но после слияния "branch3" с "master" мы понимаем что это нехорошо и хочу удалить этот коммит. Выполняем следующую команду: git reset --hard HEAD~1. Как и ожидалось, после выполнения этой команды мы находимся в следующем состоянии:

This image is from gitk after git reset

И из этого состояния мы создаем новую ветвь "branch4". До этого момента все работает как положено. Но после того, как мы пу sh "branch4" и слили его с веткой "master", мы получаем следующую проблему:

This image is from IntellijThis image is from gitk

Как вы можете видеть, у нас все еще есть "Commit on branch3" и "Merged in branch 3". Пожалуйста, посоветуйте мне, как я могу удалить эти коммиты, так как я не хочу иметь никаких записей об этих коммитах (чтобы они были похожи на первое изображение). Потому что, очевидно, git reset --hard не удаляет удаленные коммиты. Я хотел бы подчеркнуть, что нажатие было выполнено с использованием следующей команды git push --force

Какую команду я должен использовать вместо этого?

PS С git reset --soft я получил то же самое.

1 Ответ

2 голосов
/ 16 апреля 2020

Получите вашу локальную историю коммитов в точности так, как вы этого хотите Затем принудительно выведите pu sh (push --force или push -f) в каждую ветку на пульт. Это будет переписывать историю на пульте для каждой ветви, которую вы заставляете pu sh выглядеть точно так же, как и локально.

Если ваш удаленный сервер или репо git настроен на отказ от перезаписи истории, это не удастся. Вам придется изменить эту конфигурацию. (GitHub не делает этого по умолчанию, но GitLab делает. Я не знаю о bitbucket)

После того, как вы получили ветви, которые вы пытаетесь исправить, выглядишь правильно локально и на удаленном компьютере, вы может захотеть убрать следы заброшенной ветки (ваша branch3). См. Как удалить ветку Git локально и удаленно?

⚠️ Имейте в виду предостережения о переписывании истории общих ветвей :

  • Если у кого-то есть изменения в своих клонах ветвей, вы являетесь собирается заставить pu sh, объединить их может быть сложно / беспорядочно.
  • Если кто-либо внес изменения в удаленное репо, ваша сила pu sh перезапишет их. Вы можете рассмотреть git push --force-with-lease
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...