programing

git 삭제 후 커밋이 수행되지 않은 삭제된 파일 복구

skycolor 2023. 5. 22. 20:52
반응형

git 삭제 후 커밋이 수행되지 않은 삭제된 파일 복구

파일을 몇 개 삭제했습니다.

아직 약속하지 않았습니다.

파일을 복구하기 위해 작업 영역을 재설정합니다.

나는 했습니다.git checkout ..

그러나 삭제된 파일은 여전히 없습니다.

그리고.git status표시:표시:

# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   deleted:    cc.properties
#   deleted:    store/README
#   deleted:    store/cc.properties
#

그렇지 않은 이유git checkout .을 작업공재설로 합니다.HEAD?

출력을 통해 수행해야 할 작업을 알 수 있습니다. git reset HEAD cc.properties기타

이렇게 하면 열 작업의 스테이징이 해제됩니다.에 그후, 행실을 합니다.git status다시 한 번 당신이 해야 할 필요가 있다고 말할 것입니다.git checkout -- cc.properties파일을 다시 가져올 수 있습니다.

업데이트: 구성 파일에 있습니다.

$ git config alias.unstage
reset HEAD

제가 보통 무대를 해체할 때 사용하는 것입니다.

삭제를 준비했으므로 다음 작업을 수행해야 합니다.

git checkout HEAD cc.properties store/README store/cc.properties

git checkout .삭제가 이미 준비된 인덱스에서만 체크아웃합니다.

해요.git checkout path/to/file-I-want-to-bring-back.txt

각 단일 경로를 지정하지 않고 단계별 삭제 내용을 한 번에 자동으로 복구하려면:

git ls-files -z -d | xargs -0 git checkout --

각 단일 경로를 지정하지 않고 모든 준비된 삭제 내용을 한 번에 자동으로 복구하려면:

git status | grep 'deleted:' | awk '{print $2}' | xargs git checkout --

▁a▁you요까.git checkout .분기를 마지막 커밋 상태로 복원하려는 것 같습니다.

다음을 통해 이를 달성할 수 있습니다.git reset HEAD --hard

경고

이렇게 하면 최신 수정 사항이 모두 제거되고 수정 사항의 스테이징이 해제될 수 있습니다. 예를 들어 작업이 중단될 수 있습니다.당신이 원하는 것일 수도 있지만, 확실히 하기 위해 서류를 확인하세요.

사용했다면

git rm filename

파일을 삭제하는 경우

git checkout path/to/filename

작동하지 않습니다, 그래서 그 경우.

git checkout HEAD^ path/to/filename

효과가 있어야 합니다.

여기 제 맥에서 저를 도와준 명령어가 있습니다.저는 몇 가지 다른 해결책을 시도해 보았지만 효과가 없었습니다.

OSX 매버릭스의 Git 버전

mac-pro:main chris$ git version
git version 1.8.5.2 (Apple Git-48)

명령

git checkout HEAD -- path/to/file/file.cc

다음은 다른 사용자를 돕기 위한 참고 자료로서 다양한 사례입니다.

삭제가 커밋되지 않은 경우 아래 명령은 작업 트리에서 삭제된 파일을 복원합니다.

$ git checkout -- <file>

아래 명령을 사용하여 작업 트리에서 삭제된 모든 파일의 목록을 가져올 수 있습니다.

$ git ls-files --deleted

삭제가 커밋된 경우 발생한 커밋 위치를 찾은 다음 이 커밋에서 파일을 복구합니다.

#find the commit hash where it had this file deleted
$ git rev-list -n 1 HEAD -- <file>

그것은 당신에게 다음과 같은 것을 줄 것입니다.c46e81aa403ecb8a0f7a323a358068345 이 해시를 연산자commit ")와 합니다.^) 이와 같은 경우:

$ git checkout <commit>^ -- <file>

예:

$ git checkout c46e81aa403ecb8a0f7a323a358068345^ -- <file> 

복구할 파일의 경로를 찾는 경우 다음 명령은 삭제된 모든 파일의 요약을 표시합니다.

$ git log --diff-filter=D --summary

파일 목록만 표시하려는 경우:

git log --diff-filter=D --summary | grep "delete mode"

모든 파일을 한 번에 복원하려는 경우

마침표는 모든 파일을 가져오라는 Git를 알려주기 때문에 사용해야 합니다.

이 명령은 헤드를 재설정하고 모든 변경 사항을 해제합니다.

$ git reset HEAD . 

그런 다음 이를 실행하여 모든 파일을 복원합니다.

$ git checkout .

Git 상태를 수행하면 다음과 같은 결과를 얻을 수 있습니다.

$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
git checkout HEAD -- client/src/pp_web/index.cljs

사용하다git ls-files삭제된 파일 또는 수정된 파일을 체크아웃합니다.

git checkout $(git ls-files -d)

Git Checkout에서 수정된 파일만 복원하려면 어떻게 해야 합니까?를 참조하십시오.

이것을 볼 수 있습니까?

그것은 당신이 사용한 경우에 적용됩니다.

git checkout -- .

당신이 무언가를 저지르기 전에.

아직 생성되지 않은 생성된 파일을 제거할 수도 있습니다.그리고 당신은 그들을 원하지 않습니다.포함:

git reset -- .

변경 사항을 커밋하지 않은 경우 변경 사항을 저장하기만 하면 마지막 작업 커밋으로 돌아갑니다.

git stash
git stash clear
git clean 

다른 분기에서 병합한 후 내 작업 디렉터리에서 삭제된 파일의 삭제를 취소하는 방법에 대한 답변을 찾는 동안 이 게시물을 발견했습니다.병합 후 아직 커밋되지 않았습니다.병합이 진행 중이기 때문에 다음을 사용하여 다시 추가할 수 없습니다.

$ git reset <commitid#-where-file.cpp-existed> file.cpp

파일을 다시 가져오려면 재설정 외에 다른 단계를 수행해야 했습니다.

$ git checkout -- file.cpp

삭제된 디렉토리를 찾고 있는 경우.

 git checkout ./pathToDir/*

새로운 git(내 것은 2.27.0)이 더 친숙하며 실제 명령은 "git status" 동안 표시됩니다.예를 들어, tf.c 파일을 삭제한 경우

$ git status
...
Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
      deleted:    tf.c

"git restore tf.c"를 사용하여 원래대로 되돌릴 수 있습니다.더 이상 검색하지 않습니다!

이것이 저에게 가장 쉬운 방법이었습니다.

git checkout HEAD~1 path/to/myfile.rb

여기서 찾았어요.


또 다른 방법은 저에게도 효과가 있었습니다.

git reset HEAD path/to/myfile.rb
git restore path/to/myfile.rb

나에게 효과가 있었던 것은git checkout {SHA1 of commit with version to restore} "{path to file to restore}"

를 들어 를들면입니다.git checkout 5a6b3179e58edff9c90326b9a04284b02fd67bd0 "src-ui/views/includes/radar.pug"

(파일을 저장할 분기에 저장)

이 명령이 실행되면 복원된 파일이 원래 위치에 존재합니다(이 위치는 커밋해야 함).

1. 다음을 사용하여 되돌릴 특정 커밋을 찾습니다.

   git log
This command will give you a list of commits done by you .

2. 다음을 사용하여 해당 커밋으로 돌아갑니다.

    git revert <commit id> 

이제 로컬 지점에는 모든 파일이 있습니다.

우연히 같은 저장소 내의 한 폴더에서 다른 폴더로 일부 json 파일을 (복사하는 대신) 이동했습니다.그런 다음 파일 이름을 바꾸고 새 위치에서 일부 내용을 변경했습니다.하지만 저는 제가 이전 위치에서 파일을 복사하고 완전히 삭제하지 않았다는 것을 금방 알게 되었습니다.

간편한 솔루션:

git reset HEAD <oldfilepath_which_was_moved>
git restore <oldfilepath_which_was_moved>

모든 파일에 대해 이 작업을 수행했으며 파일이 다시 돌아왔습니다.

공백으로 구분된 여러 파일을 포함할 수도 있습니다.

git reset HEAD file_1_path file_2_path file_3_path

쉬운 수정이지만 새 파일을 변경하거나 삭제하지는 않습니다.

상황:하나는 파일을 삭제했지만 커밋하지 않았습니다.

파일을 삭제하고 바로 실수라는 것을 알았다면요?이 방법은 간단합니다. 다음을 수행하세요.

git checkout HEAD <filename>

폴더인 경우 다음을 수행합니다.

git checkout HEAD <foldername>/

참조: https://www.git-tower.com/learn/git/faq/restoring-deleted-files

Toroise를 설치한 경우GIT를 선택한 다음 "Return...상위 폴더 팝업 창에 대한 메뉴 항목입니다.

주의: 보관할 작업을 먼저 수행합니다.

작업영역을 재설정하고 삭제된 파일을 복구할 수 있습니다.

git checkout ./*

실행 중에 작업 트리에 없는 알 수 없는 수정본 또는 경로가 표시되는 사용자용git checkout

려달을 git reset fileToRestore

그리고나서git checkout fileToRestore

파일이 복원됩니다.

사용할 수 있습니다.git-restore파일을 한 번에 복구할 수 있습니다.

삭제 내용을 다음과 같이 커밋하지 않은 경우:

➜  learning git:(daily) ✗ git status
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
    deleted:    feelings/articles/2022/1/assets/20220109_093659_image.png
    deleted:    feelings/articles/2022/1/assets/20220109_094525_image.png
    deleted:    feelings/articles/2022/1/assets/20220109_100231_image.png
    deleted:    feelings/articles/2022/1/assets/20220109_100251_image.png
    deleted:    feelings/articles/2022/1/assets/20220109_100321_image.png
    deleted:    feelings/articles/2022/1/assets/20220109_101009_image.png

다음과 같은 방법을 사용하여 파일을 복구할 수 있습니다.

git restore --worktree --staged feelings/articles/2022/1/assets

, --staged-W, ---------------------------------------------------------------------------------
복원 위치를 지정합니다.두 옵션을 모두 지정하지 않으면 기본적으로 작업 트리가 복원됩니다. --stage는 인덱스를 복원합니다.둘 다 지정하면 둘 다 복원됩니다.

저는 같은 문제를 겪었지만 위의 해결책 중 어느 것도 저에게 맞지 않았습니다.결국 제가 한 일은:
의 빈 .
합니다.
기록을 빈 파일로 복사합니다.

위험이 없는 한 가지 해결책은 저장소 페이지(github 등)로 이동하여 삭제된 파일을 직접 다운로드하는 것입니다.

저도 같은 문제를 가지고 있었고 여기서 시도한 답들 중 어떤 것도 저에게 효과가 없었습니다. 지점인 Intellij를 했습니다.git checkout -b minimalExample프로젝트에서 파일 묶음을 삭제하고 다른 파일 묶음을 수정하여 문제의 새 분기에 "예외"를 만듭니다.불행하게도, 새로운 "최소 예제" 분기에 대한 변경 사항을 전혀 적용하지 않았지만, "원래" 분기를 다시 확인했을 때 "최소 예제" 분기의 모든 변경 사항과 삭제 사항이 "원래" 분기에서도 발생했습니다(또는 그렇게 나타났습니다).에 의하면git status삭제된 파일은 두 지점에서 모두 사라졌습니다.

다행히 Intellij가 "이러한 파일을 완전히 복구할 수 없을 수도 있습니다."라고 경고했지만 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 Local History > Show History(기록 표시)를 선택한 다음 원하는 가장 최근 기록 항목에서 복원을 선택하여 해당 파일을 복원할 수 있었습니다.Intellij가 "minimal example" 분기에 있는 파일을 복원한 후 분기를 오리진으로 밀어넣었습니다.그런 다음 "원래" 지역 지점으로 다시 전환하여 운영했습니다.git pull origin minimalExample그들을 "원래" 지점으로 되돌리기 위해서도.

언급URL : https://stackoverflow.com/questions/11956710/git-recover-deleted-file-where-no-commit-was-made-after-the-delete

반응형