Разделение «смешанной» грязной ветви на несколько чистых веток - PullRequest
0 голосов
/ 09 января 2019

Некоторое время у меня был плохой рабочий процесс git - я внес изменения как для субъекта A, так и для субъекта B и субъекта C в одном и том же dirtybranch, а также фактически в смешанных коммитах.

Я хочу прояснить это, чтобы у меня были чистые значения branchA, branchB и branchC для каждого из них, чтобы впоследствии я мог сделать отдельные запросы на слияние для апстрима.

Я уже создал ветвь A, использовал git cherry-pick --no-commit master..dirtybranch, а затем просто вручную удалил изменения, касающиеся темы B и C. Это работает, хотя это не элегантно, и я мог бы сделать то же самое для предметов B и C, хотя это выглядит более участие (потому что они более тесно перепутаны в коде).

Поэтому мой вопрос:

  • Есть ли более элегантный (т.е. более простой) способ сделать это, особенно когда вам нужно пройтись по файлу построчно, чтобы выбрать изменения, которые вы хотите сохранить (графический интерфейс?)? Я знаю, например. meld или kdiff, но я не уверен, как их применять здесь.
  • Поскольку я уже «выбрал» изменения для субъекта A в branchA, есть ли способ выбрать изменения, начиная с dirtybranch, например, до. branchB "кроме" изменений, которые я уже внес в branchA? (а также, dirtybranch -> branchC "за исключением" branchA и branchB)

1 Ответ

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

Я уже создал ветку A, использовал git cherry-pick --no-commit master..dirtybranch, а затем просто вручную удалил изменения, касающиеся темы B и C.

Аналогичный подход будет git reset возвращаться к точке, где dirtybrach ответвляется от master. Там вы можете создать новый branchA, сохраняя все ваши изменения без изменений и без изменений. Я обычно делаю это, если я перепутал свои коммиты и хочу реструктурировать изменения в новые коммиты.

Чтобы разделить изменения на разные ветви, вы можете найти и зафиксировать все изменения для branchA, спрятать остальные, вернуться к мастеру, создать branchB, применить шкатулку (предоставляя вам все изменения от dirtybranach, кроме из branchA), найдите и передайте изменения для branchB, и снова все это для branchC.

Это решает ваш второй пункт. Что касается графического интерфейса, чтобы сделать все это как можно проще, я могу порекомендовать только GitKraken , в котором есть довольно удобный способ выбора фрагментов или даже отдельных строк файла, который вы хотите создать.

...