2010-10-21 14 views
2

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

Просто, чтобы было ясно, я совершил A с кусками A1, A2, A3 и совершил B с помощью кусков B1, B2, B3. Я хочу проверить версию, предшествующую A, и иметь новый commit C с hunks A1, A2, B2 и новый commit D с hunks B1, B3, A3.

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

ответ

2

Посмотрите на git rebase, splitting commits.

+3

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

+3

Другим важным советом является то, что вы можете использовать 'git stash', чтобы много помочь: после того, как вы сбросите HEAD ^', чтобы переместить отзыв ветви, добавьте то, что вы хотите для своего первого коммита, запустите 'git stash --keep -index', чтобы отбросить все незаполненные изменения, но сохранить индекс, проверить, что там, совершить, а затем использовать «git stash pop», чтобы вернуть остальное. Таким образом, вы можете чисто проверить, что вы совершаете, как будто вы разумно сделали только эти изменения. Намочите, промойте, повторите! – Cascabel

+0

@Jefromi, я думаю, вы должны были разместить эти комментарии как ответ самостоятельно. Это хороший совет, на мой взгляд. –

4

Похоже, вы хотите совершенно разные наборы коммитов. Если это так, просто вернитесь к началу координат (например, git reset origin/master), а затем используйте git add -p и git commit повторно, пока вы не закончите. Вы можете использовать git stash для проверки каждой фиксации после совершения, если это необходимо, и использовать git -amend для устранения любых ошибок.

В качестве альтернативы, git rebase -i может фактически разделить фиксации. Прочтите страницу руководства, это не сложно, но немного надоедает.

 Смежные вопросы

  • Нет связанных вопросов^_^