HEAD : 어떤 커밋 하나를 가리킴

branch : 하나의 코드 관리 흐름

사실 branch도 HEAD처럼 어떤 커밋 하나를 가리키는 존재이다. (이것을 포인터라고 부른다.)

git에서 커밋은 이전 커밋에 대한 정보를 가지고 있다.

그래서 master(혹은 main) 포인터가 가장 최신의 커밋만 가리키고 있다고 해도 그 이전 커밋으로 하나씩 거슬러 올라갈 수 있기 때문에 어떻게 프로젝트가 변해왔는지 추적할 수 있다.

그래서 branch가 어떤 코드의 관리 흐름이라는 개념이 성립되는 것이다.

HEAD 역시 어떤 커밋을 가리키는 존재로 포인터이다.  HEAD가 가리키는 커밋의 내용대로 워킹 디렉토리의 내용물이 바뀐다. 하지만 정확하게 말하자면 HEAD는 커밋을 직접적으로 가리키지 않는다. HEAD는 branch를 가리킬 뿐이다.

프리미엄이라는 브랜치를 새로 만들고 git checkout premium으로 HEAD를 premium으로 맞춰줬다. 이 상태에서 다른 커밋을 만들면

HEAD가 가리키던 프리미엄 브랜치가 새로운 커밋을 가리킨다. 이 상태에서 마스터 브랜치로 체크아웃하면 HEAD는 다시 master로 이동한다.

그럼 HEAD 입장에선 다섯번째 커밋을 가리키는것이고 다섯번째 커밋의 내용대로 워킹 디렉토리 내용도 변하게 된다.

위 상태에서 또 새로운 커밋을 만들면 커밋 히스토리의 흐름이 갈라진다 (분기한다)

이렇게 쭉 커밋을 하다가 프리미엄 브랜치와 마스터 브랜치를 머지하게 되면 새로운 커밋을 만들어주는데 이 때 커밋을 머지 커밋이라고 한다.

머지의 뜻

 

'코린이 개념잡기 > GIT' 카테고리의 다른 글

Git Flow 브랜치 전략  (0) 2024.12.13
Git branch merge 방법  (0) 2024.12.13
branch  (0) 2024.12.09
커밋 다루기  (0) 2024.12.08
커밋 메시지 작성하기  (1) 2024.12.08

git log 커밋 히스토리를 출력
git log --pretty=oneline --pretty 옵션을 사용하면 커밋 히스토리를 다양한 방식으로 출력할 수 있다. --pretty 옵션에 oneline이라는 값을 주면 커밋 하나당 한 줄씩 출력해준다.
git show [커밋 아이디] 특정 커밋에서 어떤 변경사항이 있었는지 확인
git commit --amend 최신 커밋을 다시 수정해서 새로운 커밋으로 만듦
git config alias.[별명] [커맨드] 길이가 긴 커맨드에 별명을 붙여서 이후로 별명으로 해당 커맨드를 실행할 수 있도록 설정
예시) git config alias.history 'log --pretty=oneline' : git history라고 입력하면 log --pretty=oneline가 실행된다.
git diff [커밋 A의 아이디] [커밋 B의 아이디] 두 커밋 간의 차이 비교
git reset [옵션] [커밋 아이디] 과거 커밋으로 아예 돌아가고 싶을 때
옵션에 따라 하는 작업이 달라진다.(옵션을 생략하면 --mixed 옵션이 적용)
(1) HEAD가 특정 커밋을 가리키도록 이동시킴(--soft는 여기까지 수행)
(2) staging area도 특정 커밋처럼 리셋(--mixed는 여기까지 수행)
(3) working directory도 특정 커밋처럼 리셋(--hard는 여기까지 수행)
그리고 이때 커밋 아이디 대신 HEAD의 위치를 기준으로 한 표기법
(예 : HEAD^ : 현재 HEAD가 가리키고 있는 커밋의 바로 이전 커밋,
HEAD~3 : 현재 HEAD가 가리키는 커밋보다 3단계 전에 있는 커밋)을 사용해도 된다.
git tag [태그 이름] [커밋 아이디]
/ git show [태그이름]
특정 커밋에 태그를 붙임 (보통 프로젝트에서 주요 버전의 시작점이 되는 커밋에 태그를 단다.)
git rest [옵션] eea5 working direcrory staging area repository
--soft 안 바뀜 안 바뀜 HEAD가 eea5 커밋 가리킴
--mixed 안 바뀜 eea5 커밋처럼 바뀜 HEAD가 eea5 커밋 가리킴
--hard eea5 커밋처럼 바뀜 eea5 커밋처럼 바뀜 HEAD가 eea5 커밋 가리킴

git reset 시 옵션들에 대한 설명

** 커밋 아이디는 앞에 4자리 까지만 입력해줘도 괜찮다.
** HEAD  : 어떤 커밋 하나를 가리킨다. 보통 가장 최근에 한 커밋을 가리키고, 매번 더 새로운 커밋을 가리킨다.
** working directory는 HEAD가 가리키는 커밋에 다라 다르게 구성된다.
** HEAD가 최신 커밋보다 더 이전의 커밋을 가리키면 working directory의 내부도 과거 커밋의 모습대로 바뀌게 된다.
**staging area에 있던 것들은 커밋을 하더라도 그것과 상관없이 계속 남아있다.
** --hard 옵션은 별로 권장되진 않는다. 커밋 이후 워킹 디렉토리에서 했던 내용들이 다 사라지고 복구를 할 수 없기 때문이다.

'코린이 개념잡기 > GIT' 카테고리의 다른 글

HEAD와 branch의 관계  (0) 2024.12.09
branch  (0) 2024.12.09
커밋 메시지 작성하기  (1) 2024.12.08
push와 pull  (0) 2024.12.08
staging area에서 파일 제거하기  (0) 2024.12.08

+ Recent posts