[Git/GitHub] Chapter 4 브랜치 생성 및 조작

SoyoungLee·2021년 5월 10일
0

Git/GitHub

목록 보기
5/7
post-thumbnail

Chapter 4 브랜치 생성 및 조작

CLI로 브랜치 생성하기

  1. 커밋하면 커밋 객체가 생성 됨
    -> 부모 커밋에 대한 참조와 실제 커밋 구성하는 파일 객체가 들어 있음
  2. 브랜치는 논리적으로는 어떤 커밋과 그 조상들을 묶어서 뜻하지만, 사실은 단순히 커밋 객체 하나를 가리킬 뿐.

브랜치 생성하기

  • $ git branch [-v]
    : 로컬 저장소의 브랜치 목록 확인.
    -v 옵션으로 마지막 커밋도 함께 표시
  • $ git branch [-f] <브랜치이름> [커밋체크섬]
    : 새로운 브랜치 생성.
    커밋체크섬 값 안주면 HEAD로부터 브랜치 생성.
    이미 있는 브랜치를 다른 커밋으로 옮기고 싶을 때 옵션 필수
  • $ git branch -r[v]
    : 원격 저장소에 있는 브랜치 확인.
    -v로 커밋 요약 볼 수 있음
  • $ git checkout <브랜치이름>
    : 특정 브랜치로 체크아웃.
  • $ git checkout -b <브랜치이름> <커밋체크섬>
    : 특정 커밋에서 브랜치 생성하고 동시에 체크아웃
  • $ git merge <대상브랜치>
    : 현재 브랜치와 대상 브랜치 병합
  • $ git rebase <대상브랜치>
    : 내 브랜치의 커밋들을 대상 브랜치에 재배치
  • $ git branch -d
    <브랜치 이름>

    : 특정 브랜치 삭제.HEAD 브랜치나 병합안된건 삭제 불가
  • $ git branch -D
    <브랜치 이름>

    : 브랜치 강제 삭제

HEAD 기억할 점
1. HEAD는 현재 작업 중인 브랜치를 가리킴
2. 브랜치는 커밋을 가리키므로 HEAD도 커밋을 가리킴
3. 결국 HEAD는 현재 작업 중인 브랜치의 최근 커밋을 가리킴

revert를 사용해서 커밋을 되돌려야 하는 경우
C1 <- F1 <- C2 <- F2 <- C3 (master)
에서 (F1,F2) 기능 취소하려면
git revert F2
git revert F1
이전의 히스토리를 변경하지 않고도 여러 커밋 내용을 작업 이전 상태로 되돌릴 수 있음 (최신 커밋부터 취소하는 것이 좋음)
C1 <- F1 <- C2 <- F2 <- C3 <- RF2 <-RF1 (master)

CLI로 checkout 하기

git checkout <커밋체크섬> 을 하면?
HEAD와 브랜치가 분리되는 Detached HEAD 발생.
여기에서 커밋 생성가능하지만 다른 브랜치로 체크아웃하면 Detached HEAD 커밋들 다 사라짐.

redet --hard로 브랜치 되돌리기

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

  • $ HEAD~<숫자>
    : HEAD~n은 n번째 위쪽 조상.
    HEAD~는 헤드의 부모 커밋, HEAD~2는 헤드의 할아버지 커밋.

  • $ HEAD^<숫자>
    : HEAD^n은 부모의 조상, HEAD^2는 두번째 부모.
    병합 커밋처럼 부모가 둘 이상인 커밋에서만 의미가 있음.

# 2단계 이전 커밋으로 되돌리기
git reset --hard HEAD~2 
git log --oneline --all # 로그 확인

reset과 checkout 차이
$ git checkout HEAD~2
-> [master] 브랜치는 그자리에 있고 HEAD만 옮겨짐
( 소스트리에서 더블클릭해서 체크아웃 한것과 같은 detached HEAD )
-> reset --hard 명령은 아래의 세 명령을 한번에 수행하는 명령

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

배포 버전에 태깅하기

  • $ git tag -a -m <간단한 메시지> <태그이름> [브랜치 또는 체크섬]
    : -a로 주석있는(annotated) 태그를 생성.
    메시지와 태그 이름 필수, 브랜치 이름 생략시 HEAD에 태크 생성
  • $ git push <원격저장소 별명> <태그 이름>
    : 원격 저장소에 태그를 업로드
$ git log --oneline # 로그 확인
$ git tag -a -m "첫 번째 태그 생성" v0.1 # 주석있는 태그 작성
$ git log --oneline # 태그 생성 확인
$ git push origin v0.1 # 태그 푸시

switch / restore

  • $ git switch <브랜치이름>
    : $ git checkout <브랜치이름> 과 동일한 명령. 브랜치 변경
  • $ git switch -c <브랜치이름>
    : $ git checkout -b <브랜치이름> 과 동일한 명령. 새로운 브랜치 생성 후 변경
  • $ git restore : 파일 내용 복구

CLI로 3-way 병합하기

profile
Android Developer..+ iOS 슬쩍 🌱 ✏️끄적끄적,,개인 기록용 👩🏻‍💻

0개의 댓글