[제로베이스 데이터 취업 스쿨] 9기 11주차 - Git (7): Merge and Conflict

Inhee Kim·2023년 1월 13일
0
post-thumbnail
post-custom-banner

Merge and Conflict

1. 실습환경 만들기

Remote Repository 생성

  • merge_project 생성

Local Repository에 Clone

  • git_ws 폴더에 복제
cd Documents/git_ws
git clone https://<username>:<token>@github.com/<repository>.git

cd merge_project

실습환경 체크

파일 추가 후 저장

cat > test.txt
my name is noma. + ctrl + D

git status

git add test.txt
git status

git commit -m "create" test.txt
git status

cat test.txt

Branch 생성 후 파일 수정

git checkout -b dev

cat >> test.txt
are you? + ctrl + D

cat test.txt
git status

git add test.txt
git status

git commit -m “modify 1" test.txt
git status

Git Log 확인

git log

2. Merge Tool 설정

Git Configuration 파일 열기

git config --global -e

위 코드를 실행하면 VSCode가 열리게 됨.
(앞에서 VSCode가 실행되도록 설정해주었기 때문)

Git Merge 설정 추가 + 저장 + 종료

[merge]
	tool = vscode
[mergetool "vscode"]
	cmd = "code --wait $MERGED"

3. Merge

Git Merge

  • 현재 위치한 Branch에 다른 Branch를 병합
git merge <branchname>

Main Branch로 이동

git checkout main
cat test.txt
git branch

Dev Branch Merge

git merge dev
cat test.txt

Log

  • Merge 결과 확인
git log

4. Conflict

Merge Conflict

  • Branch를 Merge 하는 과정에서 충돌이 날 수 있음
  • 혹은 Push, Pull 하는 과정에서도 충돌이 일어날 수 있음

Main Branch에서 파일 수정

  • Hello, noma 를 만들자.
git branch

cat test.txt

cat > test.txt
hello, noma. + ctrl + D

git commit -m "reset" test.txt

Conflict Test를 위한 Branch 생성

  • Hello, noma를 카피한다. (이동은 하지 않습니다.)
git branch dev2

Main Branch에서 파일 수정

  • Hello, zero를 만들자.
git branch

cat > test.txt
hello, zero.

git commit -m "modify -zero" test.txt

Dev2 Branch에서 파일 수정

  • Hello, base.
git checkout dev2
cat test.txt

cat > test.txt
hello, base. + ctrl + D

git commit -m "modify -base" test.txt

Main Branch에서 Dev2 Merge

  • 이때 양쪽이 같은 파일의 같은 부분을 수정했기 때문에 Conflict 발생
git checkout main
git merge dev2

MergeTool 실행

  • Conflict 발생 이후 아래와 같이 MergeTool을 실행하면 Conflict난 파일들이 차례로 열림
git mergetool

VSCode에서 Conflict 파일 수정

  • Main Branch와 Dev2 Branch의 Diff를 <<<<, ====, >>>>로 표시

  • 둘 중 맞는 코드를 선택하여 수정하고 저장. (Diff 표시 부분도 삭제)

Conflict 해제

  • git add + git commit
git status

git add test.txt
git commit

  • Commit Message 저장 후 완료

Git Log로 확인

git log

문제풀이

1. Local Repository 생성

  • 위치 : git_ws 폴더 하위
  • 이름 : conflict_project
cd Documents/git_ws
mkdir conflict_project
cd conflict_project

git init

2. Merge 실습

  • Default Branch 이름 확인 : main or master
  • [master]에서 conflict.txt 생성 후 commit : This is
  • [master]에서 Branch 생성 후 이동 : dev
  • [dev]에서 conflict.txt 수정 후 commit : This is merge test.
  • [master]에서 [dev] Merge

(1) [master]에서 conflict.txt 생성 후 commit : This is

cat > conflict.txt
This is + ctrl + D

cat conflict.txt
git status

git add conflict.txt
git status

(2) [master]에서 Branch 생성 후 이동 : dev

git checkout -b dev

(3) [dev]에서 conflict.txt 수정 후 commit : This is merge test.

cat > conflict.txt
This is merge test. + ctrl + D

cat conflict.txt
git status

git add conflict.txt
git status

git commit -m 'modify' conflict.txt

(4) [master]에서 [dev] Merge

git checkout master
cat conflict.txt

git merge dev
cat conflict.txt

3. Conflict 상황 만들기

  • [master] 에서 Branch 생성 (이동 X) : dev2
  • [master] 에서 conflict.txt 수정 후 commit : This is conflict test.
  • [dev2] 에서 conflict.txt 수정 후 commit : This is log test.
  • [master] 에서 [dev2] Merge : Conflict 발생 확인

(1) [master]에서 Branch 생성 (이동 X) : dev2

git branch dev2
git branch

cat conflict.txt

(2) [master]에서 conflict.txt 수정 후 commit : This is conflict test.

cat > conflict.txt
This is conflict test. + ctrl + D
cat conflict.txt

git commit -m 'modify -conflict' conflict.txt

(3) [dev2]에서 conflict.txt 수정 후 commit : This is log test.

git checkout dev2

cat > conflict.txt
This is log test. + ctrl + D

cat conflict.txt
git commit -m 'modify -log' conflict.txt

(4) [master]에서 [dev2] Merge : Conflict 발생 확인

git checkout master
git merge dev2

4. Conflict 해결

  • Conflict 해결 : This is conflict test.
  • Log 로 확인
git mergetool

git status

git add conflict.txt
git commit

5. Git Graph 확인

profile
Date Scientist & Data Analyst
post-custom-banner

0개의 댓글