git branch/ merge 기본 개념

25gStroy·2022년 1월 24일

git

목록 보기
4/8

main branch

작업을 할때 가장 중앙에서 버전을관리하는 브렌치 이다. 그래서 해당 branch에 있는 버전으로 최종 배포를 한다.
근데 작업을 하다보면 해당영역에 영향을 받지 않고 새로운 가지에 빼서 다른 곳에서 기능을 만들어야 할때가 있다.
그럴땐 새로운 브랜치를 만들면 된다.

브랜치 명령어

  • git branch
    • 브랜치 리스트 보기
  • git branch (브랜치명)
    • 브랜치 생성
  • git checkout (브랜치명)
    • 해당 브랜치로 해더 이동

공통 조상

  • main에서 새로운 브렌치가 뻗어나온 시점

fast-forward merge

가장 쉬운병합 방법이다.
main에서 가지가 뻗어진 시점부터 main에는 더이상 커밋이 일어나지 않은 상태고 가지가 뻗어진 부분에서만 개발을 하다가 그 부분이 개발이 끝나서 merge를 하게 되면 가지가 뻗어나간 시점에 main이 형상이 같을때 사용.

3-way merge

병합을 할때 가지 브렌치에서 작업을 다 끝내고 합치는데

  • 가지가 뻗어진 시점 (main과 가지 브렌치의 공통조상)
  • main브렌치의 최종버전이 커밋된 시점
  • 가지브렌치의 최정버진이 커밋된 시점
    이 세가지 지점을 비교해서 직접 merge를 진행 하는 것이다.

Merge 충돌 해결

시나리오
메인에서 회원가입->로그인 개발후 topic브랜치 생성-> main에서 로그인파일수정(체크박스생성)-> 실수로 topic에서도 로그인파일 수정(라디오버튼 생성)
이런 경우에는 3-way merge가 되지 않는다 왜냐하면 각자 브랜치에서 같은 파일을 수정했기 때문이다.
위 경우에 merge를 할 경우에 충돌 오류가 난다. 그래서 이럴때는 merge를 하는 사람이 체크박스를 쓸건지 라디오버튼을 쓸것인지 선택해야한다.

자기가 merge할 수 없으니 니가 선택해 라고 로그가 나온다
그리고 파일로 가보면

저렇게 돼있다. 저게 무슨말이냐면
"=" 을 기준으로 위에걸쓸꺼야 아니면 밑에걸 쓸꺼야? 하고 직접 선택해라고 물어보는것이다.
그럼 위 상황에서 체크박스를 쓰고 싶다면?

이렇게 직접 선택을 해 주고 커밋을 해줘야한다.

하지만 가장 좋은것은 충돌이 나지 않도록 잘 협업 하는것!!! 협업할때 같은파일은 웬만하면 건드리지 않기...

profile
애기 개발자

0개의 댓글