Примечание: вы можете git fetch upstreamсначала найти это полезным , а затем быстро взглянуть на git diff upstream/branchто, что вы будете объединять. Если все хорошо, тогда продолжайтеgit merge upstream/branch
Шахбаз
1
Вы потеряете весь свой уличный кредит и будете пристыкованы к зарплате за неделю, если какой-нибудь хипстерский программист увидит, что вы выполняете команды git из графического интерфейса, но и у GitHub Desktop, и у Atom есть безопасные, простые кнопки для undoфиксации и флажки для простой и четкой постановки и удаления файлов. GUI тоже люди!
Дем
Ответы:
391
Или сделать его более явным, чем другой ответ:
git pull
упс?
git reset --keep HEAD@{1}
Версии git старше 1.7.1 не имеют --keep. Если вы используете такую версию, вы можете использовать --hard- но это опасная операция, потому что она теряет все локальные изменения.
ORIG_HEAD - это предыдущее состояние HEAD, устанавливаемое командами, которые могут иметь опасное поведение, чтобы их было легко вернуть. Теперь менее полезно использовать Git reflog: HEAD @ {1} примерно эквивалентно ORIG_HEAD (HEAD @ {1} всегда является последним значением HEAD, ORIG_HEAD - последним значением HEAD перед опасной операцией)
@ Hugemeow Это был бы хороший вопрос ТАК. Тем временем man git-rev-parseописывает это. HEAD@{1}это предыдущее значение символического HEADв reflogто время как HEAD^это (первая) материнская редакция тока HEAD. Эти два не должны быть эквивалентными (например, после перебазировки, полной перезагрузки, переключения веток и тому подобного). Прочитайте связанную статью для reflog. Приветствия
sehe
10
Пользователи PowerShell, убегайте от скобок с обратной чертой:git reset HEAD@`{1`}
Роберт Клэйпул
3
ss64.com/ps/syntax-esc.html Я думаю, что вы хотели напечатать HEAD@`{1`}или, в этом отношении, сделать то, что работает и на POSIX-оболочках:'HEAD@{1}'
sehe
2
Я думаю, что это не только сбросить тягу, но и мои коммиты = (
falsarella
67
git reflog showдолжен показать вам историю HEAD. Вы можете использовать это, чтобы выяснить, где вы были до pull. Затем вы можете resetваш HEADк этой фиксации.
git reflog show выдает следующие выходные данные: c9e5e4d HEAD @ {0}: вытягивание: ускоренная перемотка вперед 1c86a22 HEAD @ {1}: вытягивание исходного источника: ускоренная перемотка 05c141a HEAD @ {2}: вытягивание: ускоренная перемотка Можно ли безопасно сбросить HEAD в HEAD? @ {1}
Kartins
Другой ответ от sehe содержит подробности о том, как туда добраться.
Нуфал Ибрагим
Это было очень полезно после катастрофического коммита, каким-то образом вкрапленного коммитом слияния в мою историю. Получил их, ища последний известный товар в reflog и затем принудительно толкнул.
Доменик
Что если pullэто первое действие? Если pullэто в HEAD@{1}, и ничего больше до этого, как вы возвращаетесь в состояние до этого?
Хендра Узия
Воссоздать хранилище?
Нуфал Ибрагим
29
Это сработало для меня.
git reset --hard ORIG_HEAD
Отменить слияние или тягу:
$ git pull (1)
Auto-merging nitfol
CONFLICT (content): Merge conflict in nitfol
Automatic merge failed; fix conflicts and then commit the result.
$ git reset --hard (2)
$ git pull . topic/branch (3)
Updating from 41223... to 13134...
Fast-forward
$ git reset --hard ORIG_HEAD (4)
Найдите <SHA#>коммит, на который вы хотите пойти. Вы можете найти его в GitHub или набрав git logили git reflog showв командной строке, а затем сделать
git reset --hard <SHA#>
Даже если у вас есть локальные изменения в вашем рабочем дереве, вы можете с уверенностью сказать, что git pullкогда вы знаете, что изменения в другой ветви не перекрываются с ними.
Изучив результат слияния, вы можете обнаружить, что изменение в другой ветке неудовлетворительное. Запуск git reset --hard ORIG_HEAD
позволит вам вернуться туда, где вы были, но он отменит ваши локальные изменения, которые вы не хотите. git reset --mergeсохраняет ваши локальные изменения.
git fetch upstream
сначала найти это полезным , а затем быстро взглянуть наgit diff upstream/branch
то, что вы будете объединять. Если все хорошо, тогда продолжайтеgit merge upstream/branch
undo
фиксации и флажки для простой и четкой постановки и удаления файлов. GUI тоже люди!Ответы:
Или сделать его более явным, чем другой ответ:
упс?
Версии git старше 1.7.1 не имеют
--keep
. Если вы используете такую версию, вы можете использовать--hard
- но это опасная операция, потому что она теряет все локальные изменения.Комментатору
источник
man git-rev-parse
описывает это.HEAD@{1}
это предыдущее значение символическогоHEAD
вreflog
то время какHEAD^
это (первая) материнская редакция токаHEAD
. Эти два не должны быть эквивалентными (например, после перебазировки, полной перезагрузки, переключения веток и тому подобного). Прочитайте связанную статью для reflog. Приветствияgit reset HEAD@`{1`}
HEAD@`{1`}
или, в этом отношении, сделать то, что работает и на POSIX-оболочках:'HEAD@{1}'
git reflog show
должен показать вам историю HEAD. Вы можете использовать это, чтобы выяснить, где вы были доpull
. Затем вы можетеreset
вашHEAD
к этой фиксации.источник
pull
это первое действие? Еслиpull
это вHEAD@{1}
, и ничего больше до этого, как вы возвращаетесь в состояние до этого?Это сработало для меня.
Отменить слияние или тягу:
Проверьте это: HEAD и ORIG_HEAD в Git для получения дополнительной информации.
источник
Найдите
<SHA#>
коммит, на который вы хотите пойти. Вы можете найти его в GitHub или набравgit log
илиgit reflog show
в командной строке, а затем сделатьgit reset --hard <SHA#>
источник
<SHA#>
С https://git-scm.com/docs/git-reset#Documentation/git-reset.txt-Undoamergeorpullinsideadirtyworkingtree
Смотрите также https://stackoverflow.com/a/30345382/621690
источник