자식에서 삭제 된 파일을 스테이지 해제 git. 다른 변경

일반적으로 파일의 변경 사항을 삭제하려면 다음을 수행하십시오.

git checkout -- <file>

삭제하려는 변경이 파일을 삭제하는 경우 어떻게합니까? 위의 줄은 오류가 발생합니다.

error: pathspec '<file>' did not match any file(s) known to git.

다른 변경 사항을 취소하지 않고 단일 파일을 복원하는 명령은 무엇입니까?

보너스 포인트 : 또한 삭제하려는 변경 사항 이 파일을 추가 하는 경우 어떻게됩니까? 그 변화를 무대에서 벗어나는 방법도 알고 싶습니다.



답변

다음과 같은 효과 git rm <file>또는 rm <file>git add -A와 유사한 것을 취소하고 싶다고 가정합니다 .

# this restores the file status in the index
git reset -- <file>
# then check out a copy from the index
git checkout -- <file>

취소하기 위해 git add <file>, 아직 커밋하지 않았다고 가정하면 위의 첫 번째 줄이면 충분합니다.


답변

두 질문에 모두 답변되어 git status있습니다.

새 파일 추가를 스테이지 해제하려면 git rm --cached filename.ext

# Changes to be committed:
#   (use "git rm --cached <file>..." to unstage)
#
#   new file:   test

파일 삭제를 스테이지 해제하려면 git reset HEAD filename.ext

# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   deleted:    test

반면, git checkout --스테이지를 해제하지 않고 스테이지되지 않은 변경 사항 만 버립니다.


답변

두 질문에 대한 답변은 서로 관련이 있습니다. 두 번째부터 시작하겠습니다.

파일을 스테이징 한 후에 (종종 git add다른 명령은 암시 적으로 변경 사항을 스테이징하지만)로 변경 사항을 git rm취소 할 수 있습니다 git reset -- <file>.

귀하의 경우 git rm파일을 제거하는 데 사용해야 합니다. 이는 단순히 파일을 제거한 rm다음 변경 사항을 준비하는 것과 같습니다 . 처음으로 스테이지를 해제 git reset -- <file>하면로 복구 할 수 있습니다 git checkout -- <file>.


답변

준비되고 커밋 된 경우 다음이 파일을 재설정합니다.

git reset COMMIT_HASH file_path
git checkout COMMIT_HASH file_path
git add file_path

이것은 이전에 여러 커밋이 발생한 삭제에 효과적입니다.


답변

현재 자식 v2.23 , 다른 옵션이 있습니다 :

git restore --staged -- <file>


답변