git интерактивно просматривает изменения ветки
В нашей исследовательской группе мы часто используем git для совместной написания статей (латекс). Как правило, ведущий автор имеет роль "сопровождающего" и контролирует мастер через github / gitlab, другие вносят свой вклад в ветки функций, исправляя опечатки, формулировки, разделы и т. Д. (И обычно не делают или не могут перейти к защищенному мастеру).
Допустим, история выглядит так:
A -- B -- C -- D <-- master
\
E -- F -- G <-- patch-1
Теперь, как ведущий автор / сопровождающий, я хотел бы рассмотреть изменения в ветке patch-1. Обычно это часть запроса на слияние. Если я согласен со всеми изменениями в нем, есть отличная поддержка инструментов, и я могу просто объединить. Однако иногда я хочу отклонить изменение строки. В этих случаях поддержка инструмента обычно прекращается. Возможно, я смогу нажать "изменить", но сейчас нахожусь в состоянии патча-1, и мне нужно вручную выкопать версии Б для тех изменений, которые я не хочу принимать.
Есть ли что-то вроде интерактивного коммита (git commit --interactive
) что я могу использовать, чтобы поддержать меня?
В конце я пытаюсь создать такую ситуацию:
A -- B -- C -- D -------J <-- master
\ /
E -- F -- G -- H
куда H
мой "обзорный коммит", который отменяет несоответствующие изменения E-G
а также J
мое тогда очень простое слияние.
2 ответа
На данный момент я использую следующий упрощенный (но, вероятно, неоптимальный) рабочий процесс:
git checkout -b tmp patch-1
git reset B
# now use my editor of choice that has git gutter (e.g., sublime text)
# review changes, revert those that i don't like, adapt others
# when done:
git reset patch-1
git commit -a
git checkout master
git merge tmp
git checkout patch-1
# e.g. one change you don't like is in commit G
git revert G
git reset HEAD~
# At this point you have changes _reverting_ G in the index.
# Now you work on the index to get rid of the changes reverting those in G that you DO want to keep.
git commit
git checkout master
git merge patch-1
Этот рабочий процесс несколько проще, чем у вас, с двумя бонусными баллами:
- patch-1 остается push-совместимым с пультом.
- Все первоначальные изменения вашего коллеги сохраняются, а ваши изменения явно хранятся в отдельном коммите.