Git: сплит коммит в другой ветке - PullRequest
4 голосов
/ 23 октября 2011

У меня следующая ситуация:

root -- A -- D ------------- H ------master
    \          \              \
     \          \              \
      - B -- C -- E -- F -- G -- I -- J -- dev

Commit 'F' содержит исправление, которое поначалу казалось не связанным с основной веткой, но через несколько недель оно оказалось важным. Все уже передано и передано.

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

  • Разделить F на 2 отдельных коммита (один для соответствующего изменения [F1], другой для другого [F2])
  • Слияние F1 с мастером

Мне не нужно изменять историю веток разработчиков.

Могу ли я сделать что-нибудь кроме ручного diff + patch?

Я представляю что-то вроде

root -- A -- D ------------- H ---K--master
    \          \      /-------\--/    
     \          \  /-F1-F2-\   \-----\        
      - B -- C -- E ------- F -- G -- I -- J -- dev

(извините за неряшливый штриховой рисунок)

1 Ответ

8 голосов
/ 23 октября 2011

Я бы сделал следующее: сначала вишневый коммит F с --no-commit в вашу основную ветку, затем внесите необходимые изменения в мастер, отбросьте все остальное. Я знаю, что это не похоже на идеальное решение, но при объединении F с мастером вы также получите все предки F (из ветви dev: E C B):

git checkout master
git stash
git cherry-pick --no-commit F
git reset && git add -p
# alternatively reset already staged changes:
git reset -p
git commit
git reset --hard
git stash pop
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...