[Git] CLI로 checkout 하기

2022. 4. 22. 14:05Git

1. CLI를 이용한 브랜치 체크아웃 및 새 커밋 생성

브랜치 만들기

(main) $ git checkout feat/c # 브랜치 체크아웃

(feat/c) $ git branch # 현재 브랜치 확인

(feat/c) $ git log --oneline -n5 # HEAD 변경 확인

(feat/c) $ cat ch06_git-playground/file1.txt # 파일 내용 확인

(feat/c) $ echo "third - my branch" >> ch06_git-playground/file1.txt # 파일에 내용 추가

(feat/c) $ cat ch06_git-playground/file1.txt # 파일 내용 확인

(feat/c) $ git status # 스테이지 상태 확인

(feat/c) $ git add ch06_git-playground/file1.txt # 스테이지에 변경사항 추가

(feat/c) $ git commit -m "update file1.txt" # 커밋

(feat/c) $ git log --oneline -n5 # 변경된 브랜치 확인

 

위 결과를 보면 HEAD와 feat/c 브랜치가 f33e186 커밋을 가리키는 볼수 있고 main 브랜치는 62d878f 커밋을 가리킨 것을 볼 수 있습니다.

 

새로운 커밋 생성시

  1. 새로 커밋을 생성하면 그 커밋의 부모는 언제나 이전 HEAD 커밋입니다.
  2. 커밋이 생성되면 HEAD는 새로운 커밋으로 갱신됨
  3. HEAD가 가리키는 브랜치도 HEAD와 함께 새로운 커밋을 가리킴

 

2. CLI을 이용한 빨리 감기(Fast-forword) 병합

커밋 후 빨리 감기 병합

 

(feat/c) ch06_git-playground $ echo "fourth - my branch" >> file1.txt # 파일에 내용 추가 
(feat/c) ch06_git-playground $ cat file1.txt # 파일 내용 확인

(feat/c) ch06_git-playground $ git status # 스테이지 상태 확인

(feat/c) ch06_git-playground $ git add file1.txt # 스테이지에 추가
(feat/c) ch06_git-playground $ git commit -m "update file1.txt" # 신규 커밋 추가

(feat/c) ch06_git-playground $ git log --oneline --graph -n5 # 커밋 로그 보기

(feat/c) ch06_git-playground $ git checkout main # 메인 브랜치으로 이동

(main)   ch06_git-playground $ cat file1.txt # 파일이 이전으로 돌아갔는지 확인

(main)   ch06_git-playground $ git merge feat/c # 병합, fast-forward

(main)   ch06_git-playground $ git log --oneline --graph -n5 # 커밋 로그 보기

(main)   ch06_git-playground $ cat file1.txt # 파일 내용 확인

 

2. reset --hard로 브랜치 되돌리기

git reset --hard <이동할 커밋 체크섬>
  • 현재 브랜치를 지정한 커밋으로 이동시킴
  • 작업 폴더의 내용도 함께 변경됨

 

HEAD~, HEAD^

HEAD~<숫자>
- HEAD~은 헤드의 부모 커밋
- HEAD~2는 헤드의 할아버지 커밋을 의미함.
- HEAD~n은 n번째 위쪽 조상이라는 의미

HEAD^<숫자>
- HEAD^은 똑같이 부모 커밋
- HEAD^2는 두번째 부모를 가르킴
- 병합커밋처럼 부모가 둘 이상인 커밋에서만 의미가 있음

 

현재 브랜치를 두 단계 이전으로 되돌리기

$ git reset --hard HEAD~2 # 브랜치 되돌리기

$ git log --oneline --all # 로그 확인

git reset --hard 명령어는 다음과 같은 명령을 한꺼번에 수행함

$ git checkout HEAD~2
$ git branch -f main
$ git checkout main

 

3. 빨리 감기 병합 상황에서 rebase 해보기

rebase, push, branch 제거

(main) $ git checkout feat/c # 브랜치 변경

(feat/c) $ git rebase main # rebase 시도

(feat/c) $ git log --oneline -n5 # 로그 확인, 변한게 없음

(feat/c) $ git checkout main # 다시 main 브랜치 이동

(main)   $ git rebase feat/c # 반대 방향에서 rebase

(main)   $ git log --oneline -n5 # 로그 확인, 빨리 감기 병합이 되어 있음

(main)   $ git push origin main # 푸시

(main)   $ git branch -d feat/c # 브랜치 삭제

(main)   $ git log --oneline -n5 # 로그 확인

 

4. 배포 버전에 태깅하기

git tag -a -m <간단한 메시지> <태그 이름> [브랜치 또는 체크섬]
-a로 주석있는 태그를 생성함
메시지와 태그 이름은 필수이며 브랜치 이름을 생략하면 HEAD에 태그를 생성함

git push <원격저장소 별명> <태그 이름>
원격저장소에 태그를 업로드함

 

tag 작성

(main) $ git log --oneline -n5 # 로그 확인

(main) $ git tag -a -m "첫 번째 태그 생성" v0.1 # 주석 있는 태그 작성

(main) $ git log --oneline -n5 # 태그 생성 확인

(main) $ git push origin v0.1 # 태그 푸시

References

source code : https://github.com/yonghwankim-dev/git_study
팀 개발을 위한 Git Github 시작하기, 정호영 진유림 저

'Git' 카테고리의 다른 글

[Git] CLI로 rebase 수행  (0) 2022.04.22
[Git] CLI로 3-way 병합하기  (0) 2022.04.22
[Git] CLI로 브랜치 생성하기  (0) 2022.04.22
[Git] 원격저장소 관련 CLI 명령어  (0) 2022.04.22
[Git] Git 기본 CLI 명령어  (0) 2022.04.22