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


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.