예를 들어 트리, 인덱스 및 작업 복사본과 같이 파일이있을 수있는 위치는 세 곳입니다. 폴더에 파일을 추가하면 작업 사본에 파일이 추가됩니다.
같은 일을 할 때 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
는git diff
diff가 표시되지 않지만git diff --cached
여전히 캐시되어있는 것처럼 diff가 표시됩니다. 는git status
하지만 인으로 파일을 보여줍니다Untracked
. 일관성이없는 것 같습니다.