Как обновить git для последнего редактирования? [Дубликат]

Собственно, подумайте об этом в другом случае. Предположим, что если ваш список таков:

[[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]]

, и если вы напишете myList[0][0] = 5, вы получите:

>>> 
[[5, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]]
>>> 

Как и ожидалось. Но так как вы определяете свою переменную списка следующим образом:

[[1] * 4] * 3

Python обработает ваши коды по этому шаблону. Поэтому, если вы напишете myList[0][0] и ваш список, как указано выше, Python обработает его, как [1]*3. Вот почему все списки первых элементов изменены.

303
задан Peter Majeed 16 June 2014 в 14:18
поделиться

19 ответов

Вы не можете возвращать незафиксированные изменения вообще.

Ранее поставленные изменения (git add) должны быть восстановлены из объектов индекса, поэтому, если вы это сделали, используйте git fsck --lost-found для поиска связанных с ним объектов.

Если нет, ответ здесь будет: посмотрите на свою резервную копию. Возможно, ваш редактор / IDE хранит временные копии в / tmp или C: \ TEMP и тому подобное. [1]

git reset HEAD@{1}

Это восстановит предыдущую HEAD

[1 ] vim eg опционально сохраняет постоянную отмену, IDE-хранилище eclipse хранит локальную историю ; такие функции могут сэкономить ваш **

273
ответ дан Julian de Bhal 17 August 2018 в 20:19
поделиться
  • 1
    Местная история Eclipse - и, кроме того, поскольку некоторые изменения были старше 6 дней, моя резервная копия Time Machine локальной истории Eclipse! По какой-то причине резервное копирование Time Machine из папки, управляемой git, не содержало моих предыдущих изменений. – christianbrodbeck 31 May 2012 в 05:31
  • 2
    Вы серьезно позаботились о жизни! У TextWrangler была резервная копия файлов. спасибо – Vivek Sampara 6 December 2012 в 20:18
  • 3
    +1 для подсказки локальной истории Eclipse. Это настоящий спасатель, когда Гит неожиданно возвращает файл ... – nitwit 14 February 2013 в 23:06
  • 4
    спасибо за сохранение моей жизни с git reset HEAD@{1} – jan groth 27 May 2014 в 23:36
  • 5
    @sehe Большое спасибо! это решение отлично работало для меня. Это была настоящая жизнь. :) – iqbalmp 8 October 2015 в 06:32
  • 6

ответьте на это SO

$ git reflog show
93567ad HEAD@{0}: reset: moving to HEAD@{6}    
203e84e HEAD@{1}: reset: moving to HEAD@{1}    
9937a76 HEAD@{2}: reset: moving to HEAD@{2}
203e84e HEAD@{3}: checkout: moving from master to master
203e84e HEAD@{4}: reset: moving to HEAD~1
9937a76 HEAD@{5}: reset: moving to HEAD~1
d5bb59f HEAD@{6}: reset: moving to HEAD~1
9300f9d HEAD@{7}: commit: fix-bug

# said the commit to be recovered back is on 9300f9d (with commit message fix-bug)
$ git reset HEAD@{7}

У вас есть свой день назад! :)

264
ответ дан Community 17 August 2018 в 20:19
поделиться
  • 1
    Чтобы добавить к этому ответу, это поможет людям, которые действительно совершили изменения, которые были выброшены с помощью жесткого сброса. – murki 5 August 2014 в 19:18
  • 2
    почему это не лучший ответ ??? ты просто спас мой день !!!!!!!!!!!! Спасибо. – MeV 7 August 2015 в 11:40
  • 3
    Отлично, но в моем случае файлы полностью исчезли. Использование git checkout HEAD@{19} позволило мне проверить потерянные файлы в отдельном состоянии. Затем использовали git checkout -b new-branch-name, чтобы добавить их обратно в репо в "прикрепленном" государство. – NightOwl888 2 October 2016 в 19:29
  • 4
  • 5
    @ user3385759 - В Git, когда вы используете команду checkout для чего-либо, что не является ветвью, оно переходит в специальную «отдельную голову». Режим. Это означает, что вы фактически не указываете на ветку, но вы можете просмотреть, что было проверено, в состоянии объекта (в этом случае запись reflog). Из этого состояния вы можете превратить его в «реальный». ветку, чтобы вернуться к ней снова, используя git checkout -b new-branch-name. Книга Прагматическая версия контроля с использованием Git хорошо объясняет Git в простых терминах. – NightOwl888 14 November 2016 в 20:53
  • 6
    ты мой любимый герой – NomNomCameron 11 January 2017 в 04:20
  • 7
    – VeteranCoder 18 October 2017 в 17:32

Справочный ответ из этого SO,

После запуска git reflog show скажите, что вы хотите перейти на фиксацию 9300f9d

после запуска git reset 9300f9d

, вы можете do git status, а затем вам может потребоваться проверить ваши файлы для восстановления ваших изменений

git checkout - filepath / name

0
ответ дан dan 17 August 2018 в 20:19
поделиться

Это то, что я обычно делаю, если я потеряю некоторые изменения.

git reflog
git checkout <commit id> // now you are in where you want but you cannot push from detached branch to master
manually copy and paste changes from detached branch to master or working branch
git reset --hard HEAD // if needed
git add ... > git commit ... > git push ...

, чтобы вернуть указатель назад к вашим предыдущим записям, но сохраняя изменения, внесенные вами до последнего момента в вашей последней проверке фиксации git reset --soft dadada

8
ответ дан DragonKnight 17 August 2018 в 20:19
поделиться

Я случайно запустил git reset --hard в моем репо сегодня, также имея нефиксированные изменения сегодня. Чтобы вернуть его, я побежал git fsck --lost-found, который написал все unreferenced blobs в <path to repo>/.git/lost-found/. Поскольку файлы были нефиксированы, я нашел их в каталоге other в <path to repo>/.git/lost-found/. Оттуда я могу увидеть незафиксированные файлы, скопировать кадры и переименовать их.

Примечание. Это работает, только если вы добавили файлы, которые хотите сохранить в индекс (с помощью git add .). Если файлы не были в индексе, они теряются.

264
ответ дан Echostar 17 August 2018 в 20:19
поделиться
  • 1
    Спасибо, человек, к счастью, я добавил. до «git reset --hard» ... – Akash Agrawal 30 September 2011 в 07:57
  • 2
    Я получил только файлы с рекомендациями фиксации в lost-found. Но я мог бы сделать git show, чтобы получить содержимое. – Mitar 17 September 2013 в 05:28
  • 3
  • 4
    Полностью спасла моя думба **. Спасибо огромное! : D – lohiaguitar91 28 August 2014 в 17:07
  • 5
    Просто чтобы сохранить время #!/bin/bash cd PATH_TO_PROJECT/.git/lost-found/other FILES=* COUNTER = 0 for f in $FILES do echo "Processing $f file..." git show $f > "PATH_TO_RECOVERY_DIRECTORY/$COUNTER.m" let COUNTER=COUNTER+1 done – rwolst 22 October 2014 в 15:08
  • 6
  • 7
    Это ЛУЧШИЙ совет. Я обыскал полчаса и поговорил с экспертами git, и, видимо, никто не знал о потерянных. Слава богу, что создатели git жалеют таких людей, как я, которые слишком кавалеры с жесткими сбрасываниями. – Per 26 November 2016 в 15:25

Если вы, к счастью, открыли те же файлы в другом редакторе (например, Sublime Text), попробуйте ctrl-z. Это просто спасло меня.

104
ответ дан Ga Sacchi 17 August 2018 в 20:19
поделиться
  • 1
    До сих пор я считаю, что это лучший и самый краткий ответ. Может показаться противоположным интуитивно понятным восстановление из git reset --hard с помощью другого git reset --hard, но если вы не используете переключатель --hard, вы останетесь с элементами в рабочей области, которые эффективно вернут работу, которую вы только что восстановили. – Ryan H. 17 March 2017 в 18:07
  • 2
    Работает как шарм! Предыдущий ответ ( stackoverflow.com/questions/5788037/recover-from-git-reset-hard/… ) не работал для меня. – codemax 29 November 2017 в 11:12
  • 3
    Это спасло мою жизнь! Спасибо!! – awerdan 12 January 2018 в 14:16
  • 4
    Спасибо тебе большое. – Badhan Ganesh 1 March 2018 в 08:20
  • 5
    Черт, я использовал git show 67db6072093a119fef0cfe946191e09d861360d5 > path-to-file, но использование git reset --hard <commit-retrieved-using-reflog> спасло бы мне скуку. По крайней мере, я знаю в следующий раз (надеюсь, никогда не будет в следующий раз). – Nick Bolton 27 July 2018 в 13:37

Вы можете вернуть фиксацию после выполнения reset --hard HEAD.

Использовать «git reflog» для проверки истории HEAD в ветке.

Вы увидите свою фиксацию и ее идентификатор здесь.

Сделайте

git reset {commit Id of the commit you want to bring back}
5
ответ дан J. Chomel 17 August 2018 в 20:19
поделиться

Если вы используете что-то вроде IntelliJ:

http://blog.jetbrains.com/idea/2008/01/using-local-history-to-restore-deleted-files/

Это только что заставило мою задницу стрелять!

21
ответ дан JonathanTien 17 August 2018 в 20:19
поделиться

Когда мы делаем git reset --hard, и все локальные неуправляемые изменения удаляются. Чтобы восстановить изменения - в IDE щелкните файл, сравните файл с локальной историей, в которой будут перечислены изменения в соответствии с датой, и мы сможем восстановить данные. Ваш день сохранен!

-1
ответ дан Manfred Radlwimmer 17 August 2018 в 20:19
поделиться

По определению, git reset --hard выкинет незафиксированные изменения без возможности для их восстановления (ваша резервная система может помочь, но не Git).

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

  • Если вы хотите выбросить свои незафиксированные изменения, используйте git stash. Он сохранит резервную копию этих изменений, срок действия которых истечет через некоторое время, если вы запустите git gc. Если вы на 99,9% уверены, что вам никогда не понадобится эти изменения, то git stash все равно ваш друг для случая 0,1%. Если вы на 100% уверены, то git stash все еще ваш друг, потому что у этих 100% есть ошибка измерения; -).
  • Если вы хотите переместить ваш HEAD и кончик текущего ветвь в истории, тогда git reset --keep - ваш друг. Он будет делать то же, что и git reset --hard, но not отменит ваши локальные изменения.
  • Если вы хотите сделать то и другое, тогда git stash && git reset --keep является вашим другом.

Научите свои пальцы не использовать git reset --hard, он окупится один день.

11
ответ дан Matthieu Moy 17 August 2018 в 20:19
поделиться

Информация потеряна.

Поскольку вы не совершали, ваш .git никогда не хранил эту информацию. Таким образом, в основном git не может восстановить его для вас.

Но, если вы только что сделали git diff, вы можете восстановить с помощью вывода терминала следующие 3 простых шага.

  1. прокрутите свой терминал и найдите o / p из git diff. Сохраните файл o / p в файле с именем diff.patch
  2. Search & amp; Замените все 7 пробелов и 8 пробелов символом tab (\ t) и сохраните изменения.
  3. Зайдите в свой репозиторий git. Примените diff.patch (patch -p1 < diff.patch)

Вы спасены! :)

Примечание. При копировании данных с терминала в файл будьте осторожны и четко видите, что данные являются непрерывными и не содержат избыточных данных (из-за нажатия стрелок вверх и вниз) , В противном случае вы можете испортить это.

8
ответ дан mk.. 17 August 2018 в 20:19
поделиться

Пока я работал над локальным проектом, я хотел переместить его в GitHub, а затем создал новый репозиторий. Хотя я пытался добавить все эти файлы в новый репозиторий с помощью .gitignore, я случайно добавил неверный файл, а затем попытался его очистить.

Я побежал git reset --hard origin/master: P

Затем все мои локальные файлы удалены, потому что репо было пустым. Я думал, что все прошло.

Это спасло мою жизнь:

git reflog show
git reset HEAD@{1} 
git push 

Надеюсь, что это спасет другую жизнь.

47
ответ дан Orcun 17 August 2018 в 20:19
поделиться
  • 1
    Вы настоящий MVP – Mirror318 4 October 2017 в 07:16
  • 2
    Для меня это было git reset HEAD@\{27\} , спасибо! – 4oby 3 November 2017 в 12:49
  • 3
    Что вы используете для git? Я думаю, что с ним связаны управляющие персонажи. – Orcun 5 November 2017 в 18:10
  • 4
    У меня есть 7 коммитов для сброса, я использую git reflog show для проверки и из этого первого коммита я использую git reset HEAD@{number} – Vishwas Nahar 3 May 2018 в 09:01
  • 5
    Человек, которого ты спас мне сегодня. Спасибо вам очень много! : '): D – Tirth Patel 15 June 2018 в 22:33

Если вы работаете в Netbeans, посмотрите между вкладками файлов и областью редактирования файлов. Существует «Источник» и «История». В разделе «История» вы увидите изменения, сделанные с помощью контроля версий (git / other), а также изменения, сделанные локально. В этом случае локальные изменения могут спасти вас.

0
ответ дан Pedro Alvares 17 August 2018 в 20:19
поделиться

Я обнаружил, что любые незафиксированные файлы до того, как git reset --hard <commit> удаляются из истории git. Тем не менее, мне посчастливилось сохранить открытый сеанс редактора кода в течение всего времени, когда я вытягивал свои волосы, что я обнаружил, что простой control + z в каждом из затронутых файлов возвратил состояние файла обратно в версию прежде чем Гит так услужливо сбросил все, о чем я не спросил его конкретно. Hooray!!

2
ответ дан Progoogler 17 August 2018 в 20:19
поделиться
  • 1
    Серьезно просто спасла мне жизнь. Даже не думал об этом. – kleezy 10 March 2018 в 22:10
  • 2
    вы спасли меня пару часов. Я понятия не имею, как я сам не проверял – GreatWiz 24 April 2018 в 00:02

Если вы пытаетесь использовать код ниже:

git reflog show
# head to recover to
git reset HEAD@{1} 

и по какой-то причине получают:

error: неизвестный переключатель `e '

, затем попробуйте обернуть HEAD@{1} в кавычки

git reset 'HEAD@{1}'
1
ответ дан user3284463 17 August 2018 в 20:19
поделиться

Я только что сделал git reset --hard и потерял все мои незафиксированные изменения. К счастью, я использую редактор (IntelliJ), и мне удалось восстановить изменения в Local History. Eclipse должен позволить вам сделать то же самое.

26
ответ дан warvariuc 17 August 2018 в 20:19
поделиться
  • 1
    Благодаря!!! Фу, я думал, что 2 дня Работы были истощены, благодаря этому комментарию – RamNat 28 May 2014 в 21:06
  • 2
    Это просто напомнило мне, что у моего компьютера есть машина времени! – danh 27 January 2016 в 17:15
  • 3
    Жизнь спасает человека, спасателя жизни. Я понял, что нахожусь в неправильной ветке, поэтому я сделал сброс git и решил обновить эту ветку. Он удалил все мои изменения. Но действительно, я использую intellij и забыл о местной истории. Мне нравится эта IDE еще больше! – jemiloii 27 November 2017 в 23:12

Да, ВЫ МОЖЕТЕ ВОССТАНОВИТЬСЯ из жесткого сброса в git.

Используйте:

git reflog

, чтобы получить идентификатор вашей фиксации. Затем используйте:

git reset --hard <commit-retrieved-using-reflog>

Этот трюк спас мою жизнь пару раз.

Вы можете найти документацию reflog ЗДЕСЬ .

104
ответ дан Ga Sacchi 17 August 2018 в 20:20
поделиться
  • 1
    До сих пор я считаю, что это лучший и самый краткий ответ. Может показаться противоположным интуитивно понятным восстановление из git reset --hard с помощью другого git reset --hard, но если вы не используете переключатель --hard, вы останетесь с элементами в рабочей области, которые эффективно вернут работу, которую вы только что восстановили. – Ryan H. 17 March 2017 в 18:07
  • 2
    Работает как шарм! Предыдущий ответ ( stackoverflow.com/questions/5788037/recover-from-git-reset-hard/… ) не работал для меня. – codemax 29 November 2017 в 11:12
  • 3
    Это спасло мою жизнь! Спасибо!! – awerdan 12 January 2018 в 14:16
  • 4
    Спасибо тебе большое. – Badhan Ganesh 1 March 2018 в 08:20
  • 5
    Черт, я использовал git show 67db6072093a119fef0cfe946191e09d861360d5 > path-to-file, но использование git reset --hard <commit-retrieved-using-reflog> спасло бы мне скуку. По крайней мере, я знаю в следующий раз (надеюсь, никогда не будет в следующий раз). – Nick Bolton 27 July 2018 в 13:37
  • 6
0
ответ дан TimJowers2 6 September 2018 в 13:06
поделиться
2
ответ дан TimJowers2 29 October 2018 в 19:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: