상황 : 이미 색인에 파일이있는 Git 저장소가 있습니다. 여러 파일을 변경하고 Git을 연 다음 "git add"를 사용하여이 파일을 준비 영역에 추가합니다.
질문 : 준비 영역에서 해당 파일 중 하나를 제거하지만 인덱스에서 제거하거나 파일 자체의 변경 내용을 실행 취소하지 않는 방법은 무엇입니까?
상황 : 이미 색인에 파일이있는 Git 저장소가 있습니다. 여러 파일을 변경하고 Git을 연 다음 "git add"를 사용하여이 파일을 준비 영역에 추가합니다.
질문 : 준비 영역에서 해당 파일 중 하나를 제거하지만 인덱스에서 제거하거나 파일 자체의 변경 내용을 실행 취소하지 않는 방법은 무엇입니까?
답변:
질문을 올바르게 이해하면 git add
해당 파일에 대해 수행 한 질문을 "실행 취소"하려고 합니다.
준비 영역에서 단일 파일 을 제거해야하는 경우
git reset HEAD -- <file>
준비 영역에서 전체 디렉토리 (폴더) 를 제거해야하는 경우
git reset HEAD -- <directoryName>
수정 사항이 유지됩니다. 실행 git status
하면 파일이 다시 한 번 수정되었지만 아직 준비되지 않은 것으로 표시됩니다.
자세한 내용은 git reset
매뉴얼 페이지 를 참조하십시오.
git rm --cached FILE
다른 답변에서 제안한 명령 을 사용하십시오 .
git rm --cached FILE
,
git rm -r --cached CVS */CVS
git reset
여기 에서 사용하는 것이 좋습니다 . --chached 옵션을 생략하고 다음 git rm
명령을 사용하여 빠르게 슬퍼 git reset
할 수 있습니다. 매일 사용하기 위해 "새로워"있도록 변경 사항을 유지하십시오 git reset --hard
.
git rm --cached FILE
작업 트리에서 파일을 삭제하지 않고 파일 삭제를 준비합니다. 이것은 실행 취소에 관한 질문과 다릅니다 git add
.
git rm --cached
파일을 색인에서 제거 합니다. 즉, 파일이 추적되지 않은 파일이됩니다. 나는 이것이 OP가 원하는 것이라고 생각하지 않습니다. 여기에서 관련 스레드를 참조하십시오 : stackoverflow.com/questions/45047810/…
할 때 git status
, Git은 스테이지를 해제하는 방법을 알려줍니다.
Changes to be committed: (use "git reset HEAD <file>..." to unstage).
그래서 git reset HEAD <file>
나를 위해 일했고 변경 사항은 그대로 유지되었습니다.
@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 add .
추적 된 모든 파일을 준비하기 때문에 항상 바람직하지 않거나 권장되는 것은 아닙니다 (일부 경우에만 변경 사항을 유지하고 원격 저장소에 저장하지 않으려는 경우).
또한 무리를하는 것이 이상적이지 않습니다.
git add path/to/file1 path/to/file2
중첩 된 디렉토리가 많은 경우 (대부분의 프로젝트의 경우)-성가신
그것은 Git GUI가 도움이 될 때입니다 (아마도 그것을 사용했을 때만). Git GUI를 열면 스테이지 및 스테이지되지 않은 파일 섹션이 표시됩니다. 준비를 해제하려는 준비된 섹션에서 파일을 선택하고
Ctrl+U
(윈도우 용)
무대를 비우기 위해.
최신 버전의 Git에는 git restore --staged <file>
.
git status
Git 버전으로 할 때 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 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>
스테이징 영역에서 파일을 완벽하게 제거합니다.