Як внести зміни до комісії, не змінюючи повідомлення про фіксацію (повторне використання попереднього)?


657

Чи є спосіб змінити зобов’язання без vi(або вашого $EDITOR) спливаючого вибору з можливістю змінити ваше повідомлення про фіксацію, а просто повторно використати попереднє повідомлення?


6
Я б оскаржував своє власне запитання, дізнавшись важкий шлях зла змін.
Шрідхар Сарнобат

28
Поки ви дотримуєтесь певних правил (як, наприклад, не вносити зміни до чогось, що вже натиснуто), немає причин, чому внесення змін має бути поганою справою.
paullb

3
Зміни комісій не повинні використовуватися для періодичного вчинення роботи під час однієї логічної зміни. Для цього необхідно здійснити локально правильно , а потім сквош фіксації історії коли - то закінчений (@ Шрідхара-Sarnobat)
DBCerigo

3
Я повністю згоден @DBCerigo. Єдиною ситуацією, яку я вважаю корисною, є те, коли я забув поставити файл у попередній фіксатор (наприклад, тому, що він є новим і тому не отримує автоматичної постановки під час запуску git commit -a), і хочу зробити його заднім числом.
Шрідхар Сарнобат

1
Інший раз коригування корисне, навіть якщо ви визнаєте небезпеку зміни історії, якщо ви незадоволені своїм останнім повідомленням про фіксацію і хочете переформулювати його, не потребуючи перезавантаження.
Шрідхар Сарнобат

Відповіді:


1011

Починаючи з версії git 1.7.9, ви також можете використовувати git commit --amend --no-editсвій результат.

Зауважте, що це не буде включати метадані з іншого коміту, такого як часова мітка, яка може бути або не може бути важливою для вас.


42
Ви також можете полегшити за замовчуванням прапор --no-edit, додавши псевдонім: "Змінити = скористатись -а --Змінити - не редагувати"
Jherico

1
@Jherico Я б запропонував видалити -a. Будь ласка, зробіть атомні зобов’язання, простіше переглянути або
перезавантажити

120

git commit -C HEAD --amendзробить те, що ти хочеш. -CОпція приймає метадані з іншої фіксації.


15
Просто для додання відповіді Енді. Якщо це ви робите часто, то ви можете встановити псевдонім для нього, використовуючи git config --global alias.amend 'commit --amend -C HEAD'. Потім ви можете використовувати git amendяк ярлик.
mikej

9
Давайте, хлопці, не полінуйтеся, оновіть git та використовуйте вбудовану команду, яку пропонує Shaggle! Плюс ще один варіант для -C.
Димитріс Балтас

4
Не тільки часова марка, а й інформація про авторство!
user1338062

3
@RyanCastner Дійсно, коментар, на який ви посилаєтесь, був з 2013 року. Я використовую версію git --amend, навіть без будь-якого іншого варіанту, зберігає дату автора (але змінює дату вступу). Як такий, я видалив свій старий коментар.
Рубен Верборг

2
Насправді ця відповідь цінна по-іншому, навіть якщо це не прийнята відповідь. На відміну від іншої відповіді, не потрібно використовувати —amend. Ви можете створити нову комісію, але використовувати те саме повідомлення, що і попереднє. Це може не здатися корисним, але моє повідомлення про вчинення за замовчуванням, коли я просто зберігаю свою роботу, не придумуючи приємного повідомлення про фіксацію, я продовжую повторно використовувати це повідомлення—message=“Work in progress (untested)”
Шрідхар Сарнобат

67

Інша (нерозумна) можливість полягає в тому, git commit --amend <<< :wqякщо у вас є vi (m) як $EDITOR.


39
Навіть якщо це не потрібно для цього випадку використання, я не знав, що ви можете передавати vim. Це відкриває деякі інтригуючі можливості. Чудова порада.
Шрідхар Сарнобат

6
... <<< ZZможливо, ще менше набирайте;)
Руслан

6
..і ще менше - ... <<< :x:)
skwisgaar

3
Я не думаю, що це нерозумно. Це прекрасний спосіб поліпшити робочий процес для будь-якої команди, яка відкриває vi.
B Сім

12
потрійні кутові дужки. це нове.
олігофрен

16

Щоб продовжити прийняту відповідь, ви також можете зробити:

git commit --amend --no-edit -a

щоб додати файли, що змінилися в даний час.


11

Використання прийнятої відповіді для створення псевдоніма

 oops = "!f(){ \
    git add -A; \
    if [ \"$1\" == '' ]; then \
        git commit --amend --no-edit; \
    else \
        git commit --amend \"$@\"; \
    fi;\
}; f"

тоді ви можете зробити

git oops

і він додасть все та виправить, використовуючи те саме повідомлення

або

git oops -m "new message"

внести зміни до заміни повідомлення

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