일반적으로 파일의 변경 사항을 삭제하려면 다음을 수행하십시오.
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
이것은 이전에 여러 커밋이 발생한 삭제에 효과적입니다.