“git rm –cached x”대 “git reset head —- x”? 샷에 포함되지 않으므로 효과적으로 삭제됩니다. 기본적으로

GitRef.org-기본 :

git rm준비 영역에서 항목을 제거합니다. 이것은 git reset HEAD“언 스테이지”파일 과는 조금 다릅니다 . “무단계”는 스테이징 영역을 수정하기 전에 있던 영역으로 되 돌리는 것을 의미합니다.
git rm반면에 파일은 스테이지에서 완전히 걷어차 기 때문에 다음 커밋 스냅 샷에 포함되지 않으므로 효과적으로 삭제됩니다.

기본적으로 a git rm file는 준비 영역에서 파일을 완전히 제거하고 디스크 (작업 디렉토리)에서도 제거합니다. 파일을 작업 디렉토리에 두려면을 사용할 수 있습니다 git rm --cached.

그러나 git rm --cached asd와 의 차이점은 정확히 무엇 git reset head -- asd입니까?



답변

예를 들어 트리, 인덱스 및 작업 복사본과 같이 파일이있을 수있는 위치는 세 곳입니다. 폴더에 파일을 추가하면 작업 사본에 파일이 추가됩니다.

같은 일을 할 때 git add file색인에 추가하십시오. 그리고 커밋하면 트리에도 추가됩니다.

git reset에서 세 가지 일반적인 플래그를 아는 데 도움이 될 것입니다.

자식 리셋 [- <mode>] [ <commit>]

이 양식은에 따라 현재 분기 헤드를 <commit>재설정하고 인덱스 (트리의 재설정 <commit>) 및 작업 트리 <mode>를 업데이트합니다. –soft 중 하나 여야합니다.
–soft

인덱스 파일이나 작업 트리를 전혀 만지지 마십시오 (그러나 <commit>모든 모드와 마찬가지로 헤드를로 재설정하십시오 ). 이것은 git status에 의해 변경된 모든 파일을 “Commit to commit”으로 남겨둔다.

-혼합

작업 트리가 아닌 색인을 재설정하고 (즉, 변경된 파일은 유지되지만 커밋으로 표시되지 않음) 업데이트되지 않은 내용을보고합니다. 이것이 기본 동작입니다.

–단단한

색인 및 작업 트리를 재설정합니다. 작업 트리에서 추적 된 파일에 대한 모든 변경 내용 <commit>은 삭제됩니다.

지금, 당신은 뭔가를 할 때 git reset HEAD– 당신이 실제로하고있는 것은 git reset HEAD --mixed그것을 당신이 (를 통해 인덱스를 수정 / 추가 파일을 추가 시작하기 전의 상태로 인덱스 “리셋”한다 git add) 이 경우, 작업 복사본과에서를 index (또는 staging)가 동기화되었지만 재설정 후 HEAD와 인덱스가 동기화되도록했습니다.

git rm반면에 작업 디렉토리와 색인에서 파일을 제거하고 커밋하면 트리에서도 파일이 제거됩니다. git rm --cached그러나 색인에서만 파일을 제거하고 작업 사본에 보관합니다. 이 경우와 정확히 반대입니다 git add file .이 경우 HEAD와 작업 색인을 다르게 만들었습니다. HEAD에 이전에 커밋 된 파일 버전이 있기 때문에 HEAD의 내용이나 내용이 파일과 색인에서 파일을 제거했습니다. 커밋은 이제 인덱스와 트리를 동기화하고 파일이 제거됩니다.


답변

아마도 예제가 도움이 될 것입니다.

git rm --cached asd
git commit -m "the file asd is gone from the repository"

git reset HEAD -- asd
git commit -m "the file asd remains in the repository"

다른 것을 변경하지 않으면 두 번째 커밋은 실제로 아무것도하지 않습니다.


답변

git rm --cached file것이다 제거 단계에서 파일을. 즉, 커밋하면 파일이 제거됩니다. git reset HEAD -- file스테이징 영역의 파일을 HEAD 커밋에 있던 상태로 재설정합니다. 즉, 마지막 커밋 이후에 변경 한 사항을 취소합니다. 해당 변경으로 인해 파일이 새로 추가 된 경우에는 동일합니다.