etc./StackOverFlow

스테이징 영역에서 단일 파일을 어떻게 제거합니까(git add 실행 취소)?

청렴결백한 만능 재주꾼 2023. 4. 9. 15:43
반응형

질문자 :PHLAK


상황: 이미 색인에 파일이 있는 Git 리포지토리가 있습니다. 여러 파일을 변경하고 Git을 열고 "git add"를 사용하여 이 파일을 내 준비 영역에 추가합니다.

질문: 준비 영역에서 해당 파일 중 하나를 제거하지만 인덱스에서 제거하거나 파일 자체에 대한 변경 사항을 실행 취소하지 않으려면 어떻게 합니까?



질문을 올바르게 이해했다면 해당 파일에 대해 수행 git add

준비 영역에서 단일 파일 을 제거해야 하는 경우 다음을 사용하십시오.

git reset HEAD -- <file>

스테이징 영역에서 전체 디렉토리(폴더) 를 제거해야 하는 경우 다음을 사용하십시오.

git reset HEAD -- <directoryName>

수정 사항이 유지됩니다. git status 를 실행하면 파일이 수정된 것으로 다시 표시되지만 아직 준비되지는 않았습니다.

자세한 내용은 git reset 매뉴얼 페이지 를 참조하십시오.


Tim Henigan

git rm --cached FILE

,

 git rm -r --cached CVS */CVS

user335425

git reset <file>

이전 커밋이 있는지 여부에 관계없이 작동합니다.


MTS

따라서 Tim Henigan의 답변을 약간 수정했습니다. 파일 이름 앞에 --를 사용해야 합니다. 다음과 같이 보일 것입니다.

 git reset HEAD -- <file>

GuerillaNerd

git reset filename.txt

filename.txt 에 수정 사항이 있는 경우 실수로 스테이징에 추가했으며 스테이징에서 파일을 제거하고 싶지만 변경 사항을 잃고 싶지는 않습니다.


Vlad Cioaba

최신 버전의 Git에는 git restore --staged <file> 있습니다.

Git 버전 git status 를 수행하면 2.26.2.windows.1 에도 권장됩니다.

 Changes to be committed: (use "git restore --staged <file>..." to unstage)

( 게시물은 이전 버전에서 이 시점에서 git reset HEAD

git revert , git restore , git reset 의 차이점 git restore 대한 추가 매개변수를 설명하는 이 게시물을 적극 추천합니다.


Ruik

파일에 대한 변경 사항의 하위 집합을 제거하려는 경우 다음을 사용할 수 있습니다.

 git reset -p

또는

 git reset -p <file_name>

이 명령은 기본적으로 git add -p 의 반대입니다. 스테이징 영역에서 선택한 변경 사항만 제거합니다. 실수로 추가한 것을 "추가 취소"하는 데 매우 유용합니다.


fede1024

특정 패턴에 따라 파일을 제거하고 git rm --cached 를 사용하는 경우 file-glob 패턴도 사용할 수 있습니다.

여기를 참조하십시오.


thilinarmtb

@CB Bailey가 다음 과 같이 언급한 것처럼 index 의 개념과 혼동했을 것입니다.

준비 영역은 인덱스입니다.

단순히 스테이징 디렉토리인덱스 를 동일한 것으로 간주할 수 있습니다.
따라서 @Tim Henigan의 답변 과 마찬가지로 다음과 같이 생각합니다.

해당 파일에 대해 수행된 git add 를 "실행 취소"하기만 하면 됩니다.



내 대답은 다음과 같습니다.

일반적으로 이미 언급한 다른 답변과 같이 단계 작업을 실행 취소하는 두 가지 방법이 있습니다.

 git reset HEAD <file>

그리고

 git rm --cached <file>

그러나 차이점은 무엇입니까?

파일이 준비 되었고 작업 디렉터리 에도 존재한다고 가정하고 준비 디렉터리 git rm --cached <file> 을 사용하고 파일을 작업 디렉터리 에 보관합니다. 그러나으로이 작업은 스테이징 디렉토리에서 파일을 제거 할뿐만 아니라 파일을 표시하지 않습니다 통지 deleted 디렉토리를 준비 당신이 사용하는 경우,

 git status

이 작업 후에 다음이 표시됩니다.

 deleted: <file>

스테이징 디렉토리 에서 파일을 제거한 기록입니다. 해당 기록을 유지하지 않고 단순히 파일의 이전 단계 작업을 실행 취소하려는 경우 git reset HEAD <file> 대신 사용하십시오.


-------- 답변 끝 --------

추신 : 언급 된 몇 가지 답변을 발견했습니다.

git checkout -- <file>

이 명령은 파일이 스테이징 되었지만 파일이 스테이징된 후 작업 디렉터리 에서 수정된 경우 이 작업을 사용하여 스테이징 디렉터리 에서 작업 디렉터리 의 파일을 복원합니다. 즉, 이 작업 후에 변경 사항은 스테이징 디렉터리가 아니라 작업 디렉터리 에서 발생합니다.


Wulfric Lee

버전 2.23 이후 Git은 이를 수행하는 데 사용할 수 git restore 공식 문서 인용:

복원 소스의 일부 내용을 사용하여 작업 트리에서 지정된 경로를 복원합니다. 경로가 추적되지만 복원 소스에 존재하지 않는 경우 소스와 일치하도록 제거됩니다.

또한이 명령으로 인덱스의 내용을 복원 할 수 있습니다 --staged , 또는 작업 트리와 인덱스를 모두 복원 --staged --worktree .

따라서 git restore --staged <path> 를 호출하고 파일을 언스테이지하면서도 변경 사항을 유지할 수 있습니다. 파일이 준비되지 않은 경우 파일에 대한 모든 변경 사항이 손실된다는 점을 기억하십시오.


Mike

git status 를 수행하면 Git에서 스테이지 해제 방법을 알려줍니다.

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

그래서 git reset HEAD <file> 이 저에게 효과적이었고 변경 사항은 그대로 유지되었습니다.


user4299998

당신이 원하는:

  • 단일 파일에 영향

  • 준비 영역에서 파일 제거

  • 인덱스에서 단일 파일을 제거하지 않음

  • 변경 자체를 취소하지 마십시오.

그리고 해결책은

 git reset HEAD file_name.ext

또는

 git reset HEAD path/to/file/file_name.ext

Do Nhu Vy

많은 추적 파일을 변경했지만 그 중 일부만 준비하려는 경우 다음을 수행합니다.

git add .

항상 유리한(또는 권장되는) 것은 아닙니다. 추적된 모든 파일을 스테이지하기 때문입니다(변경 사항을 자신에게만 유지하고 원격 저장소에 스테이지하지 않으려는 경우도 있음).

많은 일을 하는 것도 이상적이지 않습니다.

git add path/to/file1 path/to/file2

중첩된 디렉토리가 많은 경우(대부분의 프로젝트에서 해당) - 짜증나기

그럴 때 Git GUI가 도움이 됩니다(아마도 내가 사용할 때만). Git GUI를 열면 준비된 파일 섹션과 준비되지 않은 파일 섹션이 표시됩니다. 스테이지를 해제하려는 스테이지된 섹션에서 파일을 선택하고

Ctrl+U (윈도우용)

그들을 언스테이징합니다.


rite2hhh

내 샘플:

 $ git status On branch feature/wildfire/VNL-425-update-wrong-translation Your branch and 'origin/feature/wildfire/VNL-425-update-wrong-translation' have diverged, and have 4 and 1 different commits each, respectively. (use "git pull" to merge the remote branch into yours) Changes to be committed: (use "git reset HEAD <file>..." to unstage) modified: ShopBack/Source/Date+Extension.swift modified: ShopBack/Source/InboxData.swift modified: ShopBack/en.lproj/Localizable.strings

당신이 알 수 있듯이

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

Khang Azun

파일의 디렉토리에 있어야 하고 터미널에 다음을 입력해야 합니다.

 git checkout -- <file>

Mehdi Kazemi

파일의 디렉토리에 있어야 하고 터미널에 다음을 입력해야 합니다.

 git reset HEAD .

하나의 파일만 재설정해야 한다고 가정합니다.


nevosial

모든 것을 한 번에 언스테이징하려면 이 명령을 실행하십시오.

 git reset HEAD -- .

Devendra Verma

git checkout -- <file>

스테이징 영역에서 파일을 제거하는 데 완벽하게 작동합니다.


Juan Ramirez

출처 : http:www.stackoverflow.com/questions/1505948/how-do-i-remove-a-single-file-from-the-staging-area-undo-git-add

반응형