-
Git - git의 저장공간 알아보기Git 2023. 7. 21. 10:50반응형
git의 저장공간 알아보기
Working directory
- untracked: Add된 적 없는 파일(수정만 되어진 상태), ignore 된 파일(.ignore파일에 등록된 상태)
- tracked: Add된 적 있고 변경내역이 있는 파일
- git add 명령어로 Staging area로 이동
Staging area
- 커밋을 위한 준비 단계
- 예시: 작업을 위해 선택된 파일들
- git commit 명령어로 repository로 이동
staging area를 sourcetree로 확인해본다면 이와같이 단순히 수정 된 파일들을 추가해주는 것 이다.
Repository
- .git directory라고도 불림
- 커밋된 상태
상태들을 그릇들로 비교하자면 아래의 표와 같다
상태 설명 untracked 식기 세척기에 들어 가 본 적이 없거나 식기 세척기 사용이 불가(ignored)한 경우 tracked 식기세척기에 들어가 본 적이 있고 식기세척기 사용기 가능한 그릇 add 식기세척기에 넣는 행위 staging area 식기 세척기 안(에 들어간 상태) commit 세척(식기 세척기 가동) repository 세척이되어 깨끗한 상태 파일에 수정이 가해짐 그릇이 사용되어 이물질(커밋이 되지 안은 변경사항)이 묻음 working directory 세척이 되어야하는 상태 tracked가 된다는 건, Git의 관리대상에 정식으로 등록됨을 의미합니다.
새로 추가되는 파일은 반드시 add해줌으로써, 해당 파일이 tracked될 것임을 명시해야 하는 이유입니다.
파일의 삭제와 이동
git rm
- tigers.yaml를 삭제해본 뒤 git status로 살펴보기
- 파일의 삭제가 working directory에 있음
- git reset --hard로 복원
위의 케이스의 경우 해당 파일을 삭제 하고 git status로 확인해본다면 삭제한 내역이 working directory에만 존재한 상태이다. tracked된 상태로 working directory에 위치하고 있는 케이스
- git rm tigers.yaml로 삭제하고 git status로 살펴보기
- 파일의 삭제가 Staging area에 있음
- git reset --hard로 복원
이번 케이스의 경우는 rm명령어를 통해 파일을 직접 언급하여 삭제한다. 이러한 경우는 첫번째 케이스와 달리 working directory에 머무는 것이 아니라 Staging area에 머물게된다.
git mv
- tigers.yaml를 zzamtigers.yaml로 이름변경 뒤 git status로 살펴보기
- 복원 후 git mv tigers.yaml zzamtigers.yaml로 실행 뒤 비교
파일을 staging area에서 working directory로
git restore --staged (파일명)
- --staged를 빼면 working directory에서도 제거
- 예전: git reset HEAD (파일명)
앞서 살펴보았듯이 staging area는 소스트리에서 단순히 파일을 해당 영역으로 클릭 하여 올리는 것과 동일하다.
커밋을 진행하기 위해 거치는 단계일 뿐이다.
sourcetree에서는 단순히 파일을 내리기 버튼을 클릭하면 되지만 cli에서는 명령어를 사용해야한다.
git restore --staged(파일명)
해당 명령어를 사용해 staging area에 올라가있는 파일을 다시 working directory로 이동시킬 수 있다.
git restore (파일명)
working directory로 이동하기도 싫다 라고 한다면 이와같이 --staged명령어를 빼고 수행해준다.
이렇게 진행하게 된다면 해당 파일은 Repository에 마지막 커밋으로 저장되어진 상태로 돌아가게된다.
reset의 세 가지 옵션
- --soft: repository에서 staging area로 이동
- --mixed (default): repository에서 working directory로 이동
- --hard: 수정사항 완전히 삭제
예를 들어 A라는 파일에 '추가' 라는 내용을 추가하여 커밋하였다. 해당 시점을 A커밋 시점이라고 한다.
A커밋 바로 전 시점이 A- 시점이라고 가정해보자.
--mixed
우리는 지금 A라는 시점에 있지만 A-시점으로 돌아가려고한다.
git reset --mixed
--mixed는 디폴트 값이기 때문에 붙여주어도 안 붙여주어도 상관이 없다.
해당 명령어를 입력한다면, local에서는 우리가 수정했던 '추가' 의 내용은 그대로 남아있다.
그런 후에 git status를 입력하여 현재 상태를 확인해본다면
수정하였던 파일 A는 Add가 되기 전 working directory로 돌아와있는 것을 확인할 수 있다.
--soft
이번에는 soft를 활용해보자.
git reset --soft
git reset --soft (커밋 해시코드) 를 입력한다면 해당 파일은
working directory가 아닌 staging area에 위치한 상태로 돌아가게 된다.
--hard
이번에는 마지막으로 hard인다.
git reset --hard
hard를 이용한다면 working directory, staging area 그 어디에도 위치하지 않는다.
Repository의 마지막 커밋에 해당되는 내용으로 돌아가게된다.
(선택한 커밋 해시코드로 이동)
반응형'Git' 카테고리의 다른 글
Git - 커밋, 스테지징 세부화 (0) 2023.08.10 Git - HEAD 개념 및 실습 (0) 2023.07.21 Git - 소스트리(sourcetree)에서 원격 브랜치 다루기 (0) 2023.07.20 Git - github원격 저장소 사용하기 (0) 2023.07.20 Git - git push와pull (0) 2023.07.20