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
'source' 카테고리의 다른 글
psycopg2 설치 오류, -lssl에 대한 라이브러리를 찾을 수 없습니다. (0) | 2023.05.09 |
---|---|
Xcode에서 클래스 이름 바꾸기:리팩터...회색으로 표시됩니다(비활성화됨).왜요? (0) | 2023.05.09 |
MongoDB-CR 인증 실패 (0) | 2023.05.04 |
WPF 애플리케이션에서 App.config 파일을 사용하는 방법은 무엇입니까? (0) | 2023.05.04 |
Postgresql 열 = 배열이 있는 행을 선택합니다. (0) | 2023.05.04 |