경주장

생활코딩(Egoing) - Git3 CLI branch & conflict 본문

Git,Github

생활코딩(Egoing) - Git3 CLI branch & conflict

달리는치타 2021. 12. 24. 17:28

1. Branch란

독립적으로 어떤 작업을 진행하기 위한 개념입니다.

커밋 사이를 가볍게 이동할 수 있는 어떤 포인터 같은 것

2. 실습준비

git log

3. 브랜치의 기본 사용법

git branch

git branch 브랜치의 종류를 출력

git log --graph --oneline

Branch 파기

git branch apple
git branch google
git branch ms

=>

 Branch 생성 확인

Master Branch에서 커밋

=>

Apple Commit

apple.txt는 별도로 작성

git log

ms commit 후 git log

apple과 master에서는 각각 한번씩 commit을 더 했습니다.

:

현재 상태 :

branch, commit diagram

4. 병합

commit 만 그려서 목표 상태를 나타내면 아래와 같습니다.

즉 apple 브랜치를 master 브랜치에 병합 하는 것 입니다.

현재 브랜치의 상태를 살펴보겠습니다. - 강의의 같은 파일 같은 부분(4.4)에 해당되는 실습입니다.

master branch, apple branch

apple 브랜치의 내용을 master 브랜치로 합치기

Step 1 : Master Branch의 상태가 된다.

Step 2 : 땡겨오고 싶은 Branch (apple)를 merge 명령어로 지정

work.txt의 4번째 line에 대해서 충돌이 발생하였다.

branch를 나타내는 하늘색 괄호 부분이 (master|MERGING)이라고 바뀌고 충돌이 없는 부분에 대한 병합이 이루어졌다.

git status

work.txt라는 파일의 같은 부분이 변경되었으며 unmerged 되었다고 알려준다.

충돌이 발생한 Line 4부분이 아래와 같이 변하였다.

vs code 캡쳐

vs 코드는 line 3과 4사이 옵션을 통해 쉽게 (Current Change)와 (Incoming Change)중 어떤 것을 선택 할 지 정할 수 있게 도와준다.

Accept Both Change를 선택하고 저장

git에게 충돌을 해결하였음을 알려준다.

충돌 해결
후 커밋

Git의 환상적인 기능인 충돌을 해결하는 방식을 살펴보았다!

5. 3 WAY MERGE

git이 충돌을 감지하는 방식

Here BASE There 2Way(Here+There) 3Way
A A A A A
H B B ? B
C C T ? T
H D T ? ?

BASE를 기준으로 3 WAY MERGE를 하면 좀 더 많은 것을 자동화 할 수 있다. 변경이 일어난 부분을 더 많이 감지

 

6. 외부도구를 이용한 병합

실습 환경 : 

git log

위의 표와 같은 변경을 work.txt에 가지고 있으며 there을 here에 merege tool을 활용하여 병합시켜 보자!

 

 

add도 자동으로 해준다!

 

커밋 후 병합 결과

 

7. 수업을 마치며

관심을 가져 볼 만한 키워드 

  • git workflow, git flow - 모범사례
  • Cherry Pick 
  • Rebase

 

인생에는 버전만있고 리셋도없고 브랜치는 더더욱 없다...

 

 

부록 1. HEAD, BRANCH, COMMIT & CHECKOUT

 

  • (현재 저장소의 버전) : Head의 Branch의 version
  • Branch를 새로 파면 해당 Branch는 (현재 저장소의 버전)을 버전으로 가진다.
  • Checkout은 Head의 Branch를 변경하는 것
  • Version을 새로파면 Head의 Branch의 version이 업데이트 된다.

부록 2. Checkout vs Reset

Checkout master : HEAD -> master : 헤드를 바꾸는 것

Reset master : google -> 2 : 브랜치를 바꾸는 것 (삭제의 느낌)

Reset 1 : google -> 1