Поправка коммита, которая редактируется как часть перебазирования в magit
Я использую Emacs +, во многих отношениях это невероятный режим работы с git. Есть один аспект моего рабочего процесса, который я не могу сопоставить с этим, и, следовательно, с этим вопросом.
Иногда у вас есть коммит, который должен быть переработан в отдельные коммиты. Я могу интерактивно перебазировать мои коммиты с помощью magit и объявить о своем намерении редактировать указанный коммит.
Теперь мне нужно переключиться на git gui, выбрать "ammend last commit", который показывает мне поэтапные изменения, и удалить те части, которые я хочу сделать отдельным коммитом. Затем я фиксирую, ставлю исключения и снова фиксирую - вуаля, у меня есть новый коммит в моей истории.
Я до сих пор не нашел способ сделать это с помощью Emacs. Есть намеки?
1 ответ
После того, как вы начнете перебазирование, вместо того, чтобы идти к графическому интерфейсу, сделайте magit-reset-head для HEAD~1, это даст вам возможность отменить изменения и подготовить и зафиксировать, как вам нужно, прежде чем, наконец, продолжить ребаз из статусный буфер.
Пример сценария рабочего процесса:
- зафиксировать изменения в файле A (commit 1)
- зафиксировать изменения в файле B и файле C (зафиксировать 2)
- зафиксировать изменения в файле D (зафиксировать 3)
- понимать, что вы хотите, чтобы изменения в файле B и файле C были отдельными коммитами
- бежать
magit-log
- начать интерактивную перебазировку (E) при коммите 2.
- укажите, что вы хотите отредактировать (e) зафиксировать 2 и завершить (CcCc)
- вернуться в буфер состояния magit.
- бежать
magit-reset-head
(х), укажитеHEAD~1
в срочном порядке. - вы увидите изменения для коммита 2-го этапа.
- отменить внесение изменений в файл C.
- зафиксировать внесенные изменения для файла B.
- подготовить и зафиксировать изменения в файле C.
- продолжить и закончить ребаз с помощью RC
Теперь у вас будет четыре коммита, каждый из которых меняет один файл в порядке A, B, C, D.