Program Tip

실수로 마스터로 되돌리고 커밋되지 않은 변경 사항 손실

programtip 2020. 12. 7. 20:33
반응형

실수로 마스터로 되돌리고 커밋되지 않은 변경 사항 손실


나는 (월요일 아침에) 큰 실수를 저질렀습니다. Master에서 작업하고, 새 브랜치를 만드는 것을 잊고, 파일을 변경 한 다음 실수로 마스터로 되돌려 모든 업데이트를 잃었습니다. 업데이트 된 파일을 커밋하지 않았습니다.

모든 업데이트를 잃어 버렸거나 검색 할 수 있습니까?

내가 그것에 대해 생각할 때마다 나는 얼굴을 때려야하기 때문에 어떻게 물어 보지 마십시오.


변경 사항을 커밋 , 스테이징 또는 숨김 처리 하지 않은 경우 해당 변경 사항을 복구 할 수있는 방법이 없습니다.

편집 : 손실 된 변경 사항 복구. 이것을 Mark Longair의 제안 에 추가합니다 (코멘트에서). 여기에는 아래 답변 (*)의 몇 가지 SO 링크도 포함되어 있으며 매우 유익합니다.

  • 당신이 이제까지 한 경우 최선을 다하고 어떤 변화를하고 (분리 된 상태로 투입 등) 커밋이 잃어버린, 당신은 사용 커밋 찾을 수 있습니다 reflog. SO 질문을 참조하십시오 *.

  • 마지막 단계의 변경 사항 을 잃어버린 경우 에도 복구 할 수 있습니다. SO 질문을 참조하십시오 *. (내가 직접 사용하거나 시도한 적이 없습니다).

  • 변경 사항 숨긴 경우 pop또는 을 사용하여 복구 할 수도 있습니다 apply. (커밋되지 않은 팝 / 드롭 된 스테이시도 복구 할 수 있는지 확실하지 않습니다). Recover가 떨어 뜨린 숨김을 git에서 유용하게 찾을 수 있습니다 .

누구든지 제안 할 수있는 다른 방법이 있다면이 답변을 추가로 편집하여 추가하겠습니다.


두 가지 롱샷 : Delphi와 같은 일부 IDE는 편집기 기록을 유지합니다. 거기에 약간의 의지가있을 수 있습니다.
다음으로 MyDocuments 폴더에 로컬 작업 디렉토리가있는 경우 Windows Home Server, Carbonite, MozyPro 등에 의해 자동으로 백업되었을 수 있습니다. 이들은 일반적으로 '설정하고 잊어 버리기'입니다. 잊어 버리 셨나요?


나는 같은 상황에 갇혀 있었다.

--hard reset 전에 터미널에 변경된 파일 목록이 있고, 내 편집기로 들어가 (Sublime 2, 상관 없음), 각 파일을 열고 cmd + z (실행 취소)를 한 번 누르면 변경 사항이 효과적으로 취소되었습니다. 하드 리셋에 의해 완료되고 커밋되지 않은 변경 사항이 다시 생겼습니다. :)


여기서 중요한 질문은 파일을 변경 한 후 수행 한 작업입니다. 파일의 새 상태를 포함하는 커밋을 만든 경우에서 최근 항목을 살펴보고 git reflog커밋의 SHA1sum을 찾은 다음 git branch recovered <SHA1sum>, 또는 이와 유사한 것으로 새 분기를 만들어 다시 가져올 수 있습니다 . 이 답변이것을 수행하는 예가 있습니다 .

당신이 한 경우 git add를 무대에 어떤 파일에, 당신은 또한 그들을 다시 얻을 수 있어야하지만,이 오히려 더 많은 작업입니다 - 야쿱은이 작업을 수행하는 방법에 대해 설명 이 답변 .

git stash자신에게 깨끗한 상태를주기 위해 우연히 a 를했다면, 물론 다른 은닉처처럼 되돌릴 수 있습니다.

그렇지 않으면 뉴스가 좋지 않은 것 같습니다.

사후에 이것을 지적하는 것이 분노하지 않기를 바라지 만, master분기 로 다시 전환 하려면 데이터를 잃을 수있는 명령을 사용할 필요가 없어야합니다. git checkout master이미 마스터 분기에 있다고 말했을 것입니다. , 커밋되지 않은 변경 사항을 표시합니다. ( git reset --hard이 방법으로 사람들이 얼마나 자주 ^W데이터를 잃는 지를 고려할 때 커밋되지 않은 변경 사항이있는 경우 "예, 정말 의미합니다"라는 확인 메시지가 있어야 합니다.)


reflog를 사용하십시오. git reflog당신이했던 모든 커밋의 역사를 시간순으로 보여줄 것입니다.

'마스터 체크 아웃'으로 변경 사항을 잃어버린 경우 아마도 헤드리스로 작업했을 것입니다. git status당신이 머리없이 일하고 있는지 알려줄 것입니다. (그대로 git branch).

헤드리스로 작업하는 것은 그렇게 나쁘지는 않지만 (고의적으로 항상 수행합니다) 리플 로그에 더 많이 의존하게됩니다.

그러나 어떤 식 으로든 변경 사항을 커밋하지 않은 경우 해당 파일을 검색 할 방법이 없습니다. 이것이 일어날 수있는 유일한 현실적인 방법은 하드 리셋을 수행했거나 명시 적으로 체크 아웃을 강제 한 경우입니다. 마십시오 하지 당신이하지 않는 변경을 강제 해야합니다 당신은 데이터 손실 편안있다.

일반적으로 git에서 '강제'는 -f.


안타깝게도 같은 일을 한 번 이상했습니다. 아무것도 커밋하지 않으면 git은 당신이 무엇을 썼는지 전혀 모릅니다. 당신이 저지른 경우에도 후진하면 반사가 도움이 될지 모르겠습니다.

참고 URL : https://stackoverflow.com/questions/7147680/accidentally-reverted-to-master-lost-uncommitted-changes

반응형