Переместить старые коммиты в новую отдельную ветвь - PullRequest
1 голос
/ 15 марта 2019

Я новичок в Git и хотел бы помочь. Этот вопрос похож на Переместите самые последние коммиты в новую ветку с помощью Git , но этот вопрос спрашивает о самых последних коммитах. Это не то, что мне нужно. Позвольте мне объяснить подробнее ...

У меня есть ветка, давайте назовем ее веткой Feature1. Родителем Feature1 является основная ветвь, а Feature1 имеет следующие коммиты:

  • A
  • B
  • C
  • D
  • E
  • F

Однако коммиты A и B на самом деле не принадлежат к этой конкретной ветке и должны были действительно находиться в другой ветке, которая была бы дочерней по отношению к ветви Feature1. Давайте назовем эту предполагаемую ветвь, к которой относятся A и B, как ветку Feature2 Опять же, эта ветвь должна исходить от ветви Feature1, а НЕ от основной ветви.

Эта ветка Feature2 еще не создана. Тем не менее, содержимое Feature1 уже было удалено. Мой вопрос в основном таков: как мне переместить коммиты A и B в новую ветку с именем Feature2?

Примечание: C, D, E и F не полагаются на A и B. A и B изменяют совершенно другие файлы, чем другие коммиты в ветви.

1 Ответ

1 голос
/ 15 марта 2019

Если предположить, что A и B являются , а не самой последней фиксацией, у вас есть:

m--m                   (master)
    \
      a--b--c--d--e--f (feature1)

Поскольку функция feature1 уже была передана, было бы рискованно перебазировать ее, чтобы переписать ееистория.

Затем вы можете вернуть a - b для того, чтобы от Feature1 до не отобразились эти изменения:

git checkout feature1
git revert a^..b

m--m                      (master)
    \
      a--b--c--d--e--f--g (feature1)

Затем вы можетесоздайте ветку feature2 из feature1 и cherry-pick a - b на нем:

git checkout -b feature2
git cherry-pick a^..b

m--m                      (master)
    \
      a--b--c--d--e--f--g (feature1)
                         \
                          a'--b' (feature2)
...