Отменить git pull, как вернуть репозиции в старое состояние
Есть ли способ отменить или отменить git pull, чтобы исходный/репозиционный ресурс пришел в старое состояние, которое было до выполнения git pull?
Я хочу сделать это, потому что он объединил некоторые файлы, которые я не хотел делать, но только объединить остальные оставшиеся файлы. Итак, я хочу вернуть эти файлы, возможно ли это?
Спасибо:)
EDIT Я хочу отменить git слияние для уточнения.
После просмотра некоторых ответов я сделал это
git reflog
bb3139b... [email protected]{0}: pull : Fast forward
01b34fa... [email protected]{1}: clone: from ...name...
Теперь, что мне делать? Выполнение git reset --hard
в порядке? Я не хочу снова вкручивать его, поэтому прошу подробные шаги?
Ответы
Ответ 1
Запуск git pull
выполняет следующие задачи по порядку:
git fetch
git merge
Шаг слияния объединяет ветки, которые были настроены для слияния в вашей конфигурации. Вы хотите отменить шаг слияния, но, вероятно, не извлекать (не имеет большого смысла и не должно быть необходимо).
Чтобы отменить слияние, используйте git reset --hard
для сброса локального хранилища в предыдущее состояние; используйте git-reflog, чтобы найти SHA-1 предыдущего состояния, а затем восстановить его.
Предупреждение
Команды, перечисленные в этом разделе, удаляют все незафиксированные изменения, которые могут привести к потере работы:
git reset --hard
В качестве альтернативы можно выполнить сброс к определенному моменту времени, например:
git reset --hard [email protected]{"10 minutes ago"}
Ответ 2
То же, что и ответ jkp, но здесь полная команда:
git reset --hard a0d3fe6
где a0d3fe6 найден, выполняя
git reflog
и посмотрим на точку, в которую вы хотите отменить.
Ответ 3
Более современный способ отмены слияния:
git merge --abort
И немного более старый способ:
git reset --merge
Путь старой школы, описанный в предыдущих ответах (предупреждение: отменит все ваши локальные изменения):
git reset --hard
Но на самом деле стоит заметить, что git merge --abort
эквивалентен только git reset --merge
, если присутствует MERGE_HEAD
. Это можно прочитать в справке git для команды merge.
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
намного полезнее в повседневной работе.
Ответ 4
он работает
первое использование: git reflog
найдите свой SHA вашего состояния previse и сделайте (пример HEAD @{1})
git reset --hard [email protected]{1}
Ответ 5
Если у вас есть gitk (попробуйте запустить gitk -all из вашей командной строки git), это просто. Просто запустите его, выберите фиксацию, которую вы хотите откат (щелкните правой кнопкой мыши), и выберите "Reset master branch to here". Если у вас нет никаких изменений, выберите "жесткий" вариант.
Ответ 6
Предположим, что $COMMIT
был последним идентификатором фиксации перед выполнением git pull
.
Что вам нужно, чтобы отменить последнее нажатие,
git reset --hard $COMMIT
.
Бонус:
Говоря о pull, я хотел бы поделиться интересным трюком,
git pull --rebase
Эта вышеприведенная команда является самой полезной командой в моей жизни git, которая сэкономила много времени.
Прежде чем нажимать новую фиксацию на сервер, попробуйте эту команду, и она автоматически синхронизирует последние изменения сервера (с помощью слияния + слияние) и поместит вашу фиксацию вверху в журнал git. Не нужно беспокоиться о ручном вытягивании/слиянии.
Найти информацию по адресу: http://gitolite.com/git-pull--rebase
Ответ 7
вы можете сделать git reset --hard ORIG_HEAD
так как "pull" или "merge" устанавливают ORIG_HEAD как текущее состояние перед выполнением этих действий.
Ответ 8
Это самый простой способ отменить внесенные вами изменения.
git reset --hard 9573e3e0
Где 9573e3e0
- ваш {идентификатор_команды}
Ответ 9
Если происходит сбой слияния, что является наиболее распространенной причиной желания отменить git pull
, запуск git reset --merge
делает именно то, что и следовало ожидать: сохраните извлеченные файлы, но отмените слияние, которое git pull
попыталось слить. Тогда можно решить, что делать без беспорядка, который иногда создает git merge
. И он не нужен для того, чтобы найти точный идентификатор фиксации, который --hard
упомянутый в каждом другом ответе.
Ответ 10
Попробуйте эту команду ниже. Надеюсь, что это решит вашу проблему.
git reset --keep [email protected]{1}
Примечание. ORIG_HEAD
- это предыдущее состояние HEAD, заданное командами с потенциально опасным поведением, чтобы их было легко вернуть. Теперь менее полезно, что Git имеет reflog: [email protected]{1}
примерно эквивалентен ORIG_HEAD ([email protected]{1}
всегда является последним значением HEAD, ORIG_HEAD
является последним значением HEAD перед опасной операцией)
Ответ 11
Используйте git reset только в крайнем случае. Вы можете потерять данные. Просто найдите старые добрые файлы и передайте их плохим.