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 커밋에 있던 상태로 재설정합니다. 즉, 마지막 커밋 이후에 변경 한 사항을 취소합니다. 해당 변경으로 인해 파일이 새로 추가 된 경우에는 동일합니다.