Git: Як повторно використовувати / зберегти повідомлення про фіксацію після "скидання git"?


103

Як користувач Git, я регулярно стикаюсь із ситуацією, що мені потрібно переробити один чи кілька комісій у спосіб, який не вписується в --amendабо rebase -iз фіксацією. Зазвичай я б робив щось подібне

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

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

Чи краще вирішити це? І як би це було, якщо мій включає більше одного комітету?

Редагувати: Поміркувавши над цим, я думаю, що я шукаю - це функція, схожа на git stash для передачі повідомлень у випадках, коли фіксація / зміна комітетів не підходить.


2
Якби все, що ви робили git reset head~1, чи не було б ваше старе повідомлення про присвоєння лише 2-й запис у програмі reflog?

Так - але як би я міг повторно використовувати повідомлення без копіювання та вставлення (що, як правило, вимагає розблокування вручну)
bentolor

Сьогодні просто gitkвідкрити. Таким чином, вам навіть не доведеться використовувати рефлог. Крім того, використовуйте, rev-parse <branch>щоб отримати хеш перед скиданням, і скористайтеся відповіддю від ibizaman.
cst1992

Відповіді:


143

Після git resetцього цей одноклапник може це зробити:

git commit --reuse-message=HEAD@{1}

або навіть коротше:

git commit -C HEAD@{1}

Ви можете використовувати інші параметри, надані @ user2718704 .


6
Коротше:git commit -C@@{1}
Phu Ngo

2
Це фантастичне використання рефлогу
Девід Манн

22
Після скидання встановлюється ORIG_HEAD. Я вважаю git commit --reuse-message=ORIG_HEADнайбільш зрозумілим.
Скотт Якобсен

45

Запускаючи команду "git commit", ви повинні перевірити наступні параметри,

Щоб повторно використовувати,

--reuse-message=<commit>

Щоб відредагувати при повторному використанні,

--reedit-message=<commit>

Щоб змінити автора,

--reset-author

1
Позначив це як нове рішення, оскільки це дало найбільш вичерпну відповідь. Хоча це рішення все ще не повністю вирішує мої проблеми з пошуку.
бентолор

9

Навіщо скидатися, якщо ви можете зламати, виправити, зламати, а потім просто запустити git commit --amend --no-edit; таким чином, зберігаючи своє початкове повідомлення про фіксацію.

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


2
Виконуючи інтерактивну базу даних, ви навіть можете використовувати fixupінструкцію, щоб заявити, що пізніша фіксація - це виправити попередню комісію, і вона автоматично використає повідомлення про фіксацію з оригіналу, відкидаючи повідомлення від фіксації фіксації.
qqx

Наприклад, якщо я хочу знову об'єднати оновлені запити на оновлення сили. Або якщо фіксація не є останньою і її неможливо легко виправити на основі HEAD та простіше їх повторити.
бентолор

@BenTebulin Ну, інтерактивна база даних дозволяє змінювати будь-які комісії в діапазоні вказаних комітетів. Не суворо зобов’язання HEAD має бути змінене.
mart1n

@ mart1n Дякуємо за виділення редагування в rebase -i. Ніколи не використовував його в цьому контексті. Для решти випадків, таких як повторне об'єднання іншої відповіді, більше відповідає моєму питанню, тому я позначив цю як відповідь.
бентолор

Intellij має сфери роботи, які працюють лише з файлами, які ще не були зроблені. Корисно скинути файли на невипущені, щоб, наприклад, Intellij міг доручити вкладати файли, а потім повторно зафіксувати ці файли тим же повідомленням. змінити звичну роботу для цього через обмеження визначення обсягу Intellij.
Девід Манн

5

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


Спасибі - це дуже близько до того, що я шукав.
бентолор
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.