Как удалить предыдущие коммиты и сохранить те, которые являются моими изменениями? - PullRequest
0 голосов
/ 11 января 2019

У меня есть одна ветвь (названная my-working-branch), над которой я работал, в которой есть несколько коммитов моих изменений. Когда я зафиксировал и передал свои изменения в master, таким образом создал запрос на извлечение для слияния рецензента, внутри запроса извлечения я увидел свои коммиты, которые я хочу сохранить и объединить в master вместе со многими другими ранее зафиксированными изменениями. до моего, что я никогда не менялся и был совершен другим автором. Я использую Bitbucket, и поэтому некоторые коммиты выделены серым цветом с буквой «M», что означает, что коммит уже объединен в master, а некоторые без «M» и не выделены серым цветом, если не объединены, как мои коммиты из my-working-branch.

Теперь, когда вы понимаете мою ситуацию, я хочу сохранить первые четыре недавних коммита в запросе на удаление и удалить все остальные коммиты в пределах my-working-branch (никто не работал над этой веткой и не делал изменения в него, кроме меня), который, кажется, добавлен в предыдущую дату, которая отображается в моем запросе на удаление, который я создал. Я рассмотрел другие вопросы, связанные с использованием stackoverflow, касающиеся использования команды rebase, но, насколько я понимаю, это деструктивная команда, которая переписывает историю. Я мог бы использовать его, если это влияет только на мою локальную ветвь и запрос на включение, чтобы отразить это, но я хотел быть абсолютно уверенным, что это правильное направление, как при сжатии всех этих предыдущих коммитов и сохранении только первых четырех последних коммитов. что я изменил, что должно оставить изменения только для тех четырех коммитов, а остальные не отображаются в запросе на включение, чтобы затем объединиться с мастером.

Какими будут соответствующие действия в этой ситуации?

Например: (d74981d0dcd..041727236cb первые четыре коммита сохранить, а остальные после этого я хочу удалить из запроса извлечения)

enter image description here

1 Ответ

0 голосов
/ 11 января 2019

относительно использования команды rebase, но, насколько я понимаю, это деструктивная команда, которая переписывает историю

Это не имеет значения, поскольку вы являетесь единственным, кто работает в этой PR-ветви.

Примечание: вы не выдвигаете PR-ветвь в master, а в одну и ту же PR-ветку на удаленной стороне и делаете PR из этой ветви, а не из master.

Добавьте удаленный «апстрим» для ссылки на ваш исходный репо и перебазируйте вашу ветку поверх апстрима / мастера

git remote add upstream /url/original/repo
git fetch upstream
git checkout my-working-branch
git rebase upstream/master
git push --force -u origin my-working-branch

Если у вас уже есть PR из вашей исходной / основной ветки, вместо этого сделайте

git push --force origin my-working-branch:master

Опция перебазирования будет:

git rebase -i --onto upstream/master 2f1...my-working-branch

Это будет:

  • оформить заказ my-working-branch,
  • сбросьте его на upstream/master и
  • воспроизвести все коммиты после 2f1 (2f1 исключено), до my-working-branch HEAD, который был d74.
...