Изменение сообщения 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
несколько безопаснее.
может опоздать на вечеринку, вот ответ, который я здесь не вижу.
Шаг 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 и его работает нормально