Есть ли способ отменить или отменить git pull, чтобы мои исходные / репозитории пришли в старое состояние, которое было до выполнения git pull? Я хочу сделать это, потому что он объединяет некоторые файлы, которые я не хотел делать, а объединяет только остальные файлы. Итак, я хочу вернуть эти файлы, это возможно?
РЕДАКТИРОВАТЬ: Я хочу отменить мерзавец слияния для уточнения. Увидев некоторые ответы, я сделал это
git reflog
bb3139b... HEAD@{0}: pull : Fast forward
01b34fa... HEAD@{1}: clone: from ...name...
Что мне теперь делать? Делать git reset --hard
нормально? Я не хочу ввернуть это снова, поэтому просите подробные шаги?
git
version-control
git-merge
seg.server.fault
источник
источник
git reset --hard 01b34fa
в этом случае вы могли бы выполнитьgit reset --hard HEAD^
сброс до одного коммита до HEAD.git reflog
покажет все, что было сделано с git. Существует проблема,git reset --hard [sha1 of something from reflog]
которая вернет все, что показаноreflog
, что иногда не является целью, например. Вы хотите отменить слияние в основной ветке, извлеченной из источника с неверными данными (происходит), и после этого слияния вы работали с другими ветвями.reflog
покажет каждую шейгу на других ветках. Ноgit checkout master
иgit reset --hard [SH1 of commit on master branch just before merge]
сбросит только текущую главную ветку, удалив вытащенное слияние из источника.Ответы:
Бег
git pull
выполняет следующие задачи по порядку:git fetch
git merge
Шаг слияния объединяет ветви, которые были настроены для слияния в вашей конфигурации. Вы хотите отменить шаг слияния , но, вероятно, не извлечение (не имеет большого смысла и не должно быть необходимым).
Чтобы отменить слияние , используйте
git reset --hard
для сброса локального хранилища в предыдущее состояние; используйте git-reflog, чтобы найти SHA-1 предыдущего состояния и затем сбросить его.Предупреждение
Команды, перечисленные в этом разделе, удаляют все незафиксированные изменения, что может привести к потере работы:
В качестве альтернативы, сброс на определенный момент времени, например:
источник
master@{1}
, что предыдущее положениеmaster
,master@{"5 minutes ago"}
илиmaster@{14:30}
. Полную информацию об указании ревизий таким способом можно найтиman git-rev-parse
в разделе «Задание ревизий».Updating d2c90a3..035ac4d
. Здесь вы также можете использоватьd2c90a3
в качестве параметра для сброса.То же, что и ответ jkp, но вот полная команда:
где a0d3fe6 находится путем
и глядя на точку, в которой вы хотите отменить.
источник
git reset HEAD --hard
, например?git reset --hard HEAD@{n}
работалgit reflog
: dab04ec HEAD @ {0}, aaaaaaa HEAD @ {1} и bbbbbbb HEAD @ {2}. Если я сделаю,git reset --hard bbbbbbb
я потеряю ГОЛОВУ 0 и 1?Более современный способ отменить слияние:
И немного более старый способ:
Старый способ, описанный в предыдущих ответах (предупреждение: отменит все ваши локальные изменения):
Но на самом деле, стоит заметить, что
git merge --abort
это эквивалентно только тому,git reset --merge
чтоMERGE_HEAD
присутствует. Это можно прочитать в справке git для команды слияния.После неудачного слияния, когда его нет
MERGE_HEAD
, неудачное слияние можно отменить,git reset --merge
но не обязательно с помощьюgit merge --abort
, поэтому они не только имеют старый и новый синтаксис для одной и той же вещи . Вот почему я нахожуgit reset --merge
гораздо более полезным в повседневной работе.источник
git merge --abort
работает во время слияния, а не после того,git pull
как закончено. Так что этот ответ кажется несоответствующим вопросу.git reset --merge
удаляет все изменения, не подготовленные для фиксации. Выяснил это трудным путем.это работает первое использование:
git reflog
найдите свой SHA своего прежнего состояния и сделайте (например, HEAD @ {1})
источник
Если у вас есть gitk (попробуйте запустить «gitk --all из командной строки git»), это просто. Просто запустите его, выберите коммит, на который вы хотите откатиться (щелкните правой кнопкой мыши), и выберите «Сбросить основную ветвь сюда». Если у вас нет незафиксированных изменений, выберите «жесткий» вариант.
источник
Предположим, это
$COMMIT
был последний идентификатор коммита до того, как вы его выполнилиgit pull
. Что вам нужно, чтобы отменить последнее нажатиеgit reset --hard $COMMIT
,
Бонус:
Говоря о тяге, я хотел бы поделиться интересным трюком,
git pull --rebase
Эта команда является самой полезной в моей жизни Git, которая сэкономила много времени.
Перед отправкой вашего нового коммита на сервер, попробуйте эту команду, и она автоматически синхронизирует последние изменения сервера (с помощью fetch + merge) и поместит ваш коммит наверху в git log. Не нужно беспокоиться о ручном вытягивании / слиянии.
Найти подробности на: http://gitolite.com/git-pull--rebase
источник
Это самый простой способ отменить изменения.
Пожалуйста, сделайте резервную копию ваших измененных файлов, потому что это удалит вновь созданные файлы и папки .
Где
9573e3e0
ваш {Commit id}источник
Updating ffce65bd..e929e884
, то сделайтеgit reset --hard ffce65bd
ты можешь сделать
git reset --hard ORIG_HEAD
поскольку "pull" или "merge" устанавливают ORIG_HEAD в текущее состояние перед выполнением этих действий.
источник
Git Pull сделать ниже операции.
Чтобы отменить тянуть, выполните любую операцию:
Улучшение:
В следующий раз используйте
git pull --rebase
вместоgit pull
... его сервер синхронизации, изменив (fetch & merge).источник
В случае неудачного слияния, которое является наиболее распространенной причиной желания отменить a
git pull
, выполнениеgit reset --merge
делает именно то, что и следовало ожидать: сохранить извлеченные файлы, но отменить слияние, котороеgit pull
попыталось слить. Тогда можно решить, что делать без беспорядка, которыйgit merge
иногда порождает. И для этого не нужен точный идентификатор фиксации, который--hard
указан в каждом другом ответе.источник