Git

[중앙정보처리학원] git* Branch 활용하기

해보구 2024. 3. 5. 14:34

Branch

일반적으로 branch 는 main 또는 master라는 이름의 기본 branch 이다. 이는 프로젝트가 시작될 때 자동으로 생성된다.

마치 중간 save 같은것, 아주 작은 단위로 branch를 나누어 버전을 간편히 옮겨 수정 할 수있다. 따라서 안정성이 확보된다.

 

 

 

 

git의 head란?

현재 작업 중인 커밋을 가리킨다. 즉, '현재 Git이 어디를 바라보고 있는지'를 나타낸다. 기본적으로 작업트리의 최상단에 위치한다.

 

브랜치 생성하기 

  • git branch <branch-name> 

브랜치 이동하기

  • git switch <branch-name> 

브랜치 생성하면서 이동하기

  • git switch -c <branch-name>

터미널에서 모든 브랜치 정리하여 보기

  • git log --oneline --all --graph

브랜치 삭제하기

  • git branch -d <branch-name>

모든 브랜치 이름들만 보기

  • git branch -a -all

 

 

주의할 것들

변경사항이 있으면 바로바로 커밋하기!

너무 많은 변경사항을 하나의 커밋에 포함하기

main 브랜치에서 작업하기 ( master 또는 main은 안정적인 버전을 유지하는 브랜치 )

 

 

merge (병합)

 

  • 3- way merge (기능 브랜치 병합)
  • Fast forward merge (빠른 포워드 병합)

필요한 이유 : 안정성 가독성 효율성

 

 

Fast Forwar Merge

 

merge하려는 해당 커밋중 하나의 브랜치에만 변경사항이 있을시 단순히 포인터를 옮겨감으로 된다.

 

 

3 way merge

merge 하려는 커밋에 포함된 기능을 하나로 통합해버린다

 

 

 

 

 

3 way merge의 간단한 예시

 

1. 브랜치 feature 를 만들어서 작업을 시작한다 (C0는 커밋을 나타냅니다.)

feature (HEAD)   C0 - C1 - C2

 

 

2. feature 브랜치에서 작업을 하던 중, main 브랜치에서도 수정이 발생

feature          C0 - C1 - C2
               /
main (HEAD)   C0 - C3

 

3. 이 상태에서 feature 브랜치를 main 브랜치로 병합하려고 한다. Git은 C1 과 C3 에서 변경된 사항을 분석하고, 이를 적용하여 새로운 커밋 C4  를 생성. 이것이 바로 3-Way Merge

feature          C0 - C1 - C2
               /              \
main (HEAD)   C0 - C3 - - - -  C4

 

 

3-Way Merge는 두 브랜치가 공통 조상에서 다르게 발전한 경우에 사용하는 병합 전략이다.

 

 

 

더 간단한 예시

master - 1번 - 2번 

이라고 했을 때. 1번와 마스터를 합치려면 마스터로 스위치하고 마스터가 옮겨가면 됨.

2번으로 갈때도 마스터에서 옮겨가면 됨.

 

 

Git Conflict란?

Git 충돌(conflict)은 두 개 이상의 변경 사항이 Git의 병합 과정에서 서로 충돌할 때 발생하는 문제. 주로 여러 사람이 동시에 같은 파일의 같은 부분을 변경했을 때 이 문제가 발생함

 

충돌을 자동으로 해결할 수없어 사용자에게 수정을 요청함.   (((예시)))

<<<<<<< HEAD
The quick brown fox...
=======
The quick blue fox...
>>>>>>> new_branch

 

충돌이 해결되면, 충돌 마커를 모두 제거한다. (<<<<<<<, =======, >>>>>>>).

add 후 커밋하면 끝!