2013-05-31 3 views
41

Как пользователь Git Я регулярно сталкиваюсь с ситуацией, что мне нужно переделать один или несколько коммитов таким образом, чтобы они не вписывались в --amend или rebase -i с фиксацией фиксации. Как правило, я бы сделал что-то вродеGit: как повторно использовать/сохранять сообщения фиксации после сброса git?

git reset HEAD~1 
# hack, fix, hack 
git commit -a 
# argh .. do I need to retype my message? 

Я принимаю разумные составленные сообщения о передаче довольно серьезно. Они обычно содержат более крупный текст со ссылками & обоснования для изменения. До сих пор я очень раздражаюсь в длительном процессе восстановления моего старого сообщения о фиксации с помощью несортированного git reflog, git log и копирования процесса вставки &.

Есть ли лучше справиться с этим? И как бы это произошло, если бы в моей команде было более одного обязательства?

Edit: После немного думать об этом, я думаю, что я ищу некоторые мерзавец тайник -как функциональность для фиксации сообщений, где Fixup/вносить поправки фиксаций не подходят.

+1

Если бы все, что вы делали, было 'git reset head ~ 1', не было бы вашим старым сообщением о фиксации только 2-й записи в' reflog'? –

+0

Да - но как бы я мог повторно использовать сообщение без копирования и вставки (что обычно требует ручного удаления) –

+0

В настоящее время просто 'gitk' открыт. Таким образом вам даже не придется использовать reflog. В качестве альтернативы используйте 'rev-parse ', чтобы получить хэш перед сбросом и использовать ответ ibizaman. – cst1992

ответ

5

Зачем перезагружать, если вы можете взломать, исправить, взломать и просто запустить git commit --amend --no-edit; таким образом, сохраняя ваше исходное сообщение фиксации.

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

+1

При выполнении интерактивной переадресации вы можете даже использовать инструкцию 'fixup', чтобы объявить, что позднее коммит должен исправить предыдущую фиксацию, и она автоматически будет использовать сообщение фиксации из оригинала, отбрасывая сообщение из фиксации fixup. – qqx

+0

Например, если я хочу повторно объединить обновленные pull-запросы с принудительным обновлением. Или, если фиксация не является последней и не может быть легко исправлена ​​на основе HEAD, и ее легче переделать. –

+0

@BenTebulin Ну, интерактивная перебаза позволяет вам изменять любое совершение в диапазоне определенных коммитов. Это не строгое обязательство HEAD, которое должно быть изменено. – mart1n

1

Вы можете рассмотреть git commit --reset-author -c <commit>, чтобы повторно использовать сообщение фиксации с редактированием и текущее время.

+0

Спасибо, это очень близко к тому, что я искал. –

25

При запуске "мерзавец совершить" команду, вы, чтобы проверить следующие параметры,

Для повторного использования,

--reuse-message=<commit> 

Для редактирования на повторное использование,

--reedit-message=<commit> 

Чтобы изменить автор,

--reset-author 
+1

Отмечено это как новое решение, так как это обеспечило наиболее полный ответ. Хотя это решение по-прежнему не полностью решает мои проблемы с поиском. –

Смежные вопросы