Можна скасувати скасування нестандартних файлів


164

Я невірно відкидаю свої зміни у файлах у своєму локальному робочому дереві через git checkout. Файли наразі не інсценовані. Чи можливо "скасувати" цю касу?


Ні, ми не можемо, але якщо ви використовуєте затемнення, ми можемо перевірити команду -> Місцева історія
USM

Відповіді:


106

Я вважаю, що якщо файл модифікований, але ще не доданий (поетапний), він є чисто "приватним".
Тобто GIT не може бути відновлений, якщо перезаписати індекс або версію HEAD (якщо ви десь не маєте копії вашої поточної роботи). "

"Приватний" вміст видно лише у вашому поточному каталозі, але жодним чином не зареєстрований у Git.


5
Я розумію, що зміни у "приватному" файлі не можна скасувати за допомогою git. Однак, якщо файл був змінений за допомогою git (наприклад, через git checkout --), я б очікував, що він може скасувати цю операцію, можливо, через reflog. Це неправильне очікування?
Ciprian Tomoiagă

2
@CiprianTomoiaga reflog для минулих недозволених посилань фіксацій. Якщо те, що ви хочете відновити, не було скоєно (або інсценовано), відмова не допоможе вам.
VonC

3
@CiprianTomoiaga для будь-якого приватного вмісту (ще не додано), ви покладаєтесь лише на редактор або функцію IDE. Приклад затемнення: help.eclipse.org/neon/…
VonC

5
Оце Так! Неймовірно. Мені потрібно було перевірити один файл, тому я мав намір набрати, git checkout folders/subfolders/fileале потрапив увійти випадково після того, як потрапив до folderта втратив всю свою роботу. / знаходиться на 1 см від клавіші клавіатури, і я часто перемикаюсь між машинами з різними розкладками клавіатури, тому часто 10-15 хвилин мої пальці звикають до нових позицій. Важко повірити в 2018 році, що git trashs файли, навіть якщо в git книзі сказано, що git робить це, як це не втратити роботу.
gman

1
@gman Чи відповідь нижче про "краєзнавство", наданий IDE, допоможе вам відновити свою роботу?
VonC

174

Якщо ви використовуєте "професійний" IDE, шанси на те, що ви можете відновити файли з локальної історії. Наприклад, у Rubymine ви можете клацнути правою кнопкою миші файли і переглянути історію змін, незалежних від змін git, врятувавши мене кілька разів ^^


37
FYI ця функція доступна у всій родині JetBrains "професійних" IDE: Pycharm, IDEA, PHPStorm, Webstorm. Сьогодні врятували мою випічку. Спасибі, Крістофе!
Бен Робертс

6
Я маю тобі подякувати. Я використовую WebStorm і повністю забув про цю функцію, хоча я її використовую досить часто. Мене просто так наздогнала втрата коду, що я не думав про це!
Тайсон Фелп

8
У затемненні ви можете клацнути правою кнопкою миші на файл -> порівняти з -> краєзнавство
Мараги

5
чудовий. Sublime2 скасовує також зміни, внесені випадковим оформленням git на диску.
shuckc

8
Якщо хтось виявить, що цей потік знищив якусь роботу в XCode, є спосіб отримати історію автозбереження. У самому XCode немає запису в меню, щоб побачити історію автозбереження, але він зберігає його. Якщо ви відкриєте питання, про які йдеться, у TextEdit, ви можете повернути їх і переглянути історію автозбереження в розділі Файл> Повернути.
qingu

66

Якщо ви працюєте в такому редакторі, як Sublime Text, і відповідний файл все ще відкритий, ви можете натиснути ctrl + z, і він повернеться до стану, який він мав перед git checkout.


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 рік 2018 рік2019 рік, принаймні створити резервну копію файлів, перш ніж їх просто видути? Як, знаєте, добре написані програмні засоби протягом останніх трьох десятиліть ".

Або, можливо, ви запитуєте: "Чому ця шалено дивовижна історія файлів доступна в TextEdit, але не Xcode там, де мені це потрібно?"

… І те, і інше, я думаю, розповість вам досить багато про нашу галузь. А може, ти підеш і виправиш ці інструменти. Що було б супер.


2
Я можу підтвердити, що це працює. Це просто врятувало мені години роботи!
Бруно Роша

не працював для мене, тому що відповідний файл був, на Modelжаль,
брахім

@brahimm Модель?
Бенджон

1
Це просто врятувало мені тонну душевного болю. Дуже дякую.
квадратна жаба

1
Дуже цікаво: я клацнув правою кнопкою миші на вихідному файлі та переглянув меню "Відкрити". Як TextEdit 1.14, так і TextEdit 1.6 були вибір. Лише TextEdit 1.14 мав можливість повернутися до старих версій. Користувальницький інтерфейс був дуже приємний, як і TimeMachine.
bugloaf

7

У VSCODE для мене працював ctrl + z (скасувати)

Я зробив git checkout .замістьgit add . і всі зміни мого файлу були втрачені.

Але тепер, використовуючи command + zв моєму комп'ютері, відновив зміни і врятував тон роботи для мене.


чи є якийсь інший шлях?
Абдул Манан


2

Ефективним рятувальником подібних ситуацій є Time Machine (OS X) або подібна система резервного копіювання на основі часу. Це врятувало мене кілька разів, тому що я можу повернутися назад і відновити лише той один файл.


1
Шановний доносець, чи можете ви пояснити, як я можу вдосконалити цю відповідь?
sscirrus

1

У мене просто так трапилося, я перевірив цілу папку, що містить години роботи! На щастя, я з'ясував, що мій IDE Netbeans зберігає історію кожного файлу, що дозволило мені відновити 99% матеріалів, хоча мені потрібно було виправити кілька речей вручну.


0

Я, як правило, всю свою роботу в папці "dropbox". Це гарантує мені, що у мене буде наявна поточна папка поза моєю локальною машиною та Github. Я думаю, що це мій інший крок - гарантувати "контроль над версіями", крім git. Ви можете дотримуватися цього, щоб повернути файл до попередніх версій файлів, що випадають

Сподіваюся, це допомагає.


0

Технічно так. Але лише в певних випадках. Якщо, наприклад, у вас є сторінка коду, і ви потрапили в git checkout, і ви розумієте, що випадково перевірили неправильну сторінку чи щось таке. Перейдіть на сторінку і натисніть скасувати. (для мене команда + z), і вона повернеться туди, де ви були, перш ніж потрапити на старий добрий замок.

Це не спрацює, якщо ваша сторінка закрита, і ви натискаєте git checkout. Він працює лише в тому випадку, якщо фактична сторінка коду відкрита


0

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


0

Чувак,

дозвольмо сказати, що ви дуже щасливий хлопець, як і я, поверніться до свого редактора і виконайте скасування (команда + Z для mac), ви повинні побачити втрачений вміст у файлі. Сподіваюся, це допомогло вам. Звичайно, це буде працювати лише для існуючих файлів.


-1

Можливо, ваші зміни не втрачені. Поставте прапорець "git reflog"

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

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

Дивіться деталі:

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


3
Не сподівайтесь на ваші сподівання - отримати відмову допомагає лише у тому випадку, якщо ви вміло взаємодіяли з git. Просто редагування файлу, а потім видалення його за допомогою git checkout? git ніколи не мав шансів.
Боб Гілмор

1
+1 від мене - Подумайте, варто git reflogтут згадати , я знайшов цю відповідь, коли шукав скасування ануляції git checkout HEAD .- я мав на увазі ввести git reset HEAD .- я щойно зробив «скидання git - Software HEAD ~ 1» і не знав про git reflogтак вдалося повернути роботу, яку я зробив :)
Рассел Англія

1
На жаль, git checkout <revision> і git checkout <шлях> - це дві абсолютно різні та не пов'язані між собою команди. Перший зберігає ваші місцеві зміни, останні - ні.
Озеро
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.