Очистка ветки истории в Git - PullRequest
1 голос
/ 24 сентября 2019

Я работаю над веткой функций в течение нескольких дней.За это время я сделал так много ошибок и совершил так много ненужных изменений кода, которые мне пришлось отменить в следующем коммите.

Наконец-то я нашел лучшее решение и теперь я готов создать Pull-запрос.Однако я не хочу, чтобы каждый мог видеть, сколько глупых коммитов я перенес в ветку.: -)

Как лучше всего создать чистый PR с последним кодом, но без всех этих коммитов?

Я использую Git в терминале.

Ответы [ 2 ]

3 голосов
/ 24 сентября 2019

Вы можете запустить интерактивную git rebase:

git rebase -i HEAD~N

, где N - количество последних коммитов в вашей истории, над которыми вы хотите выполнить действие (например, изменить сообщение о коммите, удалить коммит,и т.Вы можете найти больше информации о доступных действиях здесь .

1 голос
/ 24 сентября 2019

Если вы никогда не нажимали на ветку, то вы можете сделать интерактивную перебазировку, чтобы без проблем "раздавить" нежелательные коммиты.Если вы когда-либо выдвигали ветвь, то для выполнения перебазирования вам потребуется «принудительное нажатие» на ветвь, что может быть или не быть проблемой.

Принудительное проталкивание является проблемой, если пульт дистанционного управления настроен наЗапретить это. Вы не сможете ничего с этим поделать, если оно появится.

Принудительное нажатие может быть проблемой, если у других пользователей могут быть копии ветви в их клонах, особенно если они могут основываться на этом.В этом случае вам придется координировать свои действия с другими пользователями, для получения дополнительной информации см. Документацию git rebase в разделе «восстановление из исходной версии».https://git -scm.com / docs / git-rebase

Так что, если вышеперечисленное не позволяет вам выполнить ребазинг, вы ничего не можете сделать, и вам просто нужно установитьтщеславие «не желая, чтобы люди видели ошибки» в стороне.(Но с другой стороны, если вы когда-либо нажимали на ветку, другие уже могут видеть, что вы сделали в любом случае.)

Так что, если вы хотите продолжить перебазирование:

Предполагая, что вы создалиЕсли вы хотите переместить свою ветку к текущему главному совету (объединяя изменения с master), или

git rebase -i $(git merge-base master feature) feature
, вы можете сказать
git rebase -i master feature

.

, чтобы сохранить переписанную ветвь на основе того, где уже находится ваша ветвь.

Это вызовет текстовый редактор с «списком TODO», который дает ребазу инструкции.Каждая строка представляет коммит.Для каждого коммита, который вы хотите удалить, найдите коммит в списке, а затем измените первое слово строки СЛЕДУЮЩЕГО КОМИТА на сквош.

Например, если в списке TODO указано

pick 1111111 a good commit
pick 2222222 a bad commit
pick 3333333 revert the bad commit
pick 4444444 another good commit

и вы просто хотите оставить 1111111 и 4444444, вы должны отредактировать список так:

pick 1111111 a good commit
pick 2222222 a bad commit
squash 3333333 revert the bad commit
squash 4444444 another good commit

Это объединит 3 в коммит перед ним (2), затем объединит 4 в коммит перед ним (результатобъединение 2 и 3), так что вы остались с 1 и 4. (Изменения от 2 и 3 все еще включены, но если 3 действительно возвращает 2, то это ничего не значит.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...