Git 08. Merge, Conflict

Jasmine·2023년 6월 8일
0

Git

목록 보기
5/7

실습환경 만들기

  • Remote Repository 생성
    merge_project 생성

  • Local Repository 에 Clone
    git_ws 폴더에 복제

  • 파일 추가 후 저장
    main branch : My name is noma.

cd merge_project 

cat > test.txt
my name is noma.
(ctrl+d)

git add test.txt 

git commit -m "create" test.txt 
[main 7adac9f] create
1 file changed, 1 insertion(+)
 create mode 100644 test.txt
  • Branch 생성 후 파일 수정, commit
    dev branch : My name is noma. Are you?
    (추가 : cat >> test.txt)
merge_project % git checkout -b dev
Switched to a new branch 'dev'

(base) cat >> test.txt 
are you?

(base) cat test.txt 
my name is noma.
are you?

(base) git commit -m “modify 1" test.txt 
[dev 134aaf5] modify 1
1 file changed, 1 insertion(+)

(?) 파일 생성 후 add 없이 바로 commit ?

  • Git Log 확인

Merge Tool 설정

Git Configuration 파일 열기

git config --global -e

Git Merge 설정 추가

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

Merge

Git Merge

현재 위치한 Branch 에 다른 Branch 를 병합

git merge <branchname>

Main Branch 로 이동

merge_project % git checkout main
Switched to branch 'main'
Your branch is ahead of 'origin/main' by 1 commit.
 (use "git push" to publish your local commits)
 
merge_project % git branch
 dev
* main

Dev Branch Merge하기

merge_project % git merge dev
Updating 7adac9f..134aaf5
Fast-forward
 test.txt | 1 +
 1 file changed, 1 insertion(+)

Log : Merge 결과 확인
: modify 1이 dev에만 있었는데 main에도 생김

merge_project % git log

commit 134aaf56a25bb5489cc27836b9059320ae8de9f4 (HEAD -> main, dev)
Author: zerobasegit <zerobase.git@gmail.com>
Date: Sun Nov 7 22:25:09 2021 +0900
 modify 1
 
commit 7adac9f91b4967c1bb465cc27b84e6382b6d0749
Author: zerobasegit <zerobase.git@gmail.com>
Date: Sun Nov 7 22:24:14 2021 +0900
 create
 
commit ad973bd1399ff8264b0e8ebb9a1065bfc6d26906 (origin/main, origin/HEAD)
Author: zerobasegit <93780130+zerobasegit@users.noreply.github.com>
Date: Sun Nov 7 21:23:22 2021 +0900
 Initial commit

Conflict

Merge Conflict

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

  • Main Branch 에서 파일 수정
    Hello, noma 를 만들자.

  • Conflict Test 를 위한 Dev2 Branch 생성
    Hello, noma 를 카피한다. (이동은 하지 않습니다.)

  • Main Branch 에서 파일 수정
    Hello, zero.

  • Dev2 Branch 에서 파일 수정
    Hello, base.

  • Main Branch 에서 Dev2 Merge
    이때 양쪽이 같은 파일의 같은 부분을 수정했기 때문에 Conflict 발생

$ git merge dev2
Auto-merging test.txt
CONFLICT (content): Merge conflict in test.txt
Automatic merge failed; fix conflicts and then commit the result.
  • MergeTool 실행
    Conflict 발생 이후 아래와 같이 MergeTool 을 실행하면 Conflict 난 파일들이 차례로 열림
$ git mergetool
Merging:
test.txt

Normal merge conflict for 'test.txt':
  {local}: modified file
  {remote}: modified file
  • VSCode 에서 Conflict 파일 수정
    Main Branch 와 Dev2 Branch 의 Diff 를 <<<<, ====, >>>> 로 표시

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

  • Conflict 해제
    git add + git commit

$ git add test.txt

$ git commit
  • Commit Message 저장 후 완료

  • Git Log 로 확인

혼자 해봅시다

1.Local Repository 생성
• 위치 : git_ws 폴더 하위
• 이름 : conflict_project

~/Documents/git_ws
$ mkdir conflict_project

$ cd conflict_project/

$ git init

2.Merge 실습
• Default Branch 이름 확인 : main or master
• [master] 에서 conflict.txt 생성 후 commit : This is

~/Documents/git_ws/conflict_project (master)

$ cat > conflict.txt
This is

$ git add conflict.txt

$ git commit -m 'create' conflict.txt

• [main] 에서 Branch 생성 후 이동 : dev

$ git checkout -b dev

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

$ cat > conflict.txt
This is merge test.

$ git add conflict.txt

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

• [main] 에서 [dev] Merge

$ git checkout master

$ git merge dev

3.Conflict 상황 만들기
• [main] 에서 Branch 생성 (이동 X) : dev2

$ git branch dev2

• [main] 에서 conflict.txt 수정 후 commit : This is conflict test.

$ cat > conflict.txt
This is conflict test.

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

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

$ git checkout dev2

$ cat > conflict.txt
This is log test.

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

• [main] 에서 [dev2] Merge : Conflict 발생 확인

$ git checkout master

$ git merge dev2
Auto-merging conflict.txt
CONFLICT (content): Merge conflict in conflict.txt
Automatic merge failed; fix conflicts and then commit the result.

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

$ git mergetool
Merging:
conflict.txt

Normal merge conflict for 'conflict.txt':
  {local}: modified file
  {remote}: modified file

$ git add conflict.txt

$ git commit

$ git log

$ code .
-> source control

🔥제로베이스 데이터 사이언스 취업스쿨🔥

profile
데이터직무를 위한 공부 기록

0개의 댓글

관련 채용 정보