상황: 이미 색인에 파일이 있는 Git 리포지토리가 있습니다. 여러 파일을 변경하고 Git을 열고 "git add"를 사용하여 이 파일을 내 준비 영역에 추가합니다.
질문: 준비 영역에서 해당 파일 중 하나를 제거하지만 인덱스에서 제거하거나 파일 자체에 대한 변경 사항을 실행 취소하지 않으려면 어떻게 합니까?
질문자 :PHLAK
상황: 이미 색인에 파일이 있는 Git 리포지토리가 있습니다. 여러 파일을 변경하고 Git을 열고 "git add"를 사용하여 이 파일을 내 준비 영역에 추가합니다.
질문: 준비 영역에서 해당 파일 중 하나를 제거하지만 인덱스에서 제거하거나 파일 자체에 대한 변경 사항을 실행 취소하지 않으려면 어떻게 합니까?
질문을 올바르게 이해했다면 해당 파일에 대해 수행 git add
준비 영역에서 단일 파일 을 제거해야 하는 경우 다음을 사용하십시오.
git reset HEAD -- <file>
스테이징 영역에서 전체 디렉토리(폴더) 를 제거해야 하는 경우 다음을 사용하십시오.
git reset HEAD -- <directoryName>
수정 사항이 유지됩니다. git status
를 실행하면 파일이 수정된 것으로 다시 표시되지만 아직 준비되지는 않았습니다.
자세한 내용은 git reset
매뉴얼 페이지 를 참조하십시오.
git rm --cached FILE
,
git rm -r --cached CVS */CVS
git reset <file>
이전 커밋이 있는지 여부에 관계없이 작동합니다.
따라서 Tim Henigan의 답변을 약간 수정했습니다. 파일 이름 앞에 --를 사용해야 합니다. 다음과 같이 보일 것입니다.
git reset HEAD -- <file>
git reset filename.txt
filename.txt 에 수정 사항이 있는 경우 실수로 스테이징에 추가했으며 스테이징에서 파일을 제거하고 싶지만 변경 사항을 잃고 싶지는 않습니다.
최신 버전의 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
대한 추가 매개변수를 설명하는 이 게시물을 적극 추천합니다.
파일에 대한 변경 사항의 하위 집합을 제거하려는 경우 다음을 사용할 수 있습니다.
git reset -p
또는
git reset -p <file_name>
이 명령은 기본적으로 git add -p
의 반대입니다. 스테이징 영역에서 선택한 변경 사항만 제거합니다. 실수로 추가한 것을 "추가 취소"하는 데 매우 유용합니다.
특정 패턴에 따라 파일을 제거하고 git rm --cached
를 사용하는 경우 file-glob 패턴도 사용할 수 있습니다.
여기를 참조하십시오.
@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>
이 명령은 파일이 스테이징 되었지만 파일이 스테이징된 후 작업 디렉터리 에서 수정된 경우 이 작업을 사용하여 스테이징 디렉터리 에서 작업 디렉터리 의 파일을 복원합니다. 즉, 이 작업 후에 변경 사항은 스테이징 디렉터리가 아니라 작업 디렉터리 에서 발생합니다.
버전 2.23
이후 Git은 이를 수행하는 데 사용할 수 git restore
공식 문서 인용:
복원 소스의 일부 내용을 사용하여 작업 트리에서 지정된 경로를 복원합니다. 경로가 추적되지만 복원 소스에 존재하지 않는 경우 소스와 일치하도록 제거됩니다.
또한이 명령으로 인덱스의 내용을 복원 할 수 있습니다
--staged
, 또는 작업 트리와 인덱스를 모두 복원--staged --worktree
.
따라서 git restore --staged <path>
를 호출하고 파일을 언스테이지하면서도 변경 사항을 유지할 수 있습니다. 파일이 준비되지 않은 경우 파일에 대한 모든 변경 사항이 손실된다는 점을 기억하십시오.
git status
를 수행하면 Git에서 스테이지 해제 방법을 알려줍니다.
Changes to be committed: (use "git reset HEAD <file>..." to unstage).
그래서 git reset HEAD <file>
이 저에게 효과적이었고 변경 사항은 그대로 유지되었습니다.
당신이 원하는:
단일 파일에 영향
준비 영역에서 파일 제거
인덱스에서 단일 파일을 제거하지 않음
변경 자체를 취소하지 마십시오.
그리고 해결책은
git reset HEAD file_name.ext
또는
git reset HEAD path/to/file/file_name.ext
많은 추적 파일을 변경했지만 그 중 일부만 준비하려는 경우 다음을 수행합니다.
git add .
항상 유리한(또는 권장되는) 것은 아닙니다. 추적된 모든 파일을 스테이지하기 때문입니다(변경 사항을 자신에게만 유지하고 원격 저장소에 스테이지하지 않으려는 경우도 있음).
많은 일을 하는 것도 이상적이지 않습니다.
git add path/to/file1 path/to/file2
중첩된 디렉토리가 많은 경우(대부분의 프로젝트에서 해당) - 짜증나기
그럴 때 Git GUI가 도움이 됩니다(아마도 내가 사용할 때만). Git GUI를 열면 준비된 파일 섹션과 준비되지 않은 파일 섹션이 표시됩니다. 스테이지를 해제하려는 스테이지된 섹션에서 파일을 선택하고
Ctrl+U
(윈도우용)
그들을 언스테이징합니다.
내 샘플:
$ 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)
파일의 디렉토리에 있어야 하고 터미널에 다음을 입력해야 합니다.
git checkout -- <file>
파일의 디렉토리에 있어야 하고 터미널에 다음을 입력해야 합니다.
git reset HEAD .
하나의 파일만 재설정해야 한다고 가정합니다.
모든 것을 한 번에 언스테이징하려면 이 명령을 실행하십시오.
git reset HEAD -- .
git checkout -- <file>
스테이징 영역에서 파일을 제거하는 데 완벽하게 작동합니다.
출처 : http:www.stackoverflow.com/questions/1505948/how-do-i-remove-a-single-file-from-the-staging-area-undo-git-add
Node.js의 Express.js에서 GET(쿼리 문자열) 변수를 얻는 방법은 무엇입니까? (0) | 2023.04.09 |
---|---|
중복 행을 제거하려면 어떻게 해야 합니까? (0) | 2023.04.09 |
함수 앞에 느낌표는 무엇을 합니까? (0) | 2023.04.09 |
div에서 텍스트를 세로로 어떻게 정렬합니까? (0) | 2023.04.09 |
JavaScript 날짜에 날짜 추가 (0) | 2023.04.09 |