Почему я должен принудительно нажать push после изменения сообщения о коммите?
Я прочитал это о том, как изменить сообщения коммита. Принятый ответ говорит:
Если вы уже выдвинули свой коммит в удаленную ветку, то вам нужно принудительно протолкнуть коммит с помощью
git git push <remote> <branch> --force
,
Это мое понимание (также из принятого ответа), что git push --force
перезапишет все данные в удаленной ветви с локальной.
Почему принудительное нажатие после изменения сообщения фиксации необходимо? Что произойдет, если я исправлю сообщение фиксации и попытаюсь нажать без -f
или же --force
?
2 ответа
Изменяя коммиты, вы меняете их SHA1, что означает, что локальная и удаленная история больше не совпадают.
Если вы хотите заменить удаленную историю вашей (измененной) локальной, вам нужно будет принудительно нажать.
Если вы этого не сделаете, Git откажется от push и попросит вас вытащить (что в этом случае бесполезно, так как вы объединяетесь с идентичным контентом, но с разными сообщениями фиксации)
Принудительное нажатие может быть опасным, так как оно заставляет других сотрудников переустанавливать свою собственную локальную историю на новую (принудительную отправку).
Как прокомментировано, --force-with-lease
безопаснее (если удаленная ветвь, которую вы изменяете, сама была изменена со времени вашего последнего нажатия, то есть другие активно использовали ее и отодвигали ее назад, то принудительное нажатие отклоняется).
Объедините это с разумной политикой вытягивания (когда вы всегда изменяете то, что еще не нажали), и принудительное нажатие становится менее необходимым.
Насколько я понимаю (также из принятого ответа), git push --force перезапишет все данные в удаленной ветви на локальную.
Изменяя коммиты, вы уже переписали свою историю git (изменив SHA1 коммита). Amend
Это нормально, если вы не опубликовали свои изменения, но, как только вы это сделаете, вам действительно не стоит копаться в истории, потому что, если кто-то уже получил ваши изменения, тогда, когда они попытаются снова потянуть, это может не получиться. Вместо внесения изменений в коммит, вы должны просто сделать новый коммит с изменениями.
Что произойдет, если я исправлю сообщение фиксации и попытаюсь нажать без -f или --force?
Git откажется обновлять удаленную ветку вашей веткой (имея в виду публичную фиксацию), потому что головная фиксация вашей ветки не является прямым потомком текущей головной ветки ветки, к которой вы переходите
Если бы это было не так, то два человека, отправляющих файлы в один и тот же репозиторий примерно в одно и то же время, не знали бы, что одновременно поступает новый коммит, и тот, кто нажал последний, потеряет работу предыдущего толкателя без какого-либо из них. они понимают это.
Почему принудительное нажатие после изменения сообщения фиксации необходимо?
Как я уже упоминал выше, git не позволит отправить в удаленную ветку. Вы можете прочитать этот вопрос. У этого есть много возможных решений этой проблемы.