자식 준비 영역에서 파일을 제거하는 방법?


549

로컬 리포지토리에서 일부 파일을 변경 한 다음 git add -A준비 영역에 너무 많은 파일을 추가했다고 생각했습니다. 준비 영역에서 모든 파일을 어떻게 삭제합니까?

그런 다음 수동으로 수행 git add "filename"합니다.



27
git status이미 파일을 스테이지 해제하려는 경우 수행 할 작업을 정확하게 알려줍니다.
Michael Foukarakis '11

6
@MichaelFoukarakis git status는 터미널에 출력 (예 : node_modules)을 넘치면 전체 디렉토리를 스테이지 해제하려는 경우 유용하지 않습니다
whiterook6

2
앞으로는 모두를 추가하는 대신에 편안하게 ( git add -p또는 git add --patch동일) 원할 수 있습니다 . 이 플래그를 사용하면 스테이지 할 파일 또는 개별 변경 사항을 대화식으로 선택할 수 있습니다. 그러면 커밋에 포함 된 작업에 대해보다 세밀하게 알 수 있습니다.
Gabe

답변:


689

다음을 사용하여 색인에서 파일을 스테이지 해제 할 수 있습니다

git reset HEAD -- path/to/file

마찬가지로 git add디렉토리별로 파일을 반복적으로 스테이지 해제 할 수 있으므로 모든 것을 스테이지 해제하려면 저장소의 루트 디렉토리에서이를 실행하십시오.

git reset HEAD -- .

또한 나중에 참조 git status할 수 있도록 의 출력은 파일을 한 상태에서 다른 상태로 이동하기 위해 실행해야하는 명령을 알려줍니다.


5
$ git reset HEAD -- .생산 fatal: Failed to resolve 'HEAD' as a valid ref.내가 어떤 커밋 한 결코 참고; 그것의 첫번째 git addgit init
Patrizio Bertoni 16:25에

5
을 사용할 수도 있습니다 git reset @.
alex

@alex 평범한 것보다 낫 git reset습니까?
Antony Hatchkins

7
@AntonyHatchkins는와 @동의어입니다 HEAD.
alex

고마워요!
wayneseymour

305

사용하다

git reset

모든 준비된 파일을 준비 해제합니다.


3
이것이 어떻게 다른지 git reset HEAD --또는 단순히 동일한 작업을 수행하는 더 간결한 방법 인지 물어볼 수 있습니까 ?
ProNotion

1
@ProNotion Reset은 HEAD기본적으로 사용 합니다. 이들의 목적은 무엇 --당신의는 git reset HEAD --?
Antony Hatchkins

@AntonyHatchkins 다음에는 완전 정지 (마침표)가 있어야하고 허용 된 답변의 예에서 가져 왔습니다.
ProNotion

11
@ProNotion 죄송합니다. 오해합니다. git reset HEAD -- .현재 디렉토리의 파일 만 재설정 git reset하고 프로젝트의 모든 파일을 재설정한다는 점에서 다릅니다 .
Antony Hatchkins

101

이미 원치 않는 파일의 무리를 저지른 적이 있다면, 당신이 그들을 unstage 수 삭제 된로 (실제로 삭제하지 않고)을 표시하기 위해 자식에게

git rm --cached -r .

--cached파일 자체를 제거하지 않고 스테이징 및 인덱스에서 경로를 제거하도록 지시하고 -r디렉토리에서 재귀 적으로 작동합니다. 그런 다음 git add계속 추적하려는 모든 파일을 사용할 수 있습니다 .


나는 그것이 "git rm-"이라고 가정한다.
Alexander Mills

1
"git rm-"를 사용하여 파일을 제거하지 않으면 치명적인 오류가 발생합니다.
Alexander Mills

@AlexMills rm모든 파일을 스테이지 해제 하는 실제 옵션을 언급하기 위해 답변을 업데이트 합니다.
최대

2
"git rm --cached my / file.java"와 같은 단일 파일에서 이것을 시도했지만 스테이징 영역에 해당 파일이 여전히 있지만 삭제 된 것처럼 보입니다! 이 명령을 실행할 때 @Max 파일이 실제로 삭제되거나 준비되지 않았습니까? 그 행동을 찾고 있지 않다면 나는 대답을 할 것입니다.
OrwellHindenberg

@OrwellHindenberg 고맙습니다. --cached이미 커밋 한 파일 추적을 중지하는 것입니다. 따라서 파일은 실제로 삭제되지 않지만 git는 파일을 생각합니다. 나는 내 대답에서 이것을 분명히했다.
Max

30

당신은 사용할 수 있습니다

git reset HEAD

그런 다음 원하는 특정 파일을 추가하십시오.

git add [directory/]filename

-x 매개 변수를 추가 할 수 있으며 무시 된 파일도 제거됩니다. gitignore를 엉망으로 만들면 유용합니다 (내 경우와 같이). ( git-scm.com/docs/git-clean )
Keeprock

1
초과 폴더를 사용 git status하면 작업 디렉토리를 깨끗하게 정리할 수 있습니다. git clean -df고마워요
Leo

5
참고 git clean -df영구적으로 파일을 삭제합니다. UNIX 계열 시스템에서는 호출 unlink()되어 삭제 된 파일을 복구 할 수 없습니다.
Hanxue

11
OP는 파일 준비 해제에 대해 묻습니다. 파일을 삭제하도록 조언합니다. 응답하기 전에 준비 영역이 무엇인지 읽어보십시오.
Antony Hatchkins

저장하지 않은 프로젝트 전체를 삭제 해 주셔서 감사합니다.
Vansuita Jr.

7

다른 답변에서 언급했듯이을 사용해야합니다 git reset. 이 작업을 취소합니다 git add -A.

참고 : 이것은 이것을하는 git reset것과 git reset --mixed같습니다.

작업 트리가 아닌 색인을 재설정하고 (즉, 변경된 파일은 보존되지만 커밋으로 표시되지 않음) 업데이트되지 않은 내용을보고합니다. 이것이 기본 동작입니다. [ 자식 리셋 ]


2
.. 그리고 준비 영역에서 단일 파일 을 제거 하려면 다음을 수행하십시오.git reset filenameToNotCommit
SherylHohman

5

이제 v2.24.0에서 제안합니다

git restore --staged .

파일을 스테이지 해제합니다.


1

몇 가지 방법으로 준비 영역을 재설정 할 수 있습니다.

  1. 다음과 같이 HEAD를 재설정하고 필요한 모든 파일을 체크인하여 다시 체크인하십시오.

     git reset HEAD ---> removes all files from the staging area
     git add <files, that are required to be committed>
     git commit -m "<commit message>"
     git push 
    

이 답변이 기존 6 개의 답변과 다른 점은 무엇입니까?
Antony Hatchkins

1

준비 영역에서 모든 파일
git reset
을 제거하려면 사용- 특정 파일 사용을 제거하려면-
git reset "File path"


1

사용하다

git reset HEAD

준비 영역에서 모든 파일이 제거됩니다.


1

원치 않는 파일이 준비 영역에 추가되었지만 아직 커밋되지 않은 경우 간단한 재설정으로 작업이 수행됩니다.

$ git reset HEAD file
# Or everything
$ git reset HEAD .

현재 작업 디렉토리에서 비 단계적 변경 사항 만 제거하려면 다음을 사용하십시오.

git checkout -- .

0

git reset HEAD <file>...fils를 스테이지 해제 하려면 " "를 사용하십시오.

예 : 모든 파일을 스테이지 해제

git reset HEAD .

하나의 파일을 스테이지 해제하려면

git reset HEAD nameFile.txt

-3

나는이 모든 방법을 시도했지만 아무도 나를 위해 일하지 않았다. 내가 사용 .git 파일을 제거 rm -rf .git형태를 로컬 저장소를 한 후 다시 한 git initgit add일상 명령. 효과가있었습니다.


4
git 문서를 읽는 것은 일반적으로 xkcd.com/1597 의 조언을 따르는 것보다 더 보람이 있습니다 .)
Antony Hatchkins

1
특정 사례에서 무결성 문제가 발생했을 수 있으며 이것이 옵션으로 남았지 만 권장하지 않습니다.
Shad

이 작업을 수행하지 마십시오. git repo 전체가 파괴됩니다.
Lennart Rolland

-5

준비 영역에 이미있는 파일을 실행 취소하는 가장 좋은 방법 은 준비된 파일을 다시 가져 오는 git reset --hard 입니다. 이제 단계적 변경과 단계적 변경을 제거합니다.


2
이것은 잘못되고 위험하다 !!! OP는 나중에 파일을 "수동으로 직접 추가"하기를 원하지만 --hard영원히 삭제합니다.
Antony Hatchkins
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.