GIT3 - CLI 브랜치 & 충돌

강유리·2023년 4월 9일
0

Git

목록 보기
5/7

Branch

서로 다른 작업이 추가된 복제본이 만들어지는데, 이렇게 되면 여러 개의 디렉토리를 관리하게 되는 것이기 때문에 비효율적

같은 뿌리에서 나왔지만 서로 다른 역사를 써 나간다

버전을 한 줄로 나오게 하기

브랜치 만들기

저장소를 만드는 순간 master라는 기본 브랜치 위에서 작업을 하고 있는 것임

브랜치 새로 만들기

apple이라는 브랜치는 우리가 master 브랜치에서 만든 브랜치이므로 work3이라는 공통점을 가지고 있다.

여러 개의 브랜치 만들기

새로운 버전을 만든 후

apple 브랜치로 돌아가면

우리의 브랜치는 apple 시대로 돌아감

work.txt 파일 수정, apple.txt 파일 생성

우리는 현재 애플에 있다.

apple work 4 버전과 work 4 버전은 work 3의 자식들이고 work 3가 부모임을 그래프로 표현해주고 있다.

실습 한 번 더 실행

현재 우리는 google에 있으며, google의 부모는 work 3이다.

work3는 모두의 부모

현재 우리는 ms에 있으며, ms의 부모는 work 3이다.


merge

계속해서 업데이트한 commit들이 (버전) 생성됨

해당 버전들은 기본적으로 master branch에 속해 있음

해당 상태에서 또다른 branch들을 만들고 해당 branch 내에서 새로운 버전으로 갱신한다

또 다른 branch와 master 브랜치를 병합하여 새로운 버전을 만들고자 할 때 merge를 사용하는 것이다.

두 branch의 공통의 조상은 base 라고 부른다.

실습

1. 서로 다른 파일 병합

  1. manual-merge 라는 디렉토리 만들기

  2. 해당 디렉토리 안에서 work.txt 파일 만들기 내용은 1

  3. commit 하기

  4. o2 라는 새로운 브랜치 만들기 ( git branch o2)

  5. 해당 브랜치 안에 master.txt 파일 만들기 내용은 master work 2

  6. commit 하기

  7. o2 브랜치로 옮기기 git checkout o2

  8. o2.txt 파일 만들기

  9. commit 하기

  10. 병합하기

master에 o2 브랜치를 병합하기 o2 → 브랜치의 내용을 master 브랜치로

  • 우선 master 브랜치의 상태가 되어야 함

  • merge 명령을 통해 통합하고자 하는 브랜치 명 입력

명령어 git merge o2

  • 새로운 버전이 자동으로 만들어짐

o2 브랜치를 merge 하면서 생긴 새로운 브랜치

우리의 마스터는 새로운 브랜치를 가리키고 있고, 새로운 커밋은 마스터 이전 커밋을 공통의 조상으로 함

내가 병합했던 브랜치를 취소하고 여러 번 반복해보기

git reset —hard 아이디

2. 파일명이 같은 파일을 수정 후 병합하기 / 같은 파일, 다른 부분 병합

  1. manual-merge2 디렉토리 생성 (git init manual-merge 2)후 work.txt 파일 생성
  2. work.txt 파일 내용
  1. commit (”1”)
  2. o2 브랜치 만들기 (git branch o2)
  3. master 내 work.txt 파일 수정
  1. commit (”master work 2”)
  2. o2 브랜치로 이동 git checkout o2
  3. work.txt 파일 수정
  1. commit (”o2 work 2”)

  2. master 로 이동 (git checkout master)

  3. merge (git merge o2)

3. 같은 파일, 같은 부분 병합

충돌 (comflict)이 일어남

2번 처럼 o2 브랜치 만들고 각각 work.txt 파일 수정하고 commit 을 함

master 브랜치에서 o2를 merge 하고자 하였는데, 충돌이 생김

충돌된 work.txt 파일

======= 은 구분자를 의미

구분자 기준 위쪽은 현재 HEAD 즉, 현재 브랜치 이고 내용은 master

아래쪽은 o2, o2 브랜치에서의 내용

<master 브랜치에서 work.txt 파일의 내용>

#title

content

master

#title

content

<o2 브랜치에서 work.txt 파일의 내용>

#title

content

o2

#title

content

충돌했던 부분 수정

충돌을 해결했다는 뜻

새로운 버전이 생성됨


3way merge를 이용하면 더 많은 자동화를 이용 가능하다

참고 자료 - 버전 관리 시스템 Git

profile
Android Developer

0개의 댓글