Как я могу разделить коммит на две части после того, как я уже зафиксировал свои изменения? - PullRequest
2 голосов
/ 16 апреля 2020

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

  1. клонировать мою ветку с пульта
  2. git сброс --hard HEAD ~ 3
  3. Повторите мои изменения, но на этот раз организовать их в четыре коммита вместо 3.
  4. git pu sh -f

Я сомневаюсь, что у меня должен быть еще один git pu sh -f после шага 2? Это означает, что последовательность следующая: 1. клонировать ветку my с пульта 2. git сбросить --hard HEAD ~ 3 3. git pu sh -f (это необходимо, или я могу пропустить это и продолжить с переделать мои изменения, а затем pu sh?). 4. Повторите мои изменения, но на этот раз организуйте их в четыре коммита вместо 3. 5. git pu sh

Заранее спасибо.

1 Ответ

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

Стратегия, которую вы предлагаете, может сработать, но вам придется переделать свою работу, что больше работы над всей вашей другой работой. Так что это бесполезно.

Что вы можете сделать, это, учитывая сценарий ios, который у вас есть.

  1. Если коммит, который вы хотите разделить, является последним коммитом ( последний, который вы сделали), тогда это довольно просто.
git reset --soft HEAD^

Это сбросит ваш последний коммит, но вы сохраните все свои изменения в вашем рабочем каталоге. Тогда вы просто выбираете, какие изменения вы хотите go в одном коммите, а какие go во втором коммите (таким образом, ваш последний коммит делится на два). Тогда вам придется заставить Пу sh.

Если коммит, который вы хотите разделить, является , а не последним коммитом, то все становится немного сложнее.

Сначала извлеките коммит, который вы хотите разделить .

git checkout <sha1>

Затем сбросьте ваши изменения (как в первом сценарии)

git reset --soft HEAD^

Добавьте и зафиксируйте ваши изменения в два коммита. Теперь, в этот момент, вы успешно разбили желаемый коммит, но нет! Как насчет других коммитов поверх этого? Вам нужно cherry-pick эти коммиты по одному.

Эти коммиты не теряются. Вы все еще можете найти их в вашем git log и даже в вашем git reflog. Для каждого из этих коммитов введите git cherry-pick <sha1> и bam! Вы успешно разбили коммит на две части.

Теперь здесь все еще есть проблема. Ветвь, на которой вы были, все еще указывает на старые коммиты. Вам просто нужно переместить эту ветку, чтобы указать на текущий совет, на котором вы находитесь. Таким образом, вы можете выполнить git branch -f branch-name new-tip-commit.

Наконец, принудительно вставьте pu sh вашу ветку, чтобы на пульте были новые коммиты, split!

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