준비되지 않은 파일의 체크 아웃을 취소 할 수 있습니다.


164

실수로 git checkout을 통해 로컬 작업 트리의 파일에 대한 변경 사항을 버립니다. 현재 파일이 준비되지 않았습니다. 이 체크 아웃을 "실행 취소"할 수 있습니까?


아니, 우리는 할 수 없지만, 당신이 일식을 사용하는 경우 우리는 팀-> 현지 기록
USM

답변:


106

파일이 수정되었지만 아직 추가되지 않은 경우 (단계적) 파일은 순수하게 "개인"입니다.
인덱스 나 HEAD 버전으로 덮어 쓰면 GIT에서 복원 할 수 없습니다 (현재 작업의 사본이없는 경우). "

"비공개"컨텐츠는 현재 디렉토리에서만 볼 수 있지만 Git에는 등록되지 않습니다.


5
'private'파일에 대한 변경 사항은 git에 의해 취소 할 수 없음을 이해합니다. 그러나 파일이 git에 의해 수정 된 경우 (예 : via git checkout --) 해당 작업을 취소 할 수 있습니다 reflog. 그게 잘못된 기대입니까?
Ciprian Tomoiagă

2
@CiprianTomoiaga reflog는 참조되지 않은 과거 커밋에 대한 것입니다. 복원하려는 항목이 커밋되지 않았거나 준비되지 않은 경우 reflog가 도움이되지 않습니다.
VonC

3
모든 종류의 개인 컨텐츠 (아직 추가되지 않은)에 대해서는 @CiprianTomoiaga는 편집기 또는 IDE 기능에만 의존합니다. 일식의 예 : help.eclipse.org/neon/…
VonC

5
와! 불신. 하나의 파일을 체크 아웃해야했기 때문에 입력 git checkout folders/subfolders/file하려고했지만 folder모든 작업을 잃어 버린 후 우연히 Enter 키를 누르십시오 . /는 키보드에서 1cm 떨어진 곳에서 키보드 레이아웃이 다른 컴퓨터를 자주 전환하므로 손가락이 새로운 위치에 익숙해지는 경우가 종종 있습니다. git 책에서 git이 작업을 잃지 않는 방법이라고 말하지만 git은 파일을 휴지통에 버린다고 믿기 어렵습니다.
gman

1
@gman은 IDE에서 제공하는 "로컬 히스토리"에 대한 아래의 답변이 작업 복구에 도움이됩니까?
VonC

174

"전문적인"IDE를 사용하는 경우 로컬 히스토리에서 파일을 복원 할 수 있습니다. 예를 들어 Rubymine에서 파일을 마우스 오른쪽 버튼으로 클릭하고 git 변경과 독립적으로 변경 기록을 볼 수 있습니다.


37
참고로이 기능은 전체 JetBrains "전문"IDE 제품군에서 사용할 수 있습니다 : Pycharm, IDEA, PHPStorm, Webstorm. 오늘 바켄을 구했습니다. 고마워, 크리스토프!
Ben Roberts

6
고마워 WebStorm을 사용하고 있지만 자주 사용하지만 그 기능을 완전히 잊어 버렸습니다. 나는 코드 손실을 너무나 붙잡 았지만 그것에 대해 생각하지 않았습니다!
Tyson Phalp

8
일식에서 파일을 마우스 오른쪽 버튼으로 클릭-> 비교-> 지역 기록
Maragues

5
훌륭한. Sublime2는 디스크에서 실수로 git checkout을 수행 한 변경 사항을 롤백했습니다.
shuckc

8
누군가이 스레드가 XCode에서 일부 작업을 파괴 한 것을 발견하면 자동 저장 기록을 얻는 방법이 있습니다. XCode 자체에는 자동 저장 기록을 볼 수있는 메뉴 항목이 없지만 저장합니다. TextEdit에서 해당 파일을 열면 파일> 되돌리기에서 자동 저장 내역을 되돌리고 확인할 수 있습니다.
qingu

66

Sublime Text와 같은 편집기에서 작업 중이고 문제의 파일이 여전히 열려있는 경우 ctrl + z를 누르면 git checkout 이전 상태로 돌아갑니다.


9
이 답변은 내 하루에 저장됩니다. 고마워요!
feyyaz

나는 우연히이 수정 프로그램을 우연히 발견하고 새로운 답변을 게시하려고했습니다. Sublime이 파일 수정 내역에서 파일 상태를 변경하는 Git을 캡처하는 것처럼 보입니다.
Timmah

Ecipse에서 저를 위해 일했습니다.
Anomaly

4
Visual Studio Code를 위해 일했습니다
intotecho

44

불행히도 변경 사항이 손실됩니다. 개인 수정 사항은 단순히 덮어 씁니다. git stash체크 아웃 을하지 않으면 ...

더 밝은면에서 가져 가십시오 : 이제 더 나은 것을 구현할 수 있습니다.)


26

IDE에서 로컬 히스토리를 확인하십시오.


내 변경 사항을 준비하지 않고 실수로 체크 아웃하는 실수를했습니다. Android Studio에서 로컬 기록을 확인하고 (보기-> 최근 변경 사항) 마지막으로 변경 한 내용을 되돌 렸습니다. 자세한 내용은 여기 jetbrains.com/help/idea/2016.3/…
emen

이것은 RubyMine에서 완벽하게 작동합니다. 변경 사항을 지우는 작업은 "외부 변경"으로 나타납니다. 이 Marcin에게 정말 감사합니다. 시간을 잃어버린 작업 시간을 절약했습니다!
AndrewSouthpaw

25

OS X 에서 개발하고 있습니까? Xcode를 사용 하십니까? 당신은 운이 좋을 것입니다!

qungu의견 에서 설명한 것처럼 OS X는 time machine을 사용하지 않더라도 파일의 자동 저장된 버전 기록을 유지합니다 .

따라서 부주의 한 로컬 변경 사항을 부주의하게 날려 버린 경우 모든 작업을 복구 git checkout .하는 방법은 다음과 같습니다 .

누군가이 스레드가 XCode에서 일부 작업을 파괴 한 것을 발견하면 자동 저장 기록을 얻는 방법이 있습니다. XCode 자체에는 자동 저장 기록을 볼 수있는 메뉴 항목이 없지만 저장합니다. TextEdit에서 문제의 파일을 열면 파일> 되돌리기에서 자동 저장 내역을 되돌릴 수 있습니다.

어제 나를 위해 일한 날에 대해 굉장하고 회복되었습니다.


"왜 소프트웨어 엔지니어링에 사용되는 최고의 VCS 인 git 명령 줄 UI가 아닌가 ?2016 년 2017 년 2018 년2019 년, 파일을 날려 버리기 전에 최소한 파일을 백업 하시겠습니까? "지난 30 년 동안 잘 작성된 소프트웨어 도구입니다."

또는 " 당신 은 왜이 멋진 파일 히스토리 기능이 TextEdit에서 액세스 할 수 있지만 실제로 필요한 곳에 Xcode가 아닌 이유는 무엇입니까?"

… 그리고 둘 다 우리 산업에 대해 많은 것을 말해 줄 것입니다. 아니면 당신은 가서 도구를 고칠 것입니다. 어느 것이 슈퍼일까요.


2
이것이 작동하는지 확인할 수 있습니다. 이것은 단지 작업 시간을 절약했습니다!
Bruno Rocha

관련 파일이 Model유감 스럽게 되었기 때문에 나를 위해 일하지 않았다
brahimm

@ 브라 힘 모델?
Benjohn

1
이것은 방금 톤의 상심을 구했습니다. 정말 고맙습니다.
squarefrog

1
매우 흥미로운 점 : 소스 파일을 마우스 오른쪽 버튼으로 클릭하고 "연결 프로그램"메뉴를 확인했습니다. TextEdit 1.14와 TextEdit 1.6이 모두 선택 사항이었습니다. TextEdit 1.14 만 이전 버전으로 되돌릴 수있는 옵션이있었습니다. UI는 TimeMachine과 마찬가지로 매우 훌륭했습니다.
bugloaf

7

VSCODE에서 ctrl + z (실행 취소)가 나를 위해 일했습니다.

내가 그랬어 git checkout .대신 git add .내 모든 파일 변경 내용이 손실되었다.

그러나 이제 command + z내 Mac에서 사용 하여 변경 사항을 복구하고 작업 톤을 저장했습니다.


다른 방법이 있습니까?
압둘 마난


2

이러한 상황에 효과적인 구세주는 Time Machine (OS X) 또는 유사한 시간 기반 백업 시스템입니다. 다시 돌아가서 하나의 파일 만 복원 할 수 있기 때문에 몇 번 절약되었습니다.


1
친애하는 downvoter-이 답변을 어떻게 향상시킬 수 있는지 설명해 주시겠습니까?
sscirrus

1

방금 나에게 그런 일이 있었는데, 몇 시간의 작업이 포함 된 전체 폴더를 체크 아웃했습니다! 다행히도 IDE Netbeans는 각 파일의 기록을 유지하므로 몇 가지 사항을 수동으로 수정해야하더라도 99 %의 파일을 복구 할 수 있습니다.



0

기술적으로 그렇습니다. 그러나 특정 경우에만. 예를 들어 코드 페이지가 있고 git checkout을 누르면 실수로 잘못된 페이지 또는 무언가를 체크 아웃했음을 알 수 있습니다. 페이지로 이동하여 실행 취소를 클릭하십시오. (나를 위해, command + z), 그것은 당신이 좋은 오래된 git checkout을 누르기 전에 당신이 있었던 곳으로 정확하게 돌아갈 것입니다.

페이지가 닫히고 git checkout을 누르면 작동하지 않습니다. 실제 코드 페이지가 열려있는 경우에만 작동합니다


0

터미널 / 함께 작업하는 경우 열려있는 프롬프트 cmd를하고 unstaged 변경 (보여주는 것 같은 자식 명령을 사용 diff, add -p, checkout -p당신은 unstaged 변경을 찾을 수 있습니다, 등), 및 터미널 /이 이후 프롬프트 cmd를 폐쇄하지 않은를 위에서 언급 한 git 명령을 실행 한 곳으로 스크롤하면 여전히 사용할 수 있습니다.


0

친구,

내가 그랬던 것처럼 당신이 매우 운이 좋은 사람이라고 말하고 편집기로 돌아가서 실행 취소 (Mac의 경우 명령 + Z)하면 파일에서 손실 된 내용을 볼 수 있습니다. 그것이 당신을 도왔기를 바랍니다. 물론 이것은 기존 파일에 대해서만 작동합니다.


-1

변경 사항이 손실되지 않을 수 있습니다. "git reflog"확인

아래 기사를 인용하십시오.

"기본적으로는 데이터가 저장되는 망할 놈의 내부 수행하는 모든 행동, 당신은 내부의 reflog의를 찾을 수 있습니다. 힘내 데이터를 잃는 정말 열심히하려고하지, 그래서 만약 당신이 그것을 가지고 있다고 생각 어떤 이유로, 기회는 당신이 그것을 발굴 할 수 있습니다에 대한 git reflog 사용 "

자세히보다:

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


3
희망을 가지지 마십시오. reflog를 사용하면 의미있는 방식으로 git과 상호 작용 한 경우에만 도움이됩니다. 파일을 편집 한 다음 git checkout을 통해 파일을 날려 버려? 자식은 기회가 없었습니다.
밥 길모어

1
저에서 +1 - 그 가치가 언급 생각 git reflog여기에, 나는 내가 파멸을 검색하고이 대답을 발견 git checkout HEAD .- 내가 입력하는 것을 의미했다 git reset HEAD .- 난 그냥이 '--soft HEAD ~ 1을 다시 힘내'했던 및 몰랐다 [정보] git reflog내가 :)했던 일 다시 얻을 수있었습니다
러셀 잉글랜드

1
불행히도 git checkout <revision>과 git checkout <path>는 완전히 다르고 관련이없는 명령입니다. 전자는 로컬 변경 사항을 유지하지만 후자는 그렇지 않습니다.
Lake
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.