Отмена git push с другого компьютера - PullRequest
2 голосов
/ 07 января 2011

Хорошо, я работаю над проектом из дома и работаю на двух компьютерах с удаленным репо.

Когда я вернулся домой сегодня, мой домашний компьютер отстал от моего рабочего компьютера на 2 дня, и я сделал

git push origin master

случайно, который испортил удаленное репо (недавно клонированный код теперь не работает).

Я видел принятый ответ от этого вопроса , где он имел ссылку на последний хороший код.

Мой вопрос: как я могу отменить свои изменения, если последняя хорошая копия, которую я хочу, на работе, а я дома? Разве я не могу просто сказать удаленному серверу отменить последнее изменение?

Ответы [ 2 ]

5 голосов
/ 07 января 2011

Нет, вы не можете указать исходному репо "отменить" последнее изменение, удаленное удаленно.Вы могли бы SSH войти и сделать git reset --hard [revision], если у вас есть доступ.Однако…

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

Чтобы рассказать вам, что делать, чтобы выйти из этой ситуации, вам нужно определить, как обстоят дела с ветками и еще много чего.Как только вы это выясните, вы можете «отменить» последнее изменение, переведя ваше локальное хранилище в состояние, в котором вы хотите, чтобы источник находился (используя git reset --hard [revision]), тогда вы можете сделать git push --force, чтобы это состояние было отражено висходное репо.

Если у вас есть другие люди, работающие с исходным репо, вы захотите просто решить проблему, а не перезаписать ее.Для этого вам необходимо объединить необходимые изменения с вашим локальным репо, затем зафиксировать их как новое изменение и нажать.

4 голосов
/ 07 января 2011

Вы можете использовать git reflog show origin/master, чтобы показать, где ветвь origin/master была до нажатия. Возможно, есть способ получить более подробную информацию (например, дату и время каждого изменения / извлечения, которые его изменили) из команды git reflog, но я не знаю, что это такое. Таким образом, вы можете просто выполнить cat .git/logs/refs/remotes/origin/master, и это позволит вам выяснить, к какому коммиту вы пытаетесь вернуться. Более свежие изменения находятся внизу.

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