it-swarm.com.ru

Отмена мерзавца, как привести репо в старое состояние

Есть ли способ отменить или отменить git pull, чтобы мои исходные/репозитории пришли в старое состояние, которое было до выполнения git pull? Я хочу сделать это, потому что он объединяет некоторые файлы, которые я не хотел делать , но только объединить другие оставшиеся файлы. Итак, я хочу вернуть эти файлы, это возможно? Спасибо :)

РЕДАКТИРОВАТЬ Я хочу отменить мерзавец слияния для уточнения . После просмотра некоторых ответов, я сделал это 

git reflog
bb3139b... [email protected]{0}: pull : Fast forward
01b34fa... [email protected]{1}: clone: from ...name...

Что мне теперь делать? Делать git reset --hard в порядке? Я не хочу ввернуть это снова, поэтому просите подробные шаги? 

807
seg.server.fault

git pull сделает две вещи: он сделает git fetch, а затем git merge, где он объединяет ветви, которые были настроены для объединения в вашу конфигурацию.

Итак, что вы хотите сделать, это отменить слияние (отмена выборки не имеет большого смысла и не должна быть необходимой). 

Для этого вы можете попробовать использовать git reset --hard для возврата в предыдущее состояние. Используйте команду git-reflog , чтобы найти SHA-1 предыдущего состояния и затем сбросить его.

Warning: git reset --hard удаляет все незафиксированные изменения. 

1128
jkp

То же, что и ответ jkp, но вот полная команда:

git reset --hard a0d3fe6

где a0d3fe6 находится путем

git reflog

и глядя на точку, в которой вы хотите отменить. 

260
Jeffrey Sun

Более современный способ отменить слияние:

git merge --abort

И немного более старый способ:

git reset --merge

Путь старой школы, описанный в предыдущих ответах (предупреждение: отменит все ваши локальные изменения):

git reset --hard

Но на самом деле стоит заметить, что git merge --abort эквивалентен только git reset --merge, если присутствует MERGE_HEAD. Это можно прочитать в справке git для команды слияния.

git merge --abort is equivalent to git reset --merge when MERGE_HEAD is present.

После неудачного слияния, когда нет MERGE_HEAD, неудачное слияние можно отменить с git reset --merge, но не обязательно с git merge --abort, так что они не только старый и новый синтаксис для одной и той же вещи . Вот почему я считаю git reset --merge гораздо более полезным в повседневной работе.

89
Martin G

это работает Первое использование: git reflog

найдите SHA вашего предыдущего состояния и сделайте (например, HEAD @ {1})

git reset --hard [email protected]{1}
46
Ezequiel García

Если у вас есть gitk (попробуйте запустить «gitk --all из командной строки git»), это просто. Просто запустите его, выберите коммит, на который вы хотите откатиться (щелкните правой кнопкой мыши), и выберите «Сбросить основную ветвь сюда». Если у вас нет незафиксированных изменений, выберите «жесткий» вариант.

37
Samuel Carrijo

Предположим, что $COMMIT был последним идентификатором коммита до того, как вы выполнили git pull. Вам нужно отменить последнее нажатие

git reset --hard $COMMIT

,.

Бонус:

Говоря о тяге, я хотел бы поделиться интересным трюком,

git pull --rebase

Эта команда является самой полезной в моей жизни в git, которая сэкономила много времени.

Перед отправкой вашего нового коммита на сервер, попробуйте эту команду, и она автоматически синхронизирует последние изменения на сервере (с помощью fetch + merge) и поместит ваш коммит наверху в git log. Не нужно беспокоиться о ручном вытягивании/слиянии.

Подробности можно найти по адресу: http://gitolite.com/git-pull--rebase

24
Sazzad Hissain Khan

вы можете сделать git reset --hard ORIG_HEAD

поскольку "pull" или "merge" устанавливают ORIG_HEAD в текущее состояние перед выполнением этих действий.

10
Orlando

Это самый простой способ отменить изменения.

git reset --hard 9573e3e0

Где 9573e3e0 - это ваш {Commit id}

5
Manish Goswami

В случае неудачного слияния, которое является наиболее распространенной причиной желания отменить git pull, запуск git reset --merge делает именно то, что и следовало ожидать: сохранить выбранные файлы, но отменить слияние, которое git pull пытался слить. Затем можно решить, что делать без беспорядка, который иногда генерирует git merge. И он не нужен для того, чтобы найти точный идентификатор фиксации, который --hard упоминается в каждом другом ответе.

0
Davide