실수로 체크 아웃 한 후 변경 사항을 되 찾으시겠습니까?
다음은 내 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 이 답변 에서 사용한 "체크 포인트 기술" 입니다.
co = "!git stash push -m \"co backup\"; git stash apply; git checkout \"$@\""
다른 사람에게서 백업 보관함을 알리는 메시지를 추가했습니다. –
이 문제는 ycombinator 에서이 동작에 대한 토론을 떠올리게합니다 (추출).
나는 자식으로 많은 데이터를 잃었습니다.
대부분은 데이터를 삭제할 때 확인을 요청하지 않는 무해한 명령과 관련이 있습니다 .
예를 들어git checkout filename
는svn 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 runextundelete --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:
- right click on your file from within
- 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
'Programing' 카테고리의 다른 글
SICP에서 Exercise 1.6에 대한 설명은 무엇입니까? (0) | 2020.12.11 |
---|---|
ASP.NET MVC 2 용 사용자 지정 멤버 자격 공급자는 어떻게 만듭니 까? (0) | 2020.12.11 |
지정된 리포지토리의 Git 분기로 Jenkins Choice 매개 변수를 동적으로 채우기 (0) | 2020.12.11 |
Putty의 화살표 키는 커서를 이동하는 대신 ^ [[A ^ [[D ^ [[B]를 반환합니다. (0) | 2020.12.11 |
UILabel이 프로그래밍 방식이 아닌 스토리 보드 (또는 인터페이스 빌더)에서 텍스트 크기를 자동으로 조정하는 방법 (0) | 2020.12.11 |