source

Git의 준비 영역(= 인덱스 = 캐시)에서 파일을 제거하는 방법은 무엇입니까?

nicesource 2023. 5. 4. 20:04
반응형

Git의 준비 영역(= 인덱스 = 캐시)에서 파일을 제거하는 방법은 무엇입니까?

EDIT 이 질문은 두 가지 방법으로 이해할 수 있으며, 최적의 답변은 두 경우에 다릅니다.

  • 질문 1: 이전에 추적되지 않은 파일을 준비 영역에 추가했습니다.이 파일을 파일 시스템에서 제거하지 않고 준비 영역에서 제거하려면 어떻게 해야 합니까?

    답변 1: John Feminella의 답변에 설명된 대로 다음 명령을 사용합니다.

    git rm --cached <file>
    
  • 질문 2: 이미 추적된 파일을 수정하고 준비 영역에 수정 사항을 추가했습니다.준비 영역에서 수정사항을 제거하려면 어떻게 해야 합니까?즉, 파일에서 수정한 내용을 해제하려면 어떻게 해야 합니까?

    답변 2: David Underhill의 답변에 설명된 대로 다음 명령을 사용합니다.

    git reset <file>
    

원하는 항목:

git rm --cached [file]

다음을 생략할 경우--cached옵션을 선택하면 작업 트리에서도 삭제됩니다. git rm보다 약간 안전합니다.git reset준비된 콘텐츠가 분기의 끝이나 디스크의 파일과 일치하지 않으면 경고가 표시되기 때문입니다.--force.)

이렇게 하면 (파일을 제거하거나 수정하지 않고) <파일>의 스테이징이 해제됩니다.

git reset <file>
git reset HEAD <file> 

특정 파일을 인덱스에서 제거합니다.

그리고.

git reset HEAD

모든 인덱스 파일을 제거합니다.

사용만git rm --cached [file]파일을 인덱스에서 제거합니다.

git reset <filename>파일이 커밋되지 않은 경우 인덱스에서 추가된 파일을 제거하는 데 사용할 수 있습니다.

% git add First.txt
% git ls-files
First.txt
% git commit -m "First"   
% git ls-files            
First.txt
% git reset First.txt
% git ls-files              
First.txt

참고: git reset First.txt커밋 후 인덱스에는 영향을 주지 않습니다.

그래서 저는 다음 주제로 넘어갑니다.git restore --staged <file>파일이 커밋되지 않은 경우 인덱스에서 추가된 파일을 제거하는 데 사용할 수 있습니다(첫 번째 커밋 후인 것으로 추정됨).

% git add Second.txt              
% git status        
On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
    new file:   Second.txt
% git ls-files       
First.txt
Second.txt
% git restore --staged Second.txt
% git ls-files 
First.txt
% git add Second.txt 
% git commit -m "Second"
% git status            
On branch master
nothing to commit, working tree clean
% git ls-files 
First.txt         
Second.txt
Desktop/Test% git restore --staged .
Desktop/Test% git ls-files
First.txt                   
Second.txt
Desktop/Test% git reset .                    
Desktop/Test% git ls-files
First.txt
Second.txt
% git rm --cached -r .
rm 'First.txt'
rm 'Second.txt'
% git ls-files  

tl;dr 마지막 15줄을 보세요.첫 번째 커밋, 두 번째 커밋, 커밋 전, 커밋 후와 혼동하고 싶지 않다면…항상 사용하는git rm --cached [file]

저의 겸손한 의견과 git에 대한 업무 경험에 따르면, 스테이징 영역은 인덱스와 같지 않습니다.물론 틀릴 수도 있지만, 앞서 말했듯이 git을 사용한 경험과 논리에 따르면, 그 인덱스는 설정을 무시함으로써 제외되지 않는 당신의 작업 영역(로컬 저장소)에 대한 당신의 변경을 따르는 구조이며, 스테이징 영역은 이미 커밋된 것으로 확인된 파일을 보관하는 것입니다.add 명령이 실행된 인덱스의 파일입니다.당신은 "약간" 차이를 알아차리지 못하고 깨닫습니다, 왜냐하면 당신은 사용하기 때문입니다.git commit -a -m "comment" 인덱스 파일 및 캐시된 파일을 스테이지 영역에 추가하고 하나의 명령으로 커밋하거나 IDEA와 같은 IDE를 사용하는 경우가 너무 많습니다.캐시는 인덱스된 파일의 변경사항을 유지하는 기능입니다.이전에 준비 영역에 추가되지 않은 파일을 인덱스에서 제거하려는 경우 이전에 제안된 옵션이 일치하지만...이미 , 을 해야 할 입니다.

Git restore --staged <file>

그리고, 제발, 10년 전에 어디에 있었는지 묻지 마...보고 싶었어요, 이 대답은 다음 세대를 위한 것입니다)

워크플로우에 따라 명령줄 솔루션을 찾는 데 필요한 작업이 거의 없을 정도로 거의 필요하지 않을 수 있습니다(어떤 이유로든 그래픽 인터페이스 없이 작업하는 경우는 제외).

인덱스 관리를 지원하는 GUI 기반 도구 중 하나를 사용하면 됩니다. 예를 들어 다음과 같습니다.

  • git gui<-- Tk 윈도우 설정 프레임워크를 사용합니다. -- 비슷한 스타일입니다.gitk
  • git cola좀 더 의 GUI 인터페이스<--- 의보인터

이렇게 하면 포인트 앤 클릭 방식으로 파일을 인덱스 안팎으로 이동할 수 있습니다.파일의 일부(개별 변경 사항)를 선택하고 인덱스에서 이동할 수도 있습니다.


다른 관점은 어떻습니까?제안된 암호화된 명령 중 하나를 사용하는 동안 오류가 발생하는 경우:

  • git rm --cached [file]
  • git reset HEAD <file>

...데이터를 잃어버리거나 적어도 찾기가 어려워질 가능성이 큽니다.매우 높은 빈도로 이 작업을 수행할 필요가 없는 한 GUI 도구를 사용하는 것이 더 안전할 수 있습니다.


인덱스 없이 작업

댓글과 투표를 통해 많은 사람들이 항상 지수를 사용한다는 것을 알게 되었습니다.없어.방법:

  • 전체 작업 복사본 커밋(일반적인 경우): git commit -a
  • 만 커밋합니다: 몇개파만커:git commit (list of files)
  • 파일을 한 모든 을 커밋합니다.git commit -a그런 다음 을 통해 수정합니다.git gui
  • 복사본에 합니다.git difftool --dir-diff --tool=meld

언급URL : https://stackoverflow.com/questions/2223308/how-to-remove-a-file-from-the-staging-area-index-cache-in-git

반응형