Programing

실수로 체크 아웃 한 후 변경 사항을 되 찾으시겠습니까?

lottogame 2020. 12. 11. 07:38
반응형

실수로 체크 아웃 한 후 변경 사항을 되 찾으시겠습니까?


다음은 내 repo의 상태입니다.

[~/rails_apps/jekyll_apps/nepalonrails (design)⚡] ➔ gst
# On branch design
# Changed but not updated:
#   (use "git add/rm <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   modified:   _layouts/default.html
#   deleted:    _site/blog/2010/04/07/welcome-to-niraj-blog/index.html
#   deleted:    _site/blog/2010/04/08/the-code-syntax-highlight/index.html
#   deleted:    _site/blog/2010/05/01/showing-demo-to-kalyan/index.html
#   deleted:    _site/config.ru
#   deleted:    _site/index.html
#   deleted:    _site/static/css/style.css
#   deleted:    _site/static/css/syntax.css
#   modified:   static/css/style.css
#
no changes added to commit (use "git add" and/or "git commit -a")

우연히 내가 git checkout -f했고 이제는 내가해서는 안되는 변화가 사라졌습니다.

[~/rails_apps/jekyll_apps/nepalonrails (design)⚡] ➔ git co -f
[~/rails_apps/jekyll_apps/nepalonrails (design)] ➔ gst
# On branch design
nothing to commit (working directory clean)
[~/rails_apps/jekyll_apps/nepalonrails (design)] ➔ 

변경 사항을 되돌릴 수 있습니까?


현재 작업 디렉토리에 다른 백업 프로세스가없는 경우에는 개인 데이터를 복구 할 수 없다고 생각합니다 ( "인덱스에 추가되지 않았거나 커밋되지 않음"에서와 같이 "비공개", git에 알려지지 않음).

이것이 Git Aliases 페이지 에서 제안되지 않더라도 체크 아웃을위한 일종의 별칭을 주장합니다 ( alias rm /bin/rm -i사용법 이있는 것처럼 ).

[alias]
co = !sh -c 'git stash; git stash apply; git checkout "$@"'

, ' git stash; git stash apply'는 Brian Campbell답변 에서 사용한 "체크 포인트 기술" 입니다.

stason의견에서 제안 합니다 .

co = "!git stash push -m \"co backup\"; git stash apply; git checkout \"$@\"" 

다른 사람에게서 백업 보관함을 알리는 메시지를 추가했습니다.

이 문제는 ycombinator 에서이 동작에 대한 토론을 떠올리게합니다 (추출).


나는 자식으로 많은 데이터를 잃었습니다.
대부분은 데이터를 삭제할 때 확인을 요청하지 않는 무해한 명령과 관련이 있습니다 .
예를 들어 git checkout filenamesvn revert filename.
물론 git checkout branchname완전히 다른 일을합니다.
브랜치와 파일이 같은 이름을 공유하면 git은 기본적으로 브랜치를 전환하지만 bash 자동 완성이 하루를 망치는 것을 막지는 않습니다.

여기에 미친 아이디어가 있습니다. 무해한 행동과 위험한 행동이있는 경우 동일한 명령으로 레이블을 지정하지 마십시오.


성가 시겠지만 이것은 디자인 오류가 아니라 사용자 오류입니다. git을 사용하면 작업 복사본을 무손실로 버리려면 " git stash" 만하면 됩니다.
귀하의 논리에 따르면 "rm"은 . -f대신 통과 할 때 확인을 요청하지 않기 때문에 결함 -i있습니다. 음, 그래. 죄송합니다.


경우 귀하의 비유는 더 정확한 것 rm somename에 해당했다 apt-get update, 그리고 rm othername이었다 rm -fr othername.
그러나 get checkout foo현재 디렉토리에 foo라는 파일이 있는지 여부에 따라 " "이 두 가지 완전히 다른 작업 중 하나를 수행 하는 것은 옳지 않습니다.


여기 또 다른 미친 아이디어가 있습니다. git checkout ...더러운 작업 트리에서 ' '를 실행하지 마십시오 . 문제 해결됨.
또 하나 : 파일 이름을 브랜치 이름으로 재사용하지 마십시오.
솔직히 말해서, 나는 ' rm' 의 부주의 한 호출이 나의 하루를 망치고 있지만, 내가 저주를 중얼 거릴 때 그것은 bash 완료 나 ' rm' 의 행동이 아닌 나의 게으름 / 어리 석음에있다.


또 한 가지 살펴볼 수있는 것은 IDE를 이용하는 것입니다. 실수로 2 개의 파일을 체크 아웃하고 IDE (netbeans)의 '로컬 히스토리'를 통해 변경 사항을 다시 가져올 수있었습니다. 얼마나 큰 축복입니까!


당신이 이제까지 사용하지 않은 경우 git add또는 git stash불행하게도 이전, 다음 해당 파일이. 추가하거나 숨긴 경우을 통해 해시를 찾을 수 있습니다 git reflog.

I've never been comfortable with this destructive behaviour of git checkout. Perhaps a useful enhancement would be to have this sort of git checkout automatically create a stash (so that files are captured through the reflog) before overwriting your work.


The following may apply in case you are using vim on Linux.

  • If files are open in an active buffer then you've got the file content as long as you don't reload the file in vim, and can restore by saving it. .

  • If files are not open in an active buffer, but are dirty, then there should be an .swp file in the source directory which also has a copy of the content that is recoverable via vim -r file.swp.

  • If the files are neither open in antive buffer nor dirty, and if your working copy is on an ext3 or ext4 partition, then extundelete might be able to find the recently deleted .swp files and/or an older version of the source files. Remount the partition as read-only, e.g. mount -o remount,ro /mnt/point, and run

    extundelete --recover-directory /path/to/working/copy /dev/sdaX
    

    If the partition that contains the working copy is the root partition, it may refuse to remount, then try killing all services, and if still no go, then shutdown and boot using a Live CD/USB/PXE, like GRML, and run the above. I was successful in recovering one out of three lost files this way.


if you use Eclipse as IDE and EGit, you have onto your file the Team-menu:

  1. right click on your file from within
  2. List item "Team" -> "Show Local History"

you will see all the version save locally without any saving name, in my case but, you can easily check all the untracked changes out of git features and restore your missing code.


If IDE is Android Studio then open the file that has been changed and go to VCS -> Local History -> Show History. Opened file will be shown there.


There is nothing you can do with git commands but if you are using IDE then you can recover your changes. I am using PhpStorm where we can see file changes history. Simply right-click on file and click on show local history. Under External changes tab, you can find your local changes which you have accidentally removed.


If you are using IDE and if it has undo option, simply undo the changes, it'll undo the reload from disk which will bring back your changes. Most IDEs / editors have this option.


I'm using Intellij. CTRL + z works for me, it will prompt you "reload changes from disk", then hit Yes.

참고URL : https://stackoverflow.com/questions/2961240/get-back-the-changes-after-accidental-checkout

반응형