낙서장이자 오답 노트이자 컨닝 페이퍼

Git을 공부해보자: Git으로 차원 넘나들기 본문

git & github

Git을 공부해보자: Git으로 차원 넘나들기

NangIn 2023. 11. 15. 15:53
인프런에서 "제대로 파는 Git & GitHub - by 얄코"를 보고 정리한 내용입니다!

Branch란?

여러 작업들을 하나의 프로젝트 폴더에서 진행할 수 있도록 해준다.

 

  • 프로젝트를 하나 이상의 모습으로 관리할 수 있음

    • 예) 실배포용, 테스트 서버용, 새로운 시도용
  • 여러 작업들을 각각 독립적으로 진행할 수 있음

    • 예) 신기능 1, 신기능 2, 코드개선, 긴급 수정
    • 각각의 차원에서 작업한 뒤 확정된 것을 메인 차원에 통합

 

브랜치 생성/이동/삭제하기

브랜치 생성

git branch (새 브랜치명)

브랜치 목록 확인

git branch

브랜치 이동

git switch (브랜치명)

브랜치 생성과 동시에 이동하기

git switch -c (새 브랜치명)

브랜치 삭제하기

git branch -d (삭제할 브랜치명)

브랜치 강제 삭제

지워질 브랜치에만 있는 내용의 커밋이 있을 경우, 즉 다른 브랜치로 가져오지 않은 내용이 있는 브랜치를 지울 때는 -d대신 -D로 강제 삭제해야 한다.

git branch -D (강제삭제할 브랜치명)

브랜치 이름 바꾸기

git branch -m (기존 브랜치명) (새 브랜치명)

 

서로 다른 작업하기

add-coach 브랜치와 new-teams 브랜치를 추가하고 각각의 브랜치에서 다른 작업을 진행했다. 그 결과 브랜치 별 파일의 내용이 달라졌고 각각의 브랜치가 서로 뻗어 나온 것을 볼 수 있다.

 

💡참고사항

git log는 위치한 브랜치에서의 내역만 볼 수 있다. 아래 명령어를 입력하면 여러 브랜치의 내역을 볼 수 있다.

git log --all --decorate --oneline --graph

 

branch를 합치는 두 가지 방법

  • merge: 두 브랜치를 한 커밋에 이어 붙인다.

    • 브랜치 사용 내역을 남길 필요가 있을 때 적합한 방식이다.
  • rebase: 브랜치를 다른 브랜치에 옮겨 이어 붙인다.

    • 한 줄로 깔끔히 정리된 내역을 유지하기 원할 때 적합하다.
    • 이미 팀원과 공유된 커밋들에 대해서는 사용하지 않는 것이 좋다.

merge vs rebase

branch 합치기

merge로 합치기

add-coach 브랜치를 main 브랜치로 merge

 

1. main 브랜치로 이동

 

2. 아래의 명령어로 병합

git merge add-coach

3. 병합된 브랜치 삭제

 

💡 참고사항

merge도 하나의 커밋이기 때문에 reset으로 되돌리기 가능하다. merge 하기 전 해당 브랜치의 마지막 시점으로 reset 하면 된다.

rebase로 합치기

new-teams 브랜치를 main 브랜치로 rebase

 

1. new-teams 브랜치로 이동(merge와 반대)

 

2. 아래의 명령어로 병합

git rebase main

병합 후 트리를 확인하면 main 브랜치가 뒤처져 있는 상황이다.

 

3. main 브랜치로 이동 후 아래 명령어로 new-teams의 시점으로 fast-forward 한다.

git merge new-teams

4. new-teams 브랜치 삭제

 

 

충돌 해결하기

conflict-1, conflict-2 브랜치 생성 후, 충돌 상황이 발생했다.

merge 충돌 해결하기

git merge conflict-1로 병합을 시도하면 충돌 발생

 

1. 오류 메시지, git status,VS Code에서 충돌 부분 확인

 

2. 충돌 부분 수정한 뒤 git add, git commit으로 병합 완료

 

당장 충돌 해결이 어려울 경우 아래 명령어로 merge 중단

git merge --abort

rebase 충돌 해결하기

한 번에 충돌이 해결되는 merge와 달리 rebase는 브랜치 안에 있는 모든 커밋마다 충돌 과정을 차례로 해결해 줘야 된다.

 

conflict-2에서 git rebase main로 리베이스 시도하면 충돌 발생

 

1. 오류 메시지, git status,VS Code에서 충돌 부분 확인

 

2. 충돌 부분 수정한 뒤 git add

 

3. 아래 명령어로 계속(브랜치 안에 있는 모든 커밋마다 충돌 과정을 해결해야 하기 때문)

git rebase --continue

4. 충돌이 모두 해결될 때까지 2번 하고 3번 반복

 

5. 브랜치 삭제

 

당장 충돌 해결이 어려울 경우 아래 명령어로 rebase 중단

git rebase --abort