Вообще править историю git — это очень плохая практика. Но если очень сильно хочется, то можно. Только нужно быть очень осторожным. Отговаривать вас не буду.
Если вы поправили какие-нибудь старые коммиты в истории git, например: исправили имя автора или e-mail, или отменили последний коммит или воспользовались amend или revert, то при попытке push-а git справедливо «ругнётся»:
1 2 3 4 5 6 7 8 |
$ git push To https://github.com/urvanov-ru/test0001.git ! [rejected] master -> master (non-fast-forward) error: failed to push some refs to 'https://github.com/urvanov-ru/test0001.git' hint: Updates were rejected because the tip of your current branch is behind hint: its remote counterpart. Integrate the remote changes (e.g. hint: 'git pull ...') before pushing again. hint: See the 'Note about fast-forwards' in 'git push --help' for details. |
Чтобы нам всё же запушить наши изменения, нам нужно выполнить либо
1 |
git push --force origin <имя_ветки> |
Но в этом случае мы рискуем перетереть чьи-нибудь изменения, если с тех пор, как мы забирали изменения с сервера, кто-то успел запушить свои коммиты. Поэтому лучше использовать более безопасную команду:
1 |
git push --force-with-lease origin <имя_ветки> |
Такой вариант лучше тем, что если кто-то успел запушить свои коммиты после того, как мы забирали изменения с сервера, то он не будет их перетирать, а выдаст нам ошибку, после чего мы сможем интегрировать чужие коммиты со своими изменениями и попытаться сделать push --force-with-lease ещё раз.