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

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

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

11 ответов


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

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

git commit --amend

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

толкал

и затем, когда вы нажимаете, Сделать это:

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

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

git push <repository> +<branch>

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

git push --force <repository> <branch>

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

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

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

потянув / извлечение после

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

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

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

примечание об изменении история

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

если вы не думаете, что уничтожаете данные, тогда держитесь подальше от --force... плохие вещи могут случиться.

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


просто сказать :

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

а то

git push --force

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

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

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

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

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

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


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

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

а то

git push -f

готово :)


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

обратите внимание, что --force применяется ко всем ссылкам, которые выталкиваются, следовательно, используя это с толчком.по умолчанию задано совпадение или множественное нажатие назначения, настроенные с помощью remote.*.push может перезаписывать ссылки другие чем текущая ветка (включая локальные ссылки, которые строго позади их удаленный аналог). Чтобы принудительно нажать только на одну ветку, используйте a + перед refspec нажать (e.G git нажмите origin + master, чтобы заставить толчок к главной ветви).


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


команда 1.

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

затем,

команда 2.

git push origin --force

git commit --amend

затем "правка", затем измените сообщение в текущем окне. После этого

git push --force-with-lease

это работает для меня очень хорошо,

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

и ты молодец


другой вариант-создать дополнительную "фиксацию ошибок" (и push), которая ссылается на объект фиксации, содержащий ошибку-новая фиксация ошибок также обеспечивает исправление. Фиксация ошибок-это фиксация без существенных изменений кода, но важное сообщение фиксации - например, добавьте один символ пробела в файл readme и зафиксируйте это изменение с помощью важного сообщения фиксации или используйте опцию git --allow-empty. Это, конечно, проще и безопаснее, чем перебазирование, это не так измените истинную историю, и она сохранит дерево ветвей в чистоте (используя amend также является хорошим выбором, если вы исправляете самую последнюю фиксацию, но фиксация ошибок может быть хорошим выбором для более старых фиксаций). Такого рода вещи так редко случаются, что достаточно просто документировать ошибку. В будущем, если вам нужно искать в журнале git ключевое слово feature, исходная (ошибочная) фиксация может не отображаться, потому что неправильное ключевое слово было использовано в этой исходной фиксации (исходная опечатка) -- однако ключевое слово появится в фиксации ошибок, которая затем укажет вам на исходную фиксацию, в которой была опечатка. Вот пример:

$ git log
commit 0c28141c68adae276840f17ccd4766542c33cf1d
Author: First Last 
Date:   Wed Aug 8 15:55:52 2018 -0600

    Errata commit:
    This commit has no substantive code change.
    This commit is provided only to document a correction to a previous commit message.
    This pertains to commit object e083a7abd8deb5776cb304fa13731a4182a24be1
    Original incorrect commit message:
        Changed background color to red
    Correction (*change highlighted*):
        Changed background color to *blue*

commit 032d0ff0601bff79bdef3c6f0a02ebfa061c4ad4
Author: First Last 
Date:   Wed Aug 8 15:43:16 2018 -0600

    Some interim commit message

commit e083a7abd8deb5776cb304fa13731a4182a24be1
Author: First Last 
Date:   Wed Aug 8 13:31:32 2018 -0600

    Changed background color to red

дополнительная информация для той же проблемы, если вы используете bitbucket pipeline

редактировать

git commit --amend

нажмите на разрыв

git push --force <repository> <branch>

затем добавьте --force к вашей команде push на конвейере

git ftp push --force

это удалит ваши предыдущие фиксации и нажмите текущую.

удалите --force после первого нажатия

я попробовал его на трубопроводе bitbucket и его работает нормально