Изменение сообщения git commit после нажатия (при условии, что никто не вытащил из пульта)

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

Есть ли способ сделать это?

+635
24 янв. '12 в 1:58
источник поделиться
9 ответов

Изменение истории

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

git commit --amend

Это вызывает редактор с последним сообщением фиксации и позволяет редактировать сообщение. (Вы можете использовать -m, если хотите стереть старое сообщение и использовать новый.)

Нажатие

И затем, когда вы нажимаете, сделайте следующее:

git push --force-with-lease <repository> <branch>

Или вы можете использовать "+":

git push <repository> +<branch>

Или вы можете использовать --force:

git push --force <repository> <branch>

Будьте внимательны при использовании этих команд.

  • Если кто-то другой нажал изменения в одну ветвь, вы, вероятно, захотите избежать уничтожения этих изменений. Параметр --force-with-lease является самым безопасным, так как он будет прерван, если есть какие-либо восходящие изменения (

  • Если вы явно не укажете ветвь, Git будет использовать настройки push по умолчанию. Если ваша настройка по умолчанию "соответствует", вы можете одновременно уничтожить изменения на нескольких ветвях.

Вытягивание/выборка

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

git fetch origin
git reset --hard origin/master # Loses local commits

Будьте осторожны при использовании reset --hard. Если у вас есть изменения в ветке, эти изменения будут уничтожены.

Заметка об изменении истории

Уничтоженные данные на самом деле являются только старым сообщением фиксации, но --force не знает этого и с радостью удалит другие данные. Поэтому подумайте о --force как "Я хочу уничтожить данные, и я точно знаю, какие данные уничтожаются". Но когда уничтоженные данные фиксируются, вы можете часто восстанавливать старые коммиты из reflog - данные фактически потеряны, а не уничтожены (хотя потерянные синтаксические ошибки периодически удаляются).

Если вы не думаете, что уничтожаете данные, избегайте --force... могут произойти плохие вещи.

Вот почему --force-with-lease несколько безопаснее.

+922
24 янв. '12 в 2:02
источник

Просто скажите:

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

а затем

git push --force origin <BRANCH-NAME>
+271
31 дек. '14 в 6:45
источник

Связанные вопросы


Похожие вопросы

Может быть, опаздываю на вечеринку, вот ответ, который я не вижу здесь.

Шаг1: git rebase -i HEAD~n, чтобы сделать интерактивную перезагрузку для последней ошибки n.

git выведет редактор для обработки этих коммитов, обратите внимание на эту команду: # r, reword = use commit, but edit the commit message, это именно то, что нам нужно.

Шаг 2: измените pick на r для тех коммиттов, которые вы хотите обновить. Сохраните и закройте редактор.

Шаг 3: в следующих файлах фиксации обновите сообщение об ошибке, как вам нравится

Шаг4: после того, как все коммиты обновляются. вы можете сделать git push -f для обновления пульта.

+110
01 февр. '17 в 19:17
источник

Используйте эти два шага в консоли:

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

, а затем

git push -f

Готово:)

+29
19 июн. '17 в 9:48
источник

Следует отметить, что , если вы используете push --force с mutiple refs, в результате ВСЕ будут изменены. Обязательно обратите внимание на то, где ваш репозиторий git настроен на push к. К счастью, есть способ немного облегчить процесс, указав одну ветвь для обновления. Прочтите из справочных страниц git:

Обратите внимание, что -force применяется ко всем refs, которые вытолкнуты, следовательно, используя он с push.default, установленным для соответствия или с несколькими нажатиями адресаты, настроенные с удаленным. *. push может перезаписывать ссылки другим чем текущая ветвь (включая локальные ссылки, которые строго позади их удаленный аналог). Чтобы принудительно нажать только одну ветвь, используйте + перед нажатием кнопки refspec (например, git нажмите начало координат + мастер, чтобы заставить нажатие на ведущую ветвь).

+15
23 мар. '14 в 23:47
источник

Если вы хотите изменить старшую фиксацию, а не последнюю, вам нужно будет использовать команду rebase, как описано здесь, Страница справки Github в Внесение изменений в сообщение старых или нескольких сообщений фиксации

+7
28 окт. '16 в 10:43
источник

Команда 1.

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

Затем

Команда 2.

git push origin --force
+4
18 апр. '17 в 3:52
источник

Это работает для меня довольно хорошо,

git checkout origin/branchname

Если вы уже находитесь в ветке, тогда лучше сделать pull или rebase

git pull

или

git -c core.quotepath=false fetch origin --progress --prune

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

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

или если вы хотите открыть текстовый редактор, используйте

git commit --amend

Я предпочитаю использовать текстовый редактор, если у вас много комментариев. Вы можете выбрать нужный текстовый редактор командой

git config --global core.editor your_preffered_editor_here

В любом случае, когда все будет сделано, измените сообщение фиксации, сохраните его и выйдите из

а затем запустите

git push --force

И вы закончили

+1
12 мая '17 в 13:51
источник
git commit --amend

затем

git push --force-with-lease

отлично работает.

+1
05 янв. '18 в 6:09
источник

Посмотрите другие вопросы по меткам или Задайте вопрос