Как изменить существующие неопубликованные сообщения фиксации?

Я неправильно написал в сообщении о коммите.

Как я могу изменить сообщение? Фиксация еще не отправлена.

Для тех, кто немного новичок в git: важно замечание Лори о том, что она еще не подтолкнула. Как и перебазирование, это меняет историю. Если кто-то клонировал / извлекал из вашего репо между исходной и перезаписанной историей, он не сможет вытащить после перезаписи (для этой ветки).

Pat Notz 11.10.2008 00:12
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
7 659
1
2 764 961
27
Перейти к ответу Данный вопрос помечен как решенный

Ответы 27

Ответ принят как подходящий

Изменение самого последнего сообщения фиксации

git commit --amend

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

git commit --amend -m "New commit message"

… Однако это может сделать многострочные сообщения фиксации или небольшие исправления более громоздкими для ввода.

Перед тем, как сделать это, убедитесь, что у вас нет изменений в рабочей копии постановочный, иначе они тоже будут зафиксированы. (Изменения Неустановленный не фиксируются.)

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

Если вы уже отправили коммит в свою удаленную ветку, то - после внесения изменений в коммит локально (как описано выше) - вы также будете использовать нужно принудительно нажать фиксацию с помощью:

git push <remote> <branch> --force
# Or
git push <remote> <branch> -f

Предупреждение: принудительное нажатие перезапишет удаленную ветку с состоянием вашей локальной. Если в удаленной ветке есть коммиты, которых нет в вашей локальной ветке, вы воля теряете эти коммиты.

Предупреждение: будьте осторожны при изменении коммитов, которыми вы уже поделились с другими людьми. Внесение поправок по существу приводит к тому, что они имеют разные идентификаторы SHA, что создает проблему, если у других людей есть копии старого коммита, который вы переписали. Любой, у кого есть копия старого коммита, должен будет синхронизировать свою работу с вашим недавно переписанным коммитом, что иногда может быть сложно, поэтому убедитесь, что вы координируете свои действия с другими при попытке переписать общую историю коммитов, или просто избегайте переписывания общих коммитов. все вместе.


Выполните интерактивную перебазировку

Другой вариант - использовать интерактивную перебазировку. Это позволяет вам редактировать любое сообщение, которое вы хотите обновить, даже если это не последнее сообщение.

Чтобы сделать сквош Git, выполните следующие действия:

// n is the number of commits up to the last commit you want to be able to edit
git rebase -i HEAD~n

Как только вы раздавите свои коммиты - выберите e/r для редактирования сообщения:

Enter image description here

Важное примечание об интерактивном перебазировании

Когда вы используете git rebase -i HEAD~n, может быть более, чем n коммитов. Git «соберет» все коммиты в последних n коммитах, и если где-то между этим диапазоном произошло слияние, вы также увидите все коммиты, так что результат будет n +.

Хороший совет:

Если вам нужно сделать это более чем для одной ветки и вы можете столкнуться с конфликтами при изменении содержимого, настройте git rerere и позвольте Git разрешить эти конфликты автоматически.


Документация

Однако git commit --amend не такой мощный, как git rebase -i.

Jeffrey Jose 05.07.2010 12:40

@jeffjose, точно не должно быть. Кроме того, git commit --amend может исправить (а?) Главную фиксацию.

strager 14.07.2010 10:02

Если вы уже нажали, просто нажмите еще раз: git push -f origin branchname

hughes 02.05.2012 18:12

@hughes, разве git push -f не опасен, если другие люди используют один и тот же репозиторий?

Armand 08.11.2012 11:48

Если вы не хотите переписывать все сообщение о фиксации, выберите git commit --amend -c HEAD. Это откроет редактор, предварительно заполненный вашим старым сообщением о фиксации, чтобы вы могли его изменить.

Sam 14.11.2012 19:38

То, что говорит @Sam, также, похоже, сработает, если вы просто наберете git commit --amend и ничего не последует.

driftcatcher 08.12.2012 00:37

@hughes Не нажимайте принудительно в репозитории, которые используют другие люди, без предварительного предупреждения !! В противном случае это приведет к странному конфликту, когда они попытаются выполнить повторную выборку. Если этот человек не знает, что делает, он может неправильно разрешить конфликт и затем нажать который, что еще больше испортит репозиторий.

Mark E. Haase 23.05.2013 19:05

Но, не изменяйте коммиты, которые были поделены!

EdwardGarson 19.06.2013 06:31

@ guillegr123, нет, правильная терминология - или, по крайней мере, раньше была «верхушкой» ветки.

EfForEffort 19.06.2013 23:55

Небольшая деталь. Если вы выполняете git commit --amend, пока есть поэтапные изменения (добавленные с git add), они станут частью исправленного коммита. Это полезно для добавления изменений или удалений, которые вы забыли подготовить (обычно я забываю параметр -A в команде git add, когда удаляю файлы)

txulu 01.08.2013 12:11

отличный ответ! и охватывает важный момент слияний, которые rebase -i не позволяет вам делать по умолчанию. Чтобы использовать rebase для изменения сообщения фиксации слияния, вы должны использовать опцию сохранения -p

Sam 25.09.2013 00:57

@rjmunro, предоставленная вами ссылка описывает тело сообщения фиксации как необязательное. «Если есть какие-либо технические детали, которые не могут быть выражены в этих строгих ограничениях размера [строки темы], поместите их вместо этого в основной текст». Иногда для описания небольшого изменения достаточно одной строчки.

antinome 17.09.2014 17:12

@antinome, теперь ответ был отредактирован, чтобы отразить мой предыдущий комментарий (stackoverflow.com/revisions/179147/12), так что -m теперь показан как альтернатива, а не как обычный способ делать что-то. Я доволен новой версией, поэтому удалю свой предыдущий комментарий.

rjmunro 17.09.2014 22:28

Ссылка на git-scm.com/book/en/Git-Tools-Rewriting-History была бы отличной в ответе.

onionjake 02.10.2014 06:31

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

Erik Aronesty 27.02.2015 23:40

«Убедитесь, что у вас нет изменений в рабочей копии ...», вероятно, должно быть «Убедитесь, что у вас нет изменений постановочный ..» Согласно обычным правилам, только поэтапные изменения влияют на фиксацию.

user2864740 03.04.2015 03:49

git commit --amend -m "New commit message" не усложняет ввод многострочных комментариев. вы должны использовать: git commit --amend -m $'- line 1\nline2'

gogaman 02.05.2015 00:42

Было бы неплохо, если бы в этом ответе также упоминалось редактирование не самого последнего сообщения фиксации. То есть он должен включать этот отвечать.

wachr 02.06.2015 01:32

Это изменит хэши fyki.

Santosh Kumar 12.07.2015 05:19

если вы уже нажали на удаленную ветку, это не сработает, если в вашем файле конфигурации git указано denyNonFastforwards = true. вам нужно изменить это на false. попробуйте решение в stackoverflow.com/questions/10544139/…

yehudahs 12.11.2015 11:05

У меня были другие файлы в индексе, которые я не фиксировал. Эта команда изменила мое предыдущее сообщение о фиксации, но также добавила эти файлы в фиксацию. Теперь я могу снова внести поправки, чтобы разделить коммит так, как я хотел?

Ed Randall 04.06.2016 02:29

Очень хороший ответ, но вы не говорите о 3-м варианте, например «изменить сообщение фиксации в предыдущем коммите перед HEAD, который уже не нажимается».

darkomen 04.08.2016 11:27

Если вы получаете сообщение об ошибке denying non-fast-forward при использовании git push -f, вам необходимо установить receive.denyNonFastForwards false в репозитории сервера. См. stackoverflow.com/questions/9832348/…

Soren Stoutner 30.10.2016 10:55

что означает "e / r"?

rubo77 29.03.2017 17:54

Это означает, что в перебазировании выберите вариант «изменить» или «перефразировать».

EfForEffort 07.04.2017 18:15

git commit --amend -m "New commit message" позволяет использовать "#" в сообщениях коммитов без изменения конфигурации Git.

Fontanka16 25.10.2017 12:26

Документация GitHub действительно полезен при обновлении сообщения предыдущей фиксации с помощью интерактивной перебазировки

zok 08.01.2018 19:30

Для всех, у кого есть проблемы с редактированием вещей с помощью rebase -i, чтобы изменить с pick на что-то еще, введите i, затем нажмите Enter, чтобы перейти в режим редактирования, затем измените pick на что-либо еще, затем нажмите Esc и введите :wq, чтобы сохранить и выйти из редактора. . Наконец, вам будет предложено изменить сообщение фиксации, где вы снова введете i, измените комментарий, нажмите Esc, затем введите :wq.

hvaughan3 04.04.2018 17:45

@Armand Вы можете использовать git push --force-with-lease. Безопаснее при работе в одном репозитории

Pierre Ferry 21.11.2018 12:43

Для Git должно быть стыдно иметь 15 тысяч голосов за простую команду, которая должна быть реализована в ядре. Меня не волнует, насколько сложно будет реализовано, это должно быть просто со стороны пользователя, но не таким сумасшедшим, как я вижу в этом посте. Сравните с SVN, я могу сделать это одной командой / щелчком.

Aliaksandr Klimovich 09.07.2019 12:27

Что касается добавления многострочных сообщений о коммитах, просто не закрывайте «пока вы не введете все свои строки».

Chris McCowan 04.10.2019 19:53

Кажется, что я могу внести изменения только в определенные измененные файлы в исходную фиксацию, оставив все файлы, не указанные в списке, нетронутыми: git commit --amend -m "New commit message" some files

jcalfee314 22.02.2020 20:43

Как вы переписываете сообщение коммита старого коммита? @einpoklum

Akhila 01.08.2020 22:43

@Akhila: Не знаю, почему ты упомянул мое имя. Перезапись сообщений старых коммитов может быть выполнена с помощью git rebase -i oldcommithashhere^ и заменена pick на edit.

einpoklum 01.08.2020 22:46

Я не смог найти ни одного человека в ответе, поэтому, когда я его открыл, последнее изменение показало ваше имя. Но это того стоило :) Спасибо за такой ответ!

Akhila 01.08.2020 23:03

изменит ли интерактивная перебазировка дату фиксации всех коммитов? @EfForEffort

Ayush Mandowara 13.02.2021 16:43

Если фиксация, которую вы хотите исправить, не самая последняя:

  1. git rebase --interactive $parent_of_flawed_commit

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

  2. Появится редактор со списком всех коммитов, начиная с того, что вы дали.

    1. Измените pick на reword (или в старых версиях Git на edit) перед любыми коммитами, которые вы хотите исправить.
    2. После сохранения Git воспроизведет перечисленные коммиты.

  3. Для каждого коммита, который вы хотите сделать перефразировать, Git вернет вас обратно в ваш редактор. Для каждого коммита, который вы хотите выполнить редактировать, Git помещает вас в оболочку. Если вы в оболочке:

    1. Измените фиксацию как хотите.
    2. git commit --amend
    3. git rebase --continue

Большая часть этой последовательности будет объяснена вам по ходу выполнения различных команд. Это очень легко; вам не нужно его запоминать - просто помните, что git rebase --interactive позволяет вам исправлять коммиты независимо от того, как давно они были.


Обратите внимание, что вы не захотите изменять уже отправленные вами коммиты. Или, может быть, вы это сделаете, но в этом случае вам придется проявить большую осторожность, чтобы общаться со всеми, кто, возможно, вытащил ваши коммиты и проделал работу поверх них. Как мне восстановить / повторно синхронизировать после того, как кто-то нажмет на перебазирование или сброс на опубликованную ветку?

Можно ли изменить сообщение первого коммита (у которого нет родителя)?

13ren 21.01.2010 22:57

Об этом упоминается в одном из других ответов, но я отмечу это здесь. Начиная с git 1.6.6, вы можете использовать reword вместо pick для редактирования сообщения журнала.

MitMaro 31.05.2010 17:27

Кстати, $parent_of_flawed_commit эквивалентен $flawed_commit^.

Peeja 29.11.2010 02:26

@pingu: Нет, вы не потеряете даты фиксации.

Daniel Rinser 31.05.2011 23:11

НИКОГДА не делайте этого (или вообще не выполняйте перебазирование), если вы уже продвинулись вверх по течению!

Daniel Rinser 31.05.2011 23:14

Используйте -p (--preserve-merges), если после ошибочной фиксации произошло слияние.

ahven 31.01.2012 18:37

Кроме того, $parent_of_flawed_commit означает "совершить до того, как вы облажались" :)

Nick 04.10.2012 18:44

@AristotlePagaltzis Я единственный, кто отправляет коммиты в удаленный репозиторий. Могу ли я git push -f подтолкнуть reword к уже продвинутым коммитам?

trusktr 01.12.2013 06:38

Это очень хорошо сработало для меня в рабочем процессе Git-SVN, где одно сообщение фиксации git в пакете изменений было отклонено обработчиком предварительной фиксации SVN. Я смог перефразировать, и тогда dcommit сработал.

Jimmy Bosse 29.05.2014 17:32

Reword у меня не работает в Windows (даже в консоли MinGW от SourceTree). Git всегда пытается открыть файл «$ @». Очень жаль, что Git не был построен с учетом кроссплатформенности.

AndiDog 09.08.2014 11:47

git rebase --continue мне не понадобился, ребаз уже закончился.

sebix 01.09.2015 18:39

@ 13ren Возможно, вы уже нашли ответ, но это может помочь другим (я не видел ответа на ваш комментарий). stackoverflow.com/questions/2246208/…

Lukino 16.09.2015 23:07

Что, если я хочу отредактировать самое первое сообщение фиксации, то есть сообщение первоначальной фиксации?

Sam Chats 17.07.2017 21:23

Используйте --root вместо хэша фиксации.

Aristotle Pagaltzis 18.07.2017 01:57

git commit --amend -m "your new message"

Я сделал git commit --amend -m «Новое сообщение», но нажатие на Github сгенерировало «Объединить удаленные изменения перед повторным нажатием». После извлечения зафиксируйте --amend и снова нажмите, новое сообщение не появляется. Вместо этого у меня есть «Мастер слияния ветки github.com:[myrepo]»

Dave Everitt 14.10.2011 20:58

@DaveEveritt, вы, скорее всего, отправили свой коммит вверх по течению, прежде чем пытаться его исправить.

Thorbjørn Ravn Andersen 25.04.2013 12:21

@ ThorbjørnRavnAndersen - спасибо, это было 2 года назад, на днях у меня отсортирован рабочий процесс git!

Dave Everitt 25.04.2013 12:41

@Kyralessa неправда. В bash вы можете легко составлять многострочные сообщения о фиксации, просто не закрывая цитату, пока не закончите (нажимая return в конце каждой строки внутри кавычек).

hobs 12.06.2013 01:11

Я не понимаю, как ответ, который очень похож на основную идею ответа, написанного два года назад, а также принятый ответ получает так много голосов. Странный. (хотя в ответе нет ничего плохого)

happy coder 15.01.2014 09:30

@happycoder: Потому что вопрос очень популярен и первым попал в Google (и многие другие поисковые системы) по многим терминам, связанным с git. И люди находят это полезным.

Amal Murali 21.05.2014 06:36

@AmalMurali, ну что ж. Моя точка зрения заключалась не столько в популярности вопроса или полезности ответа. Но этот конкретный ответ не является самым старым и не предлагает дальнейшего понимания принятого ответа. Похоже, это копия раздела принятого ответа. Это была моя точка зрения. ВАШЕ ЗДОРОВЬЕ!

happy coder 22.05.2014 00:16

@EarlJenkins Да, это немного забавно, но я рад, что они углубляются даже в «простые» вопросы.

jay_t55 10.01.2015 12:04

Мелочь, если вы действительно отправили фиксацию на удаленный компьютер перед редактированием, вы можете «исправить» это с помощью git push -f <remote> <branch>, иначе принудительного нажатия. Это перезапишет предыдущую фиксацию. Не лучший метод, как объяснил @Dan, но вы мало что можете сделать.

Jay 07.07.2015 21:31

@Wade Вам следует любой ценой избегать принудительного нажатия на общий репо. Это в значительной степени гарантирует конфликт для всех, кто использует этот пульт. Единственная законная причина, по которой я могу принудительно изменить историю, - это удалить очень конфиденциальные данные из незащищенного репозитория (например, случайно зафиксированный файл passwords.txt). Во всех остальных случаях используйте git revert. Если вы принудительно нажимаете должен, сначала прочтите это: blog.sensible.io/2012/10/09/…

Dan Bechard 07.07.2015 21:54

@ Дэн, я понимаю. Вот почему я сказал, что это не лучший метод, и указал на ваш комментарий. Но если они уже перешли на свой вышестоящий пульт, они мало что могут сделать, чтобы не вызвать конфликтов.

Jay 09.07.2015 18:32

@Wade Я не согласен с тем, что «они мало что могут сделать, чтобы не вызвать конфликтов». Я отвечал конкретно на ваше предыдущее заявление, «но вы мало что можете там сделать». Там является что-то можно сделать, что не будет вызывает конфликты. Как я предлагал, вы должны использовать git revert вместо git push -f. Revert добавит новую фиксацию, которая отменяет изменения, сделанные в отмененной фиксации (-ях), а не изменяет историю; тем самым устраняя конфликты. git-scm.com/docs/git-revert

Dan Bechard 09.07.2015 20:35

@ Дэн Ох, я понимаю, что ты имеешь в виду. Да, это сработает. Если бы они работали над собственной веткой, у них все равно были бы конфликты даже с git revert, не так ли?

Jay 10.07.2015 19:56

@Wade git revert не вызовет никаких конфликтов, которые также не были бы внесены git commit. Это просто добавление новой фиксации, которая содержит изменения, которые отменяют изменения, сделанные в предыдущей фиксации. В большинстве случаев любой, кто объединяет вашу ветку, просто выполняет быструю перемотку вперед.

Dan Bechard 10.07.2015 21:52

Как изменить старое сообщение фиксации? (Я не подключался ни к какому удаленному репозиторию)

Akhila 01.08.2020 22:36

Как уже упоминалось, git commit --amend - это способ перезаписать последний коммит. Одно замечание: если вы хотите также перезаписать файлы, команда будет

git commit -a --amend -m "My new commit message"

И если вы не хотите добавлять все, вы можете сначала сделать git add file.ext, а затем просто git commit --amend

MalcolmOcean 22.09.2015 08:56

Чтобы исправить предыдущую фиксацию, внесите нужные изменения и выполните эти изменения, а затем запустите

git commit --amend

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

Чтобы изменить предыдущую фиксацию и сохранить то же сообщение журнала, запустите

git commit --amend -C HEAD

Чтобы исправить предыдущую фиксацию, полностью удалив ее, запустите

git reset --hard HEAD^

Если вы хотите отредактировать более одного сообщения фиксации, запустите

git rebase -i HEAD~commit_count

(Замените commit_count количеством коммитов, которые вы хотите отредактировать.) Эта команда запускает ваш редактор. Отметьте первую фиксацию (ту, которую вы хотите изменить) как «редактировать» вместо «выбрать», затем сохраните и выйдите из редактора. Внесите изменения, которые хотите зафиксировать, а затем запустите

git commit --amend
git rebase --continue

Примечание. Вы также можете «Внести нужные изменения» в редакторе, открытом git commit --amend.

git rebase -i HEAD~commit_count также позволит вам изменять сообщения коммитов, сколько бы вы ни выбрали. Просто отметьте выбранные коммиты как «reword» вместо «pick».

Joe 22.08.2013 00:21

Что делать, если вы не хотите переустанавливать? Вы просто хотите изменить старое сообщение?

SuperUberDuper 21.04.2016 11:56

git reset --hard аннулирует незафиксированные изменения. Пожалуйста, замените --hard на --soft.

eel ghEEz 28.02.2018 20:44

Согласен, git reset --hard - вполне законная команда, но, учитывая вопрос, она вводит в заблуждение. Вы используете --hard, если вы зафиксировали изменения, которые хотите выбросить, а не если вы допустили опечатку в сообщении о фиксации!

Soren Bjornstad 22.07.2019 16:52

Вы также можете использовать для этого git filter-branch.

git filter-branch -f --msg-filter "sed 's/errror/error/'" $flawed_commit..HEAD

Это не так просто, как тривиальный git commit --amend, но особенно полезно, если у вас уже есть несколько слияний после вашего ошибочного сообщения о фиксации.

Обратите внимание, что это попытается переписать фиксацию каждый между HEAD и ошибочной фиксацией, поэтому вам следует очень разумно выбирать команду msg-filter ;-)

Есть ли такая версия, которая не меняет фиксацию, если регулярное выражение ничего не находит?

sjakubowski 29.03.2013 00:08

AFAIK filter-branch --msg-filter в любом случае сгенерирует новые коммиты. Однако вы можете проверить в msg-filter, успешно ли sed и использовать эту информацию, когда операция filter-branch завершится, чтобы сбросить ваше дерево до refs / original.

Mark 29.03.2013 20:16

@DavidHogue Это верно только при использовании метода ветвления фильтра. Идентификаторы фиксации, следующие за измененной фиксацией, не изменяются, если вы используете интерактивную перебазировку.

Mark 06.07.2013 23:08

@Mark Да, они обязаны. Идентификаторы коммитов зависят от предыдущих коммитов. Если бы они не изменились, git был бы бесполезен.

Miles Rout 11.01.2014 08:45

Вам нужен $flawed_commit^..HEAD, а не $flawed_commit..HEAD. как указано на странице руководства: «Команда перезапишет только положительные ссылки, упомянутые в командной строке (например, если вы передадите a..b, будет перезаписан только b).»

Ángel 29.07.2014 15:18
  1. Если вы хотите изменить только последнее сообщение о фиксации, выполните:

    git commit --amend
    

Вы попадете в текстовый редактор и сможете изменить последнее сообщение фиксации.

  1. Если вы хотите изменить последние три сообщения фиксации или любое из сообщений фиксации до этого момента, укажите HEAD~3 в команде git rebase -i:

    git rebase -i HEAD~3
    
Этот предыдущий ответ already says that you can use git commit --amend, and it also says that you can use git rebase -i HEAD~commit_count, all you did was plug in 3 for commit_count.
user456814 23.07.2014 16:21

Также проголосовали против. Люди просто не беспокоятся о прочитать существующие ответы.

Dan Dascalescu 02.05.2019 04:16

Если вы используете инструмент Git GUI, есть кнопка с именем Изменить последнюю фиксацию. Нажмите на эту кнопку, и тогда она отобразит ваши последние файлы фиксации и сообщение. Просто отредактируйте это сообщение, и вы сможете зафиксировать его с новым сообщением фиксации.

Или используйте эту команду из консоли / терминала:

git commit -a --amend -m "My new commit message"

Этот ответ буквально идентичен этому старший. Вы проверили существующие ответы перед тем, как дать еще один?

Dan Dascalescu 02.05.2019 04:15

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

git filter-branch -f --msg-filter \
'sed "s/<old message>/<new message>/g"' -- --all

Git создаст временный каталог для перезаписи и дополнительного резервного копирования старых ссылок в refs/original/.

  • -f принудительно выполнит операцию. Это необходимо, если временный каталог уже существует или уже есть ссылки, хранящиеся в refs/original. Если это не так, вы можете сбросить этот флаг.

  • -- отделяет параметры ветвления фильтра от параметров редакции.

  • --all обеспечит перезапись всех ветви и теги.

Благодаря резервному копированию ваших старых ссылок вы можете легко вернуться в состояние до выполнения команды.

Скажем, вы хотите восстановить своего мастера и получить к нему доступ в ветке old_master:

git checkout -b old_master refs/original/refs/heads/master

В этом ответе не рассматривается вопрос OP, поскольку они исключительно заинтересованы в исправлении только что выполненной фиксации. Я регулярно использую git commit --amend для исправления комментариев или добавления файлов, которые я забыл в git add, но только Когда-либо до того, как я использовал git push. Я также использую git filter-branch, когда хочу полностью повозиться с историей версий, но OP этого не хочет, поэтому этот ответ требует серьезного предупреждения о вреде для здоровья - не пытайтесь это дома, выглядывает !!

kbro 29.06.2013 07:17

Если вы используете графический интерфейс Git, вы можете изменить последний коммит, который не был отправлен, с помощью:

Commit/Amend Last Commit

Я предпочитаю такой способ:

git commit --amend -c <commit ID>

В противном случае будет новая фиксация с новым идентификатором фиксации.

Для меня использование вашей команды выше фактически создает новую фиксацию с новым идентификатором фиксации плюс дополнительную фиксацию, в которой говорится «ветвь слияния» в качестве сообщения фиксации по умолчанию.

Jan 29.03.2013 20:27

Изменение всегда создает новую фиксацию с новым идентификатором фиксации. Идентификатор фиксации - это SHA-хэш содержимого фиксации, включая сообщение фиксации и отметки времени создания / фиксации. Это особенность Git, которая, исключая конфликты хэшей, гарантирует, что две фиксации с одним и тем же идентификатором будут в точности одной и той же фиксацией, с точно таким же содержимым, историей и т. д.

Emil Lundberg 19.06.2013 13:30

Согласен с Эмилем. Вдобавок, чтение документации - кажется, что все "-c" указывает git, какое сообщение коммита использовать в качестве шаблона / шаблона по умолчанию для вашего нового коммита .. На самом деле он уже будет делать "-c <commit ID>" по умолчанию , поэтому указывать его не нужно.

Gal 29.09.2013 23:12

-c делает несколько вещей. По умолчанию он использует старое сообщение, но также копирует информацию об авторстве (человек и время). -C делает то же самое, за исключением того, что он не просит вас редактировать сообщение.

Joseph K. Strauss 28.12.2014 05:55

Как и @SantanuDey, у меня это не сработало. Получил fatal: Option -m cannot be combined with -c/-C/-F/--fixup.

Andrew Grimm 14.04.2015 08:22

Использование идентификатора фиксации полезно в ситуациях, когда вы хотите исправить более одной фиксации. Никаких других команд вам не нужно, это коротко и понятно.

webjockey 21.12.2016 19:43

Я попробовал это с фиксацией, которая была на 5 позади HEAD, и перешел на новое дерево. Мне пришлось сделать git reset --hard <commit-hash>, чтобы вернуться к последнему дереву.

miguelmorin 24.05.2019 00:20

Исправлять

У вас есть несколько вариантов. Ты можешь сделать

git commit --amend

пока это ваша последняя фиксация.

Интерактивное перебазирование

В противном случае, если это не ваша последняя фиксация, вы можете выполнить интерактивную перебазировку,

git rebase -i [branched_from] [hash before commit]

Затем внутри интерактивной перебазировки вы просто добавляете правку к этой фиксации. Когда он появится, выполните git commit --amend и измените сообщение фиксации. Если вы хотите откатиться до этой точки фиксации, вы также можете использовать git reflog и просто удалить эту фиксацию. Затем вы снова делаете git commit.

Вы можете использовать Git перебазирование. Например, если вы хотите изменить обратно, чтобы зафиксировать bbc643cd, запустите

$ git rebase bbc643cd^ --interactive

В редакторе по умолчанию измените 'pick' на 'edit' в строке, фиксацию которой вы хотите изменить. Внесите изменения, а затем выполните их с помощью

$ git add <filepattern>

Теперь вы можете использовать

$ git commit --amend

чтобы изменить фиксацию, и после этого

$ git rebase --continue

чтобы вернуться к предыдущей фиксации головы.

Если вы хотите убедиться, что ваше изменение с git commit --amend повлияло на вас, вы можете использовать git show, и он покажет новое сообщение.

Steve Tauber 20.02.2013 00:12

Использовать

git commit --amend

Чтобы разобраться в деталях, отличный пост - 4. Переписываем историю Git. Также там говорится о когда не использоватьgit commit --amend.

Есть ли хороший способ исправить сообщения фиксации, уже отправленные в общедоступный репозиторий? Пока я пришел к выводу, что после того, как я нажму, мои опечатки в коммитах и ​​мысли должны жить вечно.

stackunderflow 04.06.2013 15:32

Одним словом, НЕТ! Нет ХОРОШЕГО способа отозвать то, что вы толкнули. Все ретракции в большей или меньшей степени ПЛОХОЕ. Вам нужно научиться работать в ветке в вашем собственном частном репозитории, делать несколько коммитов по мере добавления, тестирования и настройки. Затем объедините всю свою ветку в одну фиксацию, напишите новое сообщение фиксации, описывающее общее изменение, ПРОЧИТАЙТЕ его и нажмите.

kbro 29.06.2013 07:29

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

ShawnFumo 11.09.2013 22:20

Ответ git commit --amend уже был дан (несколько раз) до того, как вы написали свой. Почему ты выложил это снова? Если вы хотите добавить ссылку на «Переписывание истории Git», вы могли бы отредактировать один из существующих ответов или оставить комментарий.

Dan Dascalescu 02.05.2019 04:17

Я использую Git GUI как можно чаще, и это дает вам возможность изменить последний коммит:

Tick that box

Кроме того, git rebase -i origin/master - это хорошая мантра, которая всегда будет представлять вам коммиты, которые вы сделали поверх мастера, и дает вам возможность изменить, удалить, переупорядочить или сжать. Не нужно сначала добывать этот хеш.

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

Marwan مروان 25.06.2014 00:01

Это нижняя правая часть Windows Git Gui. Просто выберите переключатель «Изменить последнюю фиксацию», и он заполнится самой последней информацией о фиксации.

wbdarby 29.01.2016 19:51

Ух ты, есть много способов сделать это.

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

git reset --soft HEAD~1
git commit -m 'New and corrected commit message'

Я всегда так делаю, если забываю добавить файл или внести изменения.

Помнить, чтобы указать --soft вместо --hard, иначе вы полностью потеряете эту фиксацию.

Он делает то же самое, что и git commit --amend, за исключением того, что это двухэтапный процесс.

Joseph K. Strauss 28.12.2014 05:58

@ JosephK.Strauss Я считаю, что при внесении изменений в коммит также сохраняется исходная информация об авторе и дате фиксации, поскольку информация о новом коммитере и дате сохраняется отдельно. Я не уверен, что этот подход делает это.

everton 08.05.2016 02:13

@EvertonAgner Вы правы. --amend сохранит информацию об авторе, но вопрос только просит изменить сообщение.

Joseph K. Strauss 09.05.2016 16:59

Я добавил псевдонимы reci и recm для recommit (amend). Теперь это можно сделать с помощью git recm или git recm -m:

$ vim ~/.gitconfig

[alias]

    ......
    cm = commit
    reci = commit --amend
    recm = commit --amend
    ......

Если вы просто хотите отредактировать последнюю фиксацию, используйте:

git commit --amend

или же

git commit --amend -m 'one line message'

Но если вы хотите отредактировать несколько коммитов подряд, вам следует вместо этого использовать ребазинг:

git rebase -i <hash of one commit before the wrong commit>

Git rebase editing

В файле, подобном приведенному выше, напишите edit/e или одну из других опций, нажмите «Сохранить» и выйти.

Теперь вы попадете в первую ошибочную фиксацию. Внесите изменения в файлы, и они будут автоматически перенесены за вас. Тип

git commit --amend

Сохраните и выйдите из этого и введите

git rebase --continue

для перехода к следующему выбору, пока не закончите со всеми вашими выборами.

Обратите внимание, что эти вещи изменяют все ваши хэши SHA после этого конкретного коммита.

git rebase -i <хэш одного коммита до неправильного коммита> у меня работает. благодаря.

Viraths 13.04.2018 03:57

Обновите последнее сообщение о неправильной фиксации новым сообщением о фиксации в одной строке:

git commit --amend -m "your new commit message"

Или попробуйте сбросить Git, как показано ниже:

# You can reset your head to n number of commit
# NOT a good idea for changing last commit message,
# but you can get an idea to split commit into multiple commits
git reset --soft HEAD^

# It will reset you last commit. Now, you
# can re-commit it with new commit message.

Использование сброса для разделения коммитов на более мелкие коммиты

git reset также может помочь вам разбить одну фиксацию на несколько коммитов:

# Reset your head. I am resetting to last commits:
git reset --soft HEAD^
# (You can reset multiple commit by doing HEAD~2(no. of commits)

# Now, reset your head for splitting it to multiple commits
git reset HEAD

# Add and commit your files separately to make multiple commits: e.g
git add app/
git commit -m "add all files in app directory"

git add config/
git commit -m "add all files in config directory"

Здесь вы успешно разбили свою последнюю фиксацию на две фиксации.

Если все, что вы хотите сделать, это отредактировать сообщение вашего последнего коммита, используйте для этой цели программный сброс перебивать. Просто используйте git commit --amend, в точности так, как написано в самый популярный ответ. Кроме того, git reset --soft HEAD^ работает идентично мягкому сбросу в этот предыдущий ответ, потому что они оба возвращаются к первой родительской фиксации.

user456814 22.07.2014 03:15

Я только потрудился добавить git reset в решение, чтобы дать идею разделить одно сообщение фиксации на несколько сообщений фиксации. Потому что я столкнулся с этой проблемой, когда начинал использовать git. Иногда это может быть действительно полезно. :)

przbadu 22.07.2014 10:29

Если вы хотите изменить только последнее сообщение, вы должны использовать флаг --only или его ярлык -o с commit --amend:

git commit --amend -o -m "New commit message"

Это гарантирует, что вы случайно не улучшите свой коммит с помощью постановочного материала. Конечно, лучше иметь правильную конфигурацию $EDITOR. Затем вы можете не указывать параметр -m, и Git предварительно заполнит сообщение фиксации старым. Таким образом его можно легко редактировать.

«Верхний» ответ не отвечает на вопрос. Он просто дает общее представление о git commit --amend. Вопрос был очень конкретным, поэтому длиннее! = Лучше. Решающее упоминание флага -o, вероятно, будет похоронено в остальной информации. Мне также неудобно редактировать ответ, за который уже так много голосов.

David Ongaro 21.07.2014 00:51

При этом вы можете редактировать верхний ответ, поскольку существует реальная опасность того, что люди используют его как «правильный» ответ. Легко может случиться, что вы поправите коммит с помощью постановочного материала - это случилось со мной, и это действительно раздражает, когда вы делаете это. Но все же количество не является гарантией правильности. Ни по количеству ответов, ни по количеству голосов.

David Ongaro 21.07.2014 00:51

Я бы не стал заходить так далеко, чтобы сказать, что главный ответ «неправильный» и что он «не отвечает на вопрос». Он определенно работает и отвечает на вопрос, вам просто нужно убедиться, что у вас нет поэтапных изменений, когда вы пытаетесь внести поправки. Но я понимаю, что вам нужно предупреждать людей об этом. Я отредактирую его позже, если будет время.

user456814 22.07.2014 01:26

Чтобы быть справедливым: хотя опция --only с --amend доступна с git 1.3.0, она не работала правильно, пока она не была исправлена ​​в 1.7.11.3 (ea2d4ed35902ce15959965ab86d80527731a177c). Так что правильным ответом в 2008 году, вероятно, было бы что-то вроде: git stash; git commit --amend; git stash pop.

David Ongaro 22.07.2014 03:00

Я понял, что отправил коммит с опечаткой. Чтобы отменить, я сделал следующее:

git commit --amend -m "T-1000, advanced prototype"
git push --force

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

В git ничего не перезаписывается. В этом случае указатель ветки будет установлен на ваш новый коммит, а старый коммит станет устаревшим, если на него не останется ссылок, и он может быть очищен через несколько недель. (До тех пор другие все еще могут найти его и сослаться на него, например, заглянув в журнал ссылок.)

David Ongaro 05.09.2014 03:47

На этот вопрос есть много ответов, но ни один из них не объясняет очень подробно, как изменить старые сообщения фиксации с помощью Vim. Я застрял, пытаясь сделать это сам, поэтому здесь я подробно опишу, как я это сделал, особенно для людей, у которых нет опыта в Vim!

Я хотел изменить свои пять последних коммитов, которые я уже отправил на сервер. Это довольно «опасно», потому что, если кто-то уже сделал это, вы можете все испортить, изменив сообщения фиксации. Однако, если вы работаете над своей маленькой веткой и уверены, что ее никто не потянул, вы можете изменить ее следующим образом:

Допустим, вы хотите изменить свои пять последних коммитов, а затем набираете это в терминале:

git rebase -i HEAD~5

* Где 5 - количество сообщений фиксации, которые вы хотите изменить (поэтому, если вы хотите изменить 10-е на последнюю фиксацию, введите 10).

Эта команда приведет вас в Vim, где вы сможете «редактировать» историю коммитов. Вы увидите свои последние пять коммитов вверху следующим образом:

pick <commit hash> commit message

Вместо pick нужно написать reword. Вы можете сделать это в Vim, набрав i. Это заставляет вас перейти в режим вставлять. (Вы видите, что находитесь в режиме вставки по слову ВСТАВЛЯТЬ внизу.) Для коммитов, которые вы хотите изменить, введите reword вместо pick.

Затем вам нужно сохранить и закрыть этот экран. Для этого сначала войдите в «командный режим», нажав кнопку Esc (вы можете проверить, что вы находитесь в командном режиме, если слово ВСТАВЛЯТЬ внизу исчезло). Затем вы можете ввести команду, набрав :. Команда для сохранения и выхода - wq. Так что если вы наберете :wq, вы на правильном пути.

Затем Vim просматривает каждое сообщение фиксации, которое вы хотите перефразировать, и здесь вы можете фактически изменить сообщения фиксации. Вы сделаете это, перейдя в режим вставки, изменив сообщение фиксации, войдя в командный режим, сохранив и выйдя. Сделайте это пять раз, и Vim закончится!

Затем, если вы уже отправили неправильные коммиты, вам нужно, чтобы git push --force перезаписал их. Помните, что git push --force - довольно опасное занятие, поэтому убедитесь, что никто не извлекал данные с сервера, так как вы отправили неправильные коммиты!

Теперь вы изменили сообщения коммитов!

(Как видите, у меня не так много опыта в Vim, поэтому, если я использовал неправильный «жаргон», чтобы объяснить, что происходит, не стесняйтесь поправлять меня!)

<nitpick> На Stack Overflow нет «тем», потому что это не дискуссионный форум, есть только «вопросы», «ответы» и «сообщения» .</nitpick>. Кроме того, не все версии Vim одинаковы, не все из них позволяют удалять символы в режиме вставки (в каком-то смысле это имеет смысл, верно?). Если вы хотите всегда иметь возможность удалять символы в Vim, X и x будут делать это (маленький x удаляет символы перед курсором, X удаляет позади). Если вы сделаете ошибку, вы можете повторно использовать u для отмены. Наконец, r - это сокращение от reword в интерактивном редакторе перебазирования.

user456814 07.08.2014 21:47

Чтобы изменить слово в vim, введите cw в его начале (хотя вопрос не о vim, я согласен).

Yaroslav Nikitenko 05.12.2015 09:25

Вам не нужно использовать эта мерзость. Вы можете установите свой редактор git сделать что-нибудь разумное и удобное для пользователя, например nano или mcedit Midnight Commander.

Dan Dascalescu 02.05.2019 04:28

Мне нравится использовать следующее:

  1. git status
  2. git add --all
  3. git commit -am "message goes here about the change"
  4. git pull <origin master>
  5. git push <origin master>

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

Sourcetree interactive rebase

Для коммитов, которые еще не были отправлены на удаленный компьютер:

  1. Убедитесь, что вы зафиксировали или сохранили все текущие изменения (т.е. что на вкладке «Состояние файла» нет файлов) - иначе это не сработает.
  2. На вкладке «Журнал / История» щелкните правой кнопкой мыши запись с примыкающей линией в графе один ниже фиксации, которую вы хотите отредактировать, и выберите «Перебазировать дочерние элементы <ссылка на фиксацию> в интерактивном режиме ...»
  3. Выделите всю строку для сообщения фиксации, которое вы хотите изменить (щелкните столбец «Сообщение»).
  4. Нажмите кнопку «Редактировать сообщение».
  5. Отредактируйте сообщение в появившемся диалоговом окне и щелкните OK.
  6. Повторите шаги 3-4, если нужно изменить другие сообщения фиксации.
  7. Щелкните OK: начнется изменение базы данных. Если все в порядке, вывод будет завершен «Завершено успешно». ПРИМЕЧАНИЕ: Я иногда видел, что это не удается с Unable to create 'project_path/.git/index.lock': File exists. при попытке изменить несколько сообщений фиксации одновременно. Не уверен, в чем именно заключается проблема, и будет ли она исправлена ​​в будущей версии Sourcetree, но если это произойдет, я бы рекомендовал переустанавливать их по одному (медленнее, но кажется более надежным).

... Или ... для уже отправленных коммитов:

Выполните шаги в этот ответ, которые аналогичны приведенным выше, но требуют, чтобы из командной строки (git push origin <branch> -f) была запущена дополнительная команда, чтобы принудительно протолкнуть ветвь. Я бы рекомендовал прочитать все это и проявить необходимую осторожность!

из всех ответов - это наиболее подходящий для всех новичков git ^^^ (используйте бесплатную программу SourceTree и примените "Rebase children of" к фиксации перед той, которую вы хотите отредактировать)

revelt 29.06.2019 08:53

Если вы не отправили код в удаленную ветку (GitHub / Bitbucket), вы можете изменить сообщение фиксации в командной строке, как показано ниже.

 git commit --amend -m "Your new message"

Если вы работаете над определенной веткой, сделайте следующее:

git commit --amend -m "BRANCH-NAME: new message"

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

Пожалуйста, прочтите мой ответ, прежде чем делать это.

git commit --amend -m "BRANCH-NAME : your new message"

git push -f origin BRANCH-NAME                # Not a best practice. Read below why?

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

 git commit --amend -m "BRANCH-NAME : your new message"
 git pull origin BRANCH-NAME
 git push -f origin BRANCH-NAME

Это лучший способ изменить сообщение фиксации, если оно уже было отправлено.

Если это ваша последняя фиксация, просто исправлять фиксации:

git commit --amend -o -m "New commit message"

(Использование флага -o (--only), чтобы убедиться, что вы изменяете только сообщение фиксации)


Если это скрытый коммит, используйте отличный интерактивное перебазирование:

git rebase -i @~9   # Show the last 9 commits in a text editor

Найдите нужную фиксацию, измените pick на r (reword), сохраните и закройте файл. Сделанный!



Миниатюрный учебник по Vim (или, как выполнить перебазирование всего с 8 нажатиями клавиш 3jcwrEscZZ):

  • Запустите vimtutor, если есть время
  • hjkl соответствуют клавишам движения
  • Все команды могут иметь префикс "диапазон", например 3j перемещается на три строчки вниз
  • i для входа в режим вставки - текст, который вы вводите, появится в файле
  • Esc или Ctrlc для выхода из режима вставки и возврата в «нормальный» режим
  • u для отмены
  • Ctrlr повторить
  • dd, dw, dl для удаления строки, слова или буквы соответственно
  • cc, cw, cl для изменения строки, слова или буквы соответственно (аналогично ddi)
  • yy, yw, yl для копирования («восстановления») строки, слова или буквы соответственно
  • p или P для вставки после или до текущей позиции соответственно
  • :wEnter для сохранения (записи) файла
  • :q!Enter для выхода без сохранения
  • :wqEnter или ZZ для сохранения и выхода

Если вы много редактируете текст, переключитесь на Раскладка клавиатуры Дворжака, научитесь печатать вслепую и изучите Vim. Стоит ли прилагать усилия? Да.



ProTip ™: не бойтесь экспериментировать с «опасными» командами, которые перезаписывают историю * - Git не удаляет ваши коммиты в течение 90 дней по умолчанию; вы можете найти их в рефлоге:

$ git reset @~3   # Go back three commits
$ git reflog
c4f708b HEAD@{0}: reset: moving to @~3
2c52489 HEAD@{1}: commit: more changes
4a5246d HEAD@{2}: commit: make important changes
e8571e4 HEAD@{3}: commit: make some changes
... earlier commits ...
$ git reset 2c52489
... and you're back where you started

* Остерегайтесь таких опций, как --hard и --force - они могут сбрасывать данные. * Кроме того, не переписывайте историю веток, над которыми вы сотрудничаете.

Часть vim полностью не по теме, и вместо того, чтобы побуждать пользователей тратить время на обучение использованию загадочного редактора, почему бы не научить их чему-то более тематическому, например, как настроить редактор git по умолчанию, чтобы он был удобен для пользователя, например nano? Мы говорим о тривиальных модификациях, которые необходимо внести в текстовый файл, а не о жестком кодировании, которое вызвало бы ожесточенную войну за «лучший» текстовый редактор.

Dan Dascalescu 02.05.2019 04:19

@DanDascalescu: потому что быстрее изучить Vim с помощью приведенных выше инструкций, чем выполнять несколько перезагрузок с помощью nano. Вся причина, по которой git открывает текстовый редактор, а не свой собственный интерфейс для перебазирования, заключается в том, что существует Vim: он легкий, установлен по умолчанию в большинстве систем, и его очень легко изучить, чтобы с легкостью выполнить ребазирование: ddjjpZZ перемещает фиксацию 2 вниз. В базовых знаниях Vim нет ничего загадочного; требуется 10 минут, чтобы освоиться с Vim более комфортно, чем с nano.

Zaz 03.05.2019 01:07

Вы можете использовать git-rebase-reword

Он предназначен для редактирования любой фиксации (не только последней) так же, как commit --amend.

$ git rebase-reword <commit-or-refname>

Он назван в честь интерактивного действия rebase для изменения фиксации: "reword". Смотрите эта почта и человек -раздел интерактивный режим-

Примеры:

$ git rebase-reword b68f560
$ git rebase-reword HEAD^

Для этого требуется установка внешней программы. На мой взгляд, было бы лучше научиться более эффективно использовать встроенные инструменты и псевдонимы. Я бы набрал: g c; g rb -i @~9 (фиксация и перебазирование), переместил новую фиксацию в нужное место, изменил commit на f (fixup) и сохранил. Если вам нужно что-то более быстрое, вы можете использовать псевдоним git commit --fixup=<commit>; git rebase -i --autosquash <commit>^

Zaz 29.04.2015 18:25

Другие вопросы по теме