Як скасувати тягнення git?


238

Я хотів би скасувати мою тягу за рахунок небажаних комісій на віддаленому походження, але я не знаю, до якої редакції я повинен скинути назад.

Як я можу просто повернутися до штату, перш ніж я витягнув кишку на віддалене походження?


4
Побічна примітка: git fetch upstreamспочатку вам може бути корисно , потім швидко подивіться, git diff upstream/branchщоб побачити, у що ви будете зливатися. Якщо все добре, тоді продовжуйтеgit merge upstream/branch
Шахбаз

1
Ви втратите всі свої кредити на вулицю і отримаєте доплату за тиждень, якщо будь-який програміст хіпстера побачить, що ви виконайте команди git із графічного інтерфейсу, але обидва GitHub Desktop та Atom мають безпечні, прості кнопки для встановлення undoта встановлення прапорців для легкого та чіткого розміщення та нестабільності файлів. GUI - це теж люди!
Dem Pilafian

Відповіді:


391

Або зробити це більш явним, ніж інша відповідь:

git pull 

ой?

git reset --keep HEAD@{1}

Версії git старше 1.7.1 не мають --keep. Якщо ви використовуєте таку версію, ви можете використовувати --hard- але це небезпечна операція, оскільки вона втрачає будь-які локальні зміни.


До коментатора

ORIG_HEAD - попередній стан HEAD, встановлений командами, які можуть мати небезпечну поведінку, щоб їх було легко відновити. Менш корисно зараз, коли Git відбивається: HEAD @ {1} приблизно еквівалентний ORIG_HEAD (HEAD @ {1} завжди останнє значення HEAD, ORIG_HEAD - останнє значення HEAD перед небезпечною роботою)


2
яка різниця між HEAD @ {1} та HEAD ^?
hugemeow

7
@hugemeow Це було б прекрасним питанням. Тим часом man git-rev-parseце описує. HEAD@{1}це попереднє значення символічного HEADв reflogтой час як HEAD^це (перша) материнська редакція струму HEAD. Цим двом потрібно кивати рівнозначні (наприклад, після перезавантаження, жорсткого скидання, перемикання гілки тощо). Читайте пов'язану статтю для reflog. Ура
1212

10
Користувачі PowerShell, уникаючи дужок за допомогою зворотного вибору:git reset HEAD@`{1`}
Роберт Клейпул

3
ss64.com/ps/syntax-esc.html Я думаю, що ви хотіли набрати HEAD@`{1`}або з цього приводу зробити те, що працює і на оболонках POSIX:'HEAD@{1}'
1313

2
Я думаю, що це не лише скине тягу, але й мої зобов’язання = (
falsarella

67

git reflog showмає показати вам історію HEAD. Ви можете скористатися цим, щоб визначити, де ви були раніше pull. Потім ви можете resetваш HEADдо цієї фіксації.


шоу git reflog дало цей вихід: c9e5e4d HEAD @ {0}: тягнути: Швидкий вперед 1c86a22 HEAD @ {1}: майстер походження потягу: Швидкий вперед 05c141a HEAD @ {2}: pull: Швидкий вперед Я можу безпечно скинути СТУПУ В ГОЛОВУ @ {1}
Картінс,

В іншій відповіді sehe є деталі, як дістатися.
Нуфал Ібрагім

Це було надзвичайно корисно після катастрофічного вчинення, якесь чином перемежовується злиттями в мою історію. Дістаньте їх, шукаючи останній відомий товар у рефлозі, а потім змушуйте натискати.
Доменіч

Що робити, якщо 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)

Оформіть це: HEAD та ORIG_HEAD в Git для отримання додаткової інформації.


17

Знайдіть <SHA#>зобов’язання, яке ви хочете зробити. Ви можете знайти його в github або ввівши git logабо git reflog showв командному рядку, а потім виконати git reset --hard <SHA#>


Знайдіть, що потрібно зробити?
Мартін

Вибачте, я це виправила<SHA#>
Ніна

Це команда, яку я найбільше використовую, коли мені щось потрібно скасувати
Картінс,

2

З https://git-scm.com/docs/git-reset#Documentation/git-reset.txt-Undoamergeorpullinsideadirtyworkingtree

Скасуйте злиття або потягніть всередину брудне робоче дерево

$ git pull           (1)
Auto-merging nitfol
Merge made by recursive.
 nitfol               |   20 +++++----
 ...
$ git reset --merge ORIG_HEAD      (2)

Навіть якщо у вашому робочому дереві можуть бути локальні модифікації, ви можете сміливо сказати, git pullколи знаєте, що зміни в іншій гілці не перетинаються з ними.

Перевіривши результат злиття, ви можете виявити, що зміна в іншій гілці незадовільна. Біг git reset --hard ORIG_HEAD дозволить повернутися туди, де ви були, але він відкине ваші локальні зміни, яких ви не хочете. git reset --mergeзберігає ваші місцеві зміни.

Дивіться також https://stackoverflow.com/a/30345382/621690


Дякую! Ти врятував мій день
Тіаго Мартінс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.