Изменение коммита, редактируемого как часть перебазирования в magit

Я использую Emacs + это во многих отношениях потрясающий магит-режим для работы с git. Однако есть один аспект моего рабочего процесса, который я не могу сопоставить с этим, и, следовательно, с этим вопросом.

Иногда у вас есть коммит, который нужно переработать в отдельные коммиты. Я могу в интерактивном режиме перебазировать свои коммиты с помощью magit и заявить о своем намерении отредактировать указанный коммит.

Теперь мне нужно переключиться на git gui, выбрать «исправить последнюю фиксацию», которая показывает мне поэтапные изменения, и отменить те части, которые я хочу сделать отдельной фиксацией. Затем я фиксирую, устанавливаю исключения и снова фиксирую — вуаля, у меня есть новая фиксация в моей истории.

Я до сих пор не нашел способ сделать это с помощью Emacs. Любые подсказки?


person deets    schedule 12.11.2014    source источник
comment
Это, вероятно, лучше спросить на Emacs.SE.   -  person Sean Allred    schedule 12.11.2014
comment
Эй, как вы интерактивно перебазируете коммиты? :)   -  person Ehvince    schedule 12.11.2014
comment
@SeanAllred О, я не знал, что он есть. Перейдите к журналу (l l из буфера magit-info), перейдите к фиксации и нажмите E. Буду ли я перебазировать все фиксации оттуда. Убедитесь, что вы сохранили буфер с помощью C-x #, так как это удаленный буфер.   -  person deets    schedule 12.11.2014
comment
В ветке next перебазирование было значительно улучшено, например. коммиты, которые еще не были применены повторно, а также уже повторно примененные коммиты отображаются в буфере состояния, пока выполняется перебазирование. На ваш вопрос (как разделить фиксацию) я подробно ответил в другом месте: github .com/magit/magit/issues/966#issuecomment-60498587. (То, что Джордон предлагает ниже, является одним из способов сделать это, но при использовании ветки next есть более элегантный вариант).   -  person tarsius    schedule 13.11.2014


Ответы (1)


После того, как вы начнете перебазирование, вместо того, чтобы переходить к графическому интерфейсу, выполните команду magit-reset-head для HEAD~1, это позволит вам отменить изменения, а затем выполнить и зафиксировать по желанию, прежде чем, наконец, продолжить перебазирование из Буфер состояния магит.


Пример рабочего процесса сценария:

  1. зафиксировать изменения в файле A (зафиксировать 1)
  2. зафиксировать изменения в файле B и файле C (коммит 2)
  3. зафиксировать изменения в файле D (коммит 3)
  4. понять, что вы хотите, чтобы изменения в файле B и файле C были отдельными фиксациями
  5. беги magit-log
  6. начать интерактивную перебазировку (E) с коммита 2.
  7. укажите, что вы хотите отредактировать (e) зафиксируйте 2 и завершите (C-cC-c)
  8. вернуться в буфер состояния Magit.
  9. запустить magit-reset-head (x), указать HEAD~1 в приглашении.
  10. вы увидите изменения для фиксации 2 поэтапно.
  11. отменить изменения в файле C.
  12. зафиксируйте поэтапные изменения для файла B.
  13. stage и зафиксируйте изменения в файле C.
  14. продолжить и завершить перебазирование с помощью RC

Теперь у вас будет четыре фиксации, каждая из которых изменяет один файл в порядке A, B, C, D.

person Jordon Biondo    schedule 12.11.2014