본문 바로가기

Dev/Git&GitHub

[Git] Head, Checkout, Detached / Attached, Branch

Head

현재 작업하고 있는 워킹 디렉토리가 어떤 버전과 같은지 가리키는 지시어

Checkout

head의 버전을 바꿔주는 지시어

Head 이동하기(시간여행하기)

이전 버전의 프로젝트 볼 수 있는 방법

Head가 Master를 가리키도록 만들기(시간여행하고 돌아오기)

1. master에서 오른쪽 버튼 > Checkout Branch

2. head -> master 로 변경됨

Detached / Attached

1. 커밋 메시지에서 Checkout을 하면 master가 detached 상태가 됨

master의 border가 사라진 모습

2. 저 상태에서 문서 수정

Uncommitted Changes 문구가 뜬다

3. 수정한 문서 commit

  • master와 head가 가리키는 부분이 달라짐
  • 커밋을 하기 위해서는 head는 master를 가리켜야 함

4. head -> master

head->master를 하기 위해서는 master에서 Checkout Branch

modify work2.txt 커밋이 사라져버림~!!

5. 결론

  • 그렇게 분리해서 쓰다가 다시 원래대로 돌아오려면 chekout master를 하면 된다
  • 이때 임시로 작업했던 것들은 git log에는 단순히 남지 않지만 그래도 볼 수 있는 방법은 있다!

6. 그래서 detached와 attached가 뭐냐?

  • Detached Head
    • HEAD가 브랜치를 통해 간접적으로 commit을 가리키지 않고, 직접 커밋을 가리키는 것
    • 실험적인 상태로 보고있을 때 Detached로 만듦
  • Attached Head
    • HEAD -> 브랜치 -> 특정 커밋 순서로 commit을 가리키는 상태
  • 참고사이트

Branch

  • 여러 개의 작업을 동시에 할 수 있음
  • head를 왔다갔다 하면서 이전 버전 내역의 프로젝트를 볼 수 있음!

만드는 방법

원하는 버전에서 > 오른쪽 버튼 > Create Branch...

Reset current branch to this Commit

master의 첫번째 커밋한 버전에서 오른쪽 버튼 > Reset current branch to this Commit

실험하다가 실패했을 때 없애는 방법으로 사용

브랜치 합치기(협업하기)

master에 exp 결합하는 방법

현재 상황

1. 병합할 브랜치로 checkout하기

2. 병합될 브랜치 > 오른쪽 버튼 > Merge

master가 exp를 결합함

3. 공통의 부모 버전이 생긴다

master와 exp를 부모로 하는 버전이 생긴다

4. 새로 생긴 버전을 마스터3으로 옮기기

다시 결합해보는 방법..

참고 git log 명령어

# 한 줄로 다보기
git log --oneline --all

# 한 줄로 보기
git log --oneline

# 상세하게 보기
git log

# master가 commitId에 해당하는 버전을 가리킴
git reset --hard (commitId)

# head가 원하는 commitId에 해당하는 버전을 가리킴
git checkout (commitId)

 

반응형