git branch 정복

JeongChaeJin·2021년 2월 3일
0

Git

목록 보기
9/14
post-custom-banner

브랜치 목록 확인

git branch

브랜치 생성

git branch 새로운브랜치이름

브랜치 삭제

git branch -d 브랜치_이름

  • merge 하지 않은 브랜치를 강제삭제 하려면
    git branch -D 브랜치_이름

브랜치 전환

git checkout 전환브랜치이름

  • 개인적으로 브랜치가 생성되면서 브랜치 이동이 이뤄지는 걸 추천
    git checkout -b 새로운브랜치이름

브랜치 간 비교

git log 비교브랜치(1)..비교브랜치(2)

  • diff 랑 유사

브랜치 간 코드 비교

git diff "비교브랜치(1)..비교브랜치(2)

브랜치 Flow 보기

git log --branches --graph --decorate --oneline

A 브랜치로 B 브랜치 병합

  • A <- B

    git checkout A

  • A 브랜치로 일단 이동

    git merge B

  • B 와 병합

브랜치 수련

1. master branch 가 있는 상황

2. master branch 의 코드를 수정하기 위해 issue 53 을 발행한 상황

3. master branch 의 코드를 수정해 나가는 issue 53 브랜치

4. 하필 master 브랜치의 코드를 사용하는 사용자가 버그를 제안하면서 수정중이던 작업을 멈추고 master 코드를 급하게 수정해야하는 상황 발생 - hotfix 브랜치 생성

5. 급한 코드 수정 후 hotfix 브랜치를 master와 merge 후 삭제

  • 이를 Fast-forward 라고 일컫는다. merge 하면 이런 메세지가 나옴.

6. 예전 master 브랜치의 코드 수정 작업을 진행한 issue 53 의 코드 수정 작업이 끝남. 이제 master와 병합하고자함.

7. Merge Commit

  • 이때는 master 가 issue 53 이 수정하려했던 브랜치와 달라져있다. 따라서 hotfix 된 master 브랜치와 issue 53의 브랜치 를 공통 조상으로하는 Commit 을 하나 만들어서 여기서 병합한다.
  • 이것을 Merge Commit 이라한다.

git branch 시나리오
이 정리한 시나리오는 한번 읽어보면서 실습을 하는 것을 추천한다. 그러면 브랜치를 사용하는 방법을 아주 잘 이해할 수 있다.

브랜치 충돌

  • 이는 위 시나리오처럼 자동으로 병합할 수 없는 경우를 다룬다.
  • 충돌을 실험하기 위해 branch test1, test2 를 만들고 file1.txt 파일만 서로 다른내용으로 바꾸었다.
  • 그런 후 master 브랜치에 병합하는 과정을 거치면서 test1, test2 를 master 에 병합한다.
  • file1.txt 파일의 내용이 다르기 떄문에 충돌이 난다 !

  • 어떻게 해결할 것인가 ?

    vi file1.txt

  • 병합 과정에서 git 은 '<<<< HEAD =====' 이런 식으로 충돌난 내용을 보여준다.
  • <<<< HEAD 부터 ===== 사이 구간이 현재 체크 아웃 된 파일의 내용이고, ===== 부터 >>>>>test1 까지가 병합하려는 대상인 test1 브랜치 이다.
    • 나는 master 브랜치에 test2 를 먼저 병합하고 test1 을 병합하는 과정에서 충돌이 난 상황이다.
  • 이 둘중 어떤 브랜치의 내용이 확실히 필요한지를 판가름하여 필요없는 코드는 지워주면 된다.
    나는 test1의 내용을 선택 !
    • test1 의 내용 선택
    • test1 내용 빼곤 다 지워 주면됨 ===== 부터 위쪽 <<<HEAD 까지
  • 그 이후 master 브랜치는 add 후 commit 을 진행해주면된다.
  • merge 과정 중 confilct는 이러한 Flow 로 해결을 자주한다.
  • 애초에 이런 일이 없게 지속적인 체크가 필요하다.
profile
OnePunchLotto
post-custom-banner

0개의 댓글