Может git отменить извлечение файлов без меток

164

Я случайно отменил свои изменения в файлах в моем локальном рабочем дереве с помощью git checkout. Файлы не находятся в данный момент. Возможно ли отменить эту проверку?

Герр В.
источник
Нет, мы не можем, но если вы используете Eclipse, мы можем проверить Team -> Local History
USM

Ответы:

106

Я полагаю, что если файл изменен, но еще не добавлен (подготовлен), он является чисто «приватным».
Это означает, что GIT не может быть восстановлен, если перезаписан индексом или версией HEAD (если у вас нет где-нибудь копии вашей текущей работы). "

«Частный» контент виден только в вашем текущем каталоге, но никак не зарегистрирован в Git.

VonC
источник
5
Я понимаю, что изменения в «приватном» файле не могут быть отменены git. Однако, если файл был изменен с помощью git (например, через git checkout --), я ожидал, что он сможет отменить эту операцию, возможно, через reflog. Это неправильное ожидание?
Ciprian Tomoiagă
2
@CiprianTomoiaga reflog для прошлых неразрешенных ссылок фиксаций. Если то, что вы хотите восстановить, не было зафиксировано (или поставлено), reflog вам не поможет.
VonC
3
@CiprianTomoiaga для любого частного контента (еще не добавленного), вы бы полагались исключительно на свой редактор или IDE. Пример затмения: help.eclipse.org/neon/…
VonC
5
Вот Это Да! Unbelieable. Мне нужно было проверить один файл, поэтому я хотел набрать, git checkout folders/subfolders/fileно нажал Enter случайно folderи потерял всю свою работу. / находится на расстоянии 1 см от клавиатуры, и я часто переключаюсь между машинами с разной раскладкой клавиатуры, поэтому мои пальцы привыкли к новым позициям через 10-15 минут. Трудно поверить в 2018 году, что git trashs файлы, хотя в git book говорится, что git делает все возможное, чтобы не потерять работу.
мужчина
1
@gman Помогает ли вам приведенный ниже ответ о «местной истории», предоставленной IDE, восстановить вашу работу?
VonC
174

Если вы используете «профессиональную» IDE, есть большие шансы, что вы сможете восстановить файлы из локальной истории. Например, в Rubymine вы можете щелкнуть правой кнопкой мыши по файлам и посмотреть историю изменений, не зависящих от изменений в git, спасла меня несколько раз ^^

Кристоф Гешвинд
источник
37
К вашему сведению, эта функция доступна во всем семействе «профессиональных» IDE JetBrains: Pycharm, IDEA, PHPStorm, Webstorm. Спас мой бакен сегодня. Спасибо, Кристоф!
Бен Робертс
6
Я должен поблагодарить вас. Я использую WebStorm и совершенно забыл об этой функции, хотя я использую ее довольно часто. Я просто был настолько увлечен потерей кода, что даже не думал об этом!
Тайсон Phalp
8
В затмении вы можете щелкнуть правой кнопкой мыши по файлу -> сравнить с -> местной истории
Мараг
5
превосходен. Sublime2 отменяет также откат изменений, сделанных случайной проверкой git на диске.
Shuckc
8
Если кто-то обнаружит, что этот поток уничтожил какую-то работу в XCode, есть способ получить историю автосохранения. Сам XCode не имеет пункта меню для просмотра истории автосохранения, но он сохраняет его. Если вы откроете эти файлы в TextEdit, вы можете вернуться и просмотреть историю автосохранения в меню «Файл»> «Восстановить».
Qingu
66

Если вы работаете в редакторе, таком как Sublime Text, и у вас все еще открыт файл, вы можете нажать ctrl + z, и он вернется в состояние, в котором он находился до проверки git.

римском романский
источник
9
Этот ответ сохранил мой день. Большое спасибо!
Фейяз
Я наткнулся на это исправление случайно только сейчас, и собирался опубликовать новый ответ. Похоже, что Sublime захватывает Git, изменяя состояние файла в его истории изменения файла.
Тимма
Работал для меня в Ecipse.
Аномалия
4
Работал и для кода Visual Studio
intotecho
44

К сожалению, ваши изменения потеряны. Ваши личные изменения просто перезаписываются. Если вы не сделали git stashдо оформления заказа ...

Возьмите это с более яркой стороны: теперь вы можете реализовать вещи еще лучше;)

Марцин Гил
источник
26

Проверьте местную историю в вашей IDE.

Марчин Шимчак
источник
Просто сделал ошибку, не ставя мои изменения и заставил проверить. Я проверил свою локальную историю в Android Studio (просмотр -> последние изменения) и отменил последние сделанные мной изменения. Более подробная информация здесь jetbrains.com/help/idea/2016.3/...
Emen
Это прекрасно работает в RubyMine, действие по удалению ваших изменений будет называться «Внешнее изменение». Большое спасибо за этого Марцина, он просто спас мне час потерянной работы!
AndrewSouthpaw
25

Разработка на OS X? Используя XCode? Вам скорее всего повезет!

Как описано в комментарии qungu , OS X поддерживает автоматически сохраненную историю версий файлов, даже если вы не используете машину времени .

Таким образом, если вы сдули свои необработанные локальные изменения небрежным образом git checkout ., вот как вы, вероятно, сможете восстановить всю свою работу.

Если кто-то обнаружит, что этот поток уничтожил какую-то работу в XCode, есть способ получить историю автосохранения. Сам XCode не имеет пункта меню для просмотра истории автосохранения, но он сохраняет его. Если вы откроете эти файлы в TextEdit, вы можете вернуться и просмотреть историю автосохранения в меню «Файл»> «Восстановить».

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


Вы можете спросить: «Почему пользовательский интерфейс командной строки git не является лучшей VCS, используемой для разработки программного обеспечения в2016 2017 20182019, по крайней мере, сделайте резервную копию файлов, прежде чем просто выбросить их? Например, хорошо написанные программные инструменты за последние три десятилетия ".

Или, возможно, вы спросите: «Почему эта безумно потрясающая функция истории файлов доступна в TextEdit, а не в Xcode, где она мне действительно нужна?»

… И оба они, я думаю, расскажут вам довольно много о нашей отрасли. Или, может быть, вы пойдете и почините эти инструменты. Что было бы супер.

Benjohn
источник
2
Я могу подтвердить, что это работает. Это просто сэкономило мне часы работы!
Бруно Роча
у меня не получилось, потому что дело, к Modelсожалению, было
brahimm
@brahimm Модель?
Бенджон
1
Это просто спасло меня от душевной боли. Огромное спасибо.
squarefrog
1
Очень интересно: я щелкнул правой кнопкой мыши по своему исходному файлу и посмотрел на меню «Открыть с помощью». Оба TextEdit 1.14 и TextEdit 1.6 были там в качестве выбора. Только TextEdit 1.14 имел возможность вернуться к более старым версиям. Пользовательский интерфейс был очень хорошим, как и TimeMachine.
Bugloaf
7

В VSCODE у меня работал ctrl + z (отменить)

Я сделал git checkout .вместо, git add .и все мои изменения файла были потеряны.

Но теперь, используя command + zмой Mac, восстановил изменения и сохранил тонус работы для меня.

ишаб ачарья
источник
есть ли другой путь?
Абдул Манан
2

Эффективным спасителем для такого рода ситуаций является Time Machine (OS X) или аналогичная система резервного копирования на основе времени. Это спасло меня пару раз, потому что я могу вернуться и восстановить только один файл.

sscirrus
источник
1
Уважаемый downvoter - не могли бы вы объяснить, как я мог бы улучшить этот ответ?
sscirrus
1

Я только что это случилось со мной, я проверил целую папку, содержащую часы работы! К счастью, я обнаружил, что моя среда IDE Netbeans хранит историю каждого файла, что позволило мне восстановить 99% материала, хотя мне нужно было исправить некоторые вещи вручную.

Pierre-Verthume Larivière
источник
0

У меня обычно есть вся моя работа в папке dropbox. Это гарантирует, что текущая папка будет доступна вне моей локальной машины и Github. Я думаю, что это мой другой шаг, чтобы гарантировать «контроль версий», отличный от git. Вы можете следовать этому, чтобы вернуть ваш файл к предыдущим версиям ваших файлов Dropbox.

Надеюсь это поможет.

Диего
источник
0

Технически да. Но только в определенных случаях. Например, если у вас есть кодовая страница, и вы нажали git checkout, и вы понимаете, что случайно зашли не на ту страницу или что-то в этом роде. Перейдите на страницу и нажмите «Отменить». (для меня команда + z), и он вернется туда, где вы были прежде, чем вы доберетесь до старой доброй проверки Git.

Это не будет работать, если ваша страница была закрыта, а затем вы нажали git checkout. Работает только если открыта фактическая кодовая страница

kdweber89
источник
0

Если вы работаете с терминалом / CMD подсказка открыто, и использовал какую - либо команду , которые GIT бы показали unstaged изменения ( diff, add -p, checkout -pи т.д.), и не закрыли терминал / CMD строки так, вы найдете unstaged изменения все еще доступны, если вы прокрутите до того места, где вы выполняли вышеупомянутые команды git.

башмак
источник
0

Чувак,

Допустим, вы очень удачливый парень, как и я, вернитесь к своему редактору и отмените (команда + Z для Mac), вы должны увидеть потерянный контент в файле. Надеюсь, это помогло вам. Конечно, это будет работать только для существующих файлов.

codemania23
источник
-1

Может быть, ваши изменения не потеряны. Проверьте "git reflog"

Я цитирую статью ниже:

«По сути, каждое действие, которое вы выполняете внутри Git, где хранятся данные, вы можете найти в журнале ссылок. Git очень старается не потерять ваши данные, поэтому, если вы по какой-то причине считаете, что это так, есть вероятность, что вы сможете откопать их». используя git reflog "

Смотрите подробности:

http://gitready.com/intermediate/2009/02/09/reflog-your-safety-net.html

robertobado
источник
3
Не теряйте надежды - reflog помогает, только если вы содержательно взаимодействовали с git. Просто редактируете файл, а затем удаляете его с помощью git checkout? мерзавец никогда не имел шансов.
Боб Гилмор,
1
+1 от меня - думаю, что стоит упомянуть git reflogздесь, я нашел этот ответ, когда искал удаление git checkout HEAD .- я хотел напечатать git reset HEAD .- я только что сделал 'Git reset --soft HEAD ~ 1' и не знал Примерно git reflogтак удалось вернуть работу, которую я проделал :)
Рассел Англия
1
К сожалению, git checkout <revision> и git checkout <path> - это две совершенно разные и не связанные команды. Первый сохраняет ваши локальные изменения, второй нет.
Озеро