Обновление удаленной ветки после переписывания истории

GitGitBeginner
Практиковаться сейчас

This tutorial is from open-source community. Access the source code

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

Git - это мощная система контроля версий, которая позволяет разработчикам отслеживать изменения в их кодовой базе. Одной из ключевых функций Git является возможность переписывать историю, которая может быть полезной, когда вам нужно внести изменения в предыдущие коммиты. Однако переписывание истории может вызывать проблемы при попытке отправить изменения в удаленный репозиторий. В этом лабе вы узнаете, как обновить удаленную ветку после переписывания истории локально.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL git(("Git")) -.-> git/CollaborationandSharingGroup(["Collaboration and Sharing"]) git/CollaborationandSharingGroup -.-> git/remote("Manage Remotes") subgraph Lab Skills git/remote -.-> lab-12734{{"Обновление удаленной ветки после переписывания истории"}} end

Обновление удаленной ветки после переписывания истории

Когда вы переписываете историю локально, вы создаете новый коммит с другим хешем SHA-1. Это означает, что история коммитов на вашей локальной ветке отличается от истории коммитов на удаленной ветке. Если вы попытаетесь отправить свои изменения в удаленную ветку, Git отклонит отправку, потому что увидит историю коммитов как расходящуюся. Чтобы решить эту проблему, вам нужно принудительно обновить удаленную ветку.

Для завершения этого лабара вы будете использовать репозиторий Git git-playground из вашего аккаунта GitHub, который является форком от https://github.com/labex-labs/git-playground.git.

  1. Клонируйте репозиторий git-playground на свою локальную машину:
git clone https://github.com/your-username/git-playground.git
  1. Обновите коммит с сообщением "Added file2.txt" до коммита с сообщением "Update file2.txt":
git commit --amend
  1. Отправьте изменения из локальной ветки в удаленный репозиторий:
git push
  1. Если вы не можете отправить его успешно, выполните принудительную отправку:
git push -f origin master

Флаг -f заставляет Git обновить удаленную ветку с вашими изменениями, даже если история коммитов расходится.

Это конечный результат:

commit b8c530558ecd004156dd05ac7d22d8cf07b2c28e (HEAD -> master, origin/master, origin/HEAD)
Author: Hang <[email protected]>
Date:   Wed Apr 26 14:16:25 2023 +0800

    Update file2.txt

commit cf80005e40a3c661eb212fcea5fad06f8283f08f
Author: Hang <[email protected]>
Date:   Wed Apr 26 14:16:25 2023 +0800

    Added file1.txt

commit b00b9374a7c549d1af111aa777fdcc868d8a2a01
Author: Hang <[email protected]>
Date:   Wed Apr 26 14:16:00 2023 +0800

    Initial commit

Резюме

В этом лабе вы узнали, как обновить удаленную ветку после переписывания истории локально. Используя команду git push -f, вы можете заставить Git обновить удаленную ветку с вашими изменениями, даже если история коммитов расходится. Важно использовать эту команду с осторожностью, так как она может перезаписать изменения, внесенные другими разработчиками.