Собственно, подумайте об этом в другом случае. Предположим, что если ваш список таков:
[[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
. Вот почему все списки первых элементов изменены.
Вы не можете возвращать незафиксированные изменения вообще.
Ранее поставленные изменения (git add
) должны быть восстановлены из объектов индекса, поэтому, если вы это сделали, используйте git fsck --lost-found
для поиска связанных с ним объектов.
Если нет, ответ здесь будет: посмотрите на свою резервную копию. Возможно, ваш редактор / IDE хранит временные копии в / tmp или C: \ TEMP и тому подобное. [1]
git reset HEAD@{1}
Это восстановит предыдущую HEAD
[1 ] vim eg опционально сохраняет постоянную отмену, IDE-хранилище eclipse хранит локальную историю ; такие функции могут сэкономить ваш **
ответьте на это 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}
У вас есть свой день назад! :)
git checkout HEAD@{19}
позволило мне проверить потерянные файлы в отдельном состоянии. Затем использовали git checkout -b new-branch-name
, чтобы добавить их обратно в репо в "прикрепленном" государство.
– NightOwl888
2 October 2016 в 19:29
git checkout -b new-branch-name
. Книга Прагматическая версия контроля с использованием Git хорошо объясняет Git в простых терминах.
– NightOwl888
14 November 2016 в 20:53
Справочный ответ из этого SO,
После запуска git reflog show скажите, что вы хотите перейти на фиксацию 9300f9d
после запуска git reset 9300f9d
, вы можете do git status, а затем вам может потребоваться проверить ваши файлы для восстановления ваших изменений
git checkout - filepath / name
Это то, что я обычно делаю, если я потеряю некоторые изменения.
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
Я случайно запустил git reset --hard
в моем репо сегодня, также имея нефиксированные изменения сегодня. Чтобы вернуть его, я побежал git fsck --lost-found
, который написал все unreferenced blobs в <path to repo>/.git/lost-found/
. Поскольку файлы были нефиксированы, я нашел их в каталоге other
в <path to repo>/.git/lost-found/
. Оттуда я могу увидеть незафиксированные файлы, скопировать кадры и переименовать их.
Примечание. Это работает, только если вы добавили файлы, которые хотите сохранить в индекс (с помощью git add .
). Если файлы не были в индексе, они теряются.
lost-found
. Но я мог бы сделать git show
, чтобы получить содержимое.
– Mitar
17 September 2013 в 05:28
#!/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
Если вы, к счастью, открыли те же файлы в другом редакторе (например, Sublime Text), попробуйте ctrl-z. Это просто спасло меня.
git reset --hard
с помощью другого git reset --hard
, но если вы не используете переключатель --hard
, вы останетесь с элементами в рабочей области, которые эффективно вернут работу, которую вы только что восстановили.
– Ryan H.
17 March 2017 в 18:07
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}
Если вы используете что-то вроде IntelliJ:
http://blog.jetbrains.com/idea/2008/01/using-local-history-to-restore-deleted-files/
Это только что заставило мою задницу стрелять!
Когда мы делаем git reset --hard, и все локальные неуправляемые изменения удаляются. Чтобы восстановить изменения - в IDE щелкните файл, сравните файл с локальной историей, в которой будут перечислены изменения в соответствии с датой, и мы сможем восстановить данные. Ваш день сохранен!
По определению, 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
, он окупится один день.
Информация потеряна.
Поскольку вы не совершали, ваш .git никогда не хранил эту информацию. Таким образом, в основном git
не может восстановить его для вас.
Но, если вы только что сделали git diff
, вы можете восстановить с помощью вывода терминала следующие 3 простых шага.
git diff
. Сохраните файл o / p в файле с именем diff.patch patch -p1 < diff.patch
) Вы спасены! :)
Примечание. При копировании данных с терминала в файл будьте осторожны и четко видите, что данные являются непрерывными и не содержат избыточных данных (из-за нажатия стрелок вверх и вниз) , В противном случае вы можете испортить это.
Пока я работал над локальным проектом, я хотел переместить его в GitHub, а затем создал новый репозиторий. Хотя я пытался добавить все эти файлы в новый репозиторий с помощью .gitignore, я случайно добавил неверный файл, а затем попытался его очистить.
Я побежал git reset --hard origin/master
: P
Затем все мои локальные файлы удалены, потому что репо было пустым. Я думал, что все прошло.
Это спасло мою жизнь:
git reflog show
git reset HEAD@{1}
git push
Надеюсь, что это спасет другую жизнь.
git reflog show
для проверки и из этого первого коммита я использую git reset HEAD@{number}
– Vishwas Nahar
3 May 2018 в 09:01
Если вы работаете в Netbeans, посмотрите между вкладками файлов и областью редактирования файлов. Существует «Источник» и «История». В разделе «История» вы увидите изменения, сделанные с помощью контроля версий (git / other), а также изменения, сделанные локально. В этом случае локальные изменения могут спасти вас.
Я обнаружил, что любые незафиксированные файлы до того, как git reset --hard <commit>
удаляются из истории git. Тем не менее, мне посчастливилось сохранить открытый сеанс редактора кода в течение всего времени, когда я вытягивал свои волосы, что я обнаружил, что простой control + z
в каждом из затронутых файлов возвратил состояние файла обратно в версию прежде чем Гит так услужливо сбросил все, о чем я не спросил его конкретно. Hooray!!
Если вы пытаетесь использовать код ниже:
git reflog show
# head to recover to
git reset HEAD@{1}
и по какой-то причине получают:
error: неизвестный переключатель `e '
blockquote>, затем попробуйте обернуть
HEAD@{1}
в кавычкиgit reset 'HEAD@{1}'
Я только что сделал git reset --hard
и потерял все мои незафиксированные изменения. К счастью, я использую редактор (IntelliJ), и мне удалось восстановить изменения в Local History. Eclipse должен позволить вам сделать то же самое.
Да, ВЫ МОЖЕТЕ ВОССТАНОВИТЬСЯ из жесткого сброса в git.
Используйте:
git reflog
, чтобы получить идентификатор вашей фиксации. Затем используйте:
git reset --hard <commit-retrieved-using-reflog>
Этот трюк спас мою жизнь пару раз.
Вы можете найти документацию reflog ЗДЕСЬ .
git reset --hard
с помощью другого git reset --hard
, но если вы не используете переключатель --hard
, вы останетесь с элементами в рабочей области, которые эффективно вернут работу, которую вы только что восстановили.
– Ryan H.
17 March 2017 в 18:07
git show 67db6072093a119fef0cfe946191e09d861360d5 > path-to-file
, но использование git reset --hard <commit-retrieved-using-reflog>
спасло бы мне скуку. По крайней мере, я знаю в следующий раз (надеюсь, никогда не будет в следующий раз).
– Nick Bolton
27 July 2018 в 13:37
git reset HEAD@{1}
– jan groth 27 May 2014 в 23:36