Я вставил коммит в удаленную ветку, используя SHA, который удалил 7 прошлых коммитов - PullRequest
0 голосов
/ 25 мая 2018

Я использовал эту команду git push -f https://github.com/userid/reponame.git <commit-sha>:<branch-name> для отправки коммитов на пульте.Но это удалило 7 предыдущих коммитов этой ветви.

Есть ли способ восстановить эти коммиты или отменить это изменение?Спасибо.

Редактировать: SHA, который я использовал, был слитым коммитом, и я не выбирал ту ветку, до которой я нажал.

Ответы [ 2 ]

0 голосов
/ 25 мая 2018

Если на сервере , на который вы отправили , не включены повторные журналы (а это обычное значение по умолчанию для большинства серверов), то эти коммиты удаляются с сервера , по крайней мере, какнасколько это касается самого Git.(Сервер может иметь резервные копии, и эти резервные копии могут иметь коммиты в той или иной форме, но то ли это так, и как их восстановить, выходит за рамки этого сообщества :-) - вам бы хотелось serverfault.com .)

Обратите внимание, что если вы можете войти на сервер, вы можете проверить, не повезло ли на сервере повторных флагов, или же git gc на самом деле еще не удалил коммиты.И то, и другое несколько маловероятно, но не невозможно (особенно в более новых версиях Git, которые используют «область карантина» для входящих коммитов, что было сделано частично, чтобы избежать необходимости немедленно запускать git gc после каждой полученной загрузки).

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

Это оставляет только еще одно место для поиска, хотя это большое место: любой другой компьютер, который когда-либо делал git fetch изсервер. Вам может повезти и вы обнаружите, что один из этих компьютеров имеет коммиты.Если это так, вы можете получить коммиты с этого компьютера.

Если нет, коммиты ушли навсегда.

0 голосов
/ 25 мая 2018

Вы можете использовать:

$ git reflog origin/branch-name

Он будет печатать любое движение источника / имени ветви и получать соответствующий номер коммита.

Использование:

$ git show commit-number

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...