Я сделал git commit и последующий пуш. Я хотел бы изменить сообщение коммита. Если я правильно понимаю, это не рекомендуется, потому что кто-то мог вытащить из удаленного хранилища, прежде чем я внесу такие изменения. Что если я знаю, что никто не потянул?
Есть ли способ сделать это?
Ответы:
Изменение истории
Если это самый последний коммит, вы можете просто сделать это:
Это вызывает редактор с последним сообщением фиксации и позволяет вам редактировать сообщение. (Вы можете использовать,
-m
если хотите стереть старое сообщение и использовать новое.)Нажимать
И затем, когда вы нажимаете, сделайте это:
Или вы можете использовать «+»:
Или вы можете использовать
--force
:Будьте осторожны при использовании этих команд.
Если кто-то еще отправил изменения в ту же ветку, вы, вероятно, захотите избежать уничтожения этих изменений.
--force-with-lease
Вариант является самым безопасным, потому что он будет прерван , если есть какие - либо изменения вверх по течению (Если вы не укажете ветку явно, Git будет использовать настройки push по умолчанию. Если заданная по умолчанию настройка push - «match», вы можете уничтожить изменения в нескольких ветвях одновременно.
Вытащить / извлечь потом
Любой, кто уже вытащил, теперь получит сообщение об ошибке, и ему нужно будет обновить (при условии, что они не вносят никаких изменений самостоятельно), выполнив что-то вроде этого:
Будьте осторожны при использовании
reset --hard
. Если у вас есть изменения в ветке, эти изменения будут уничтожены.Примечание об изменении истории
Уничтоженные данные - это просто старое сообщение о коммите, но они
--force
этого не знают и с удовольствием удалят и другие данные. Поэтому подумайте:--force
«Я хочу уничтожить данные, и я точно знаю, какие данные уничтожаются». Но когда уничтоженные данные фиксируются, вы часто можете восстановить старые коммиты из журнала изменений - данные фактически осиротели, а не уничтожены (хотя осиротевшие коммиты периодически удаляются).Если вы не думаете, что уничтожаете данные, тогда держитесь подальше от
--force
... могут случиться плохие вещи .Вот почему
--force-with-lease
несколько безопаснее.источник
git push --force
без опций <repository> и <branch> работает, если у вас настроен апстрим.<repository>
? Этоorigin
?org/repo
? Или простоrepo
?Просто скажи :
а потом
источник
git push origin <BRANCH-NAME>
не сработало, пришлось использоватьgit push --force
как объяснил в принятом ответе.git push --force
, иначе толчок не пройдет.Чтобы отредактировать коммит, отличный от самого последнего:
Шаг 1 :
git rebase -i HEAD~n
сделать интерактивную перезагрузку для последнихn
затронутых коммитов. (т. е. если вы хотите изменить сообщение о коммите 3 коммитов назад, сделайтеgit rebase -i HEAD~3
)Git откроет редактор для обработки этих коммитов, обратите внимание на эту команду:
это именно то, что нам нужно!
Шаг2 : изменение
pick
вr
течение этих фиксаций , которые вы хотите обновить сообщение. Не беспокойтесь об изменении сообщения коммита здесь, оно будет проигнорировано. Вы сделаете это на следующем шаге. Сохраните и закройте редактор.Обратите внимание, что если вы редактируете план перебазирования, но он не запускает процесс переименования файлов, выполните:
Если вы хотите изменить текстовый редактор, используемый для интерактивного сеанса (например, с vi по умолчанию на nano), запустите:
Шаг 3 : Git будет открывать другой редактор для каждой ревизии, которую вы поместили
r
ранее. Обновите сообщение, как вам нравится, затем сохраните и закройте редактор.Шаг 4 : После всех коммитов сообщения обновляются. Вы можете сделать,
git push -f
чтобы обновить пульт.источник
git rebase -i HEAD~3
git rebase --continue
. И если вы хотите изменить текстовый редактор, используемый для интерактивного сеанса (например, с по умолчаниюvi
наnano
), запуститеGIT_EDITOR=nano git rebase -i HEAD~n
.Используйте эти два шага в консоли:
а потом
Выполнено :)
источник
Следует отметить, что если вы используете
push --force
с несколькими ссылками, они ВСЕ будут изменены в результате. Обязательно обратите внимание на то, где настроено ваше git-репо. К счастью, есть способ немного защитить процесс, указав одну ветвь для обновления. Читайте со страниц руководства пользователя git:источник
Если вы хотите изменить старый коммит, а не последний, вам нужно будет использовать
rebase
команду, как описано здесь, на странице справки Github , в разделе « Изменение сообщения старых или нескольких сообщений коммита ».источник
Команда 1 .
Затем,
Команда 2 .
источник
затем отредактируйте и измените сообщение в текущем окне. После этого делай
источник
Другой вариант - создать дополнительную «фиксацию ошибок» (и push), которая ссылается на объект фиксации, содержащий ошибку - новая фиксация ошибок также обеспечивает исправление. Ошибочная фиксация - это фиксация без существенных изменений кода, но с важным сообщением о фиксации - например, добавьте один пробел в ваш файл readme и зафиксируйте это изменение с важным сообщением фиксации или используйте опцию git
--allow-empty
. Это, конечно, проще и безопаснее, чем перебазирование, оно не изменяет истинную историю и сохраняет дерево ветвей чистым (используяamend
также является хорошим выбором, если вы исправляете самый последний коммит, но ошибочный коммит может быть хорошим выбором для более старых коммитов). Этот тип вещей случается так редко, что достаточно просто документировать ошибку. В будущем, если вам потребуется выполнить поиск в журнале git по ключевому слову функции, оригинальная (ошибочная) фиксация может не появиться, поскольку в этой оригинальной фиксации использовалось неверное ключевое слово (оригинальная опечатка) - однако ключевое слово появится в сообщении об ошибке, которое затем укажет вам исходный коммит с опечаткой. Вот пример:источник
git commit -m “fixed feature A”
(Предположим, что git присваивает этому идентификатору фиксации e3ab7312 ... ... (позже вы поймете, что ваше сообщение было неверным, поэтому внесите несущественное изменение в файл, например добавьте пробел в файл readme, или воспользуйтесь параметром—allow-empty
git). ..git commit -m “Errata commit for previous commit e3ab7312... original message should have been ‘fixed feature *B*’
'' 'git notes
это будет служить той же цели, что и «ошибочный коммит». Просто добавьте примечание к предыдущему коммиту, чтобы комментировать или исправлять любые ошибки в сообщении оhttps://git-scm.com/docs/git-notes
Это работает для меня довольно хорошо,
git checkout origin / branchname
если вы уже в ветке то лучше сделать тянуть или ребазировать
или
Позже вы можете просто использовать
или если вы хотите открыть текстовый редактор, используйте
Я предпочту использовать текстовый редактор, если у вас много комментариев. Вы можете установить предпочитаемый текстовый редактор с помощью команды
В любом случае, когда вы закончите изменять сообщение коммита, сохраните его и выйдите
а потом беги
И вы сделали
источник
дополнительная информация для той же проблемы, если вы используете конвейер bitbucket
отредактируйте ваше сообщение
подтолкнуть к разрыву
затем добавьте --force к вашей команде push на конвейере
Это удалит ваш предыдущий коммит (ы) и подтолкнет ваш текущий.
я попробовал это на конвейере bitbucket и он работает нормально
источник