Git 5

BlackLabel·2023년 11월 5일
0

Git 기초

목록 보기
5/6

Merge and Conflict

  • Merge : branch와 반대되는 개념으로 branch를 다시 병합해주는 기능

  • Conflict(충돌) : Merge를 하는 과정에서 양쪽이 같은 코드부분을 고쳤을 때 시스템이 이를 사용자한테 알려서 해결하도록 도와주는 기능

Merge 실습 환경 만들기

  • Local Repository 에 Clone
    git_ws 폴더에 복제

  • 파란색이 main branch, 주황색이 dev branch
  • main branchd에서 branch를 하나 더 내서 수정된 commit을 만드는 것까지가 실습 환경 준비
  • 파일 추가 후 저장
git_ws % cd merge_project      # 이동
merge_project % cat > test.txt     # txt 만들고 내용 입력
my name is noma.                    # Ctrl+d 두번해서 저장
merge_project % git add test.txt    # add
merge_project % git commit -m "create" test.txt  # commit
[main 7adac9f] create
  1 file changed, 1 insertion(+)
  create mode 100644 test.txt

![](https://velog.velcdn.com/i+ Git Log 확인mages/blueday4574/post/79e7e1eb-dec2-473b-b84d-bceeb470532b/image.png)

  • Branch 생성 후 파일 수정
merge_project % git checkout -b dev  # dev 만들고 이동까지
Switched to a new branch 'dev'
(base) nomaefg@nomaefgui-MacBookPro merge_project % 
cat >> test.txt   # >> 로 한줄 더 추가
are you?  # 추가하려는 내용, Ctrl + d 두번해서 저장
(base) nomaefg@nomaefgui-MacBookPro merge_project % 
cat test.txt    # 내용보기
my name is noma.  # 내용
are you? # 추가된 내용
(base) nomaefg@nomaefgui-MacBookPro merge_project % 
git commit -m “modify 1" test.txt  # commit
[dev 134aaf5] modify 1
  1 file changed, 1 insertion(+)

  • Git Log 확인

Merge Tool 설정

  • Git Configuration 파일 열기

  • git config --global -e

-> vscode를 닫아야 다음 명령문을 넣을 수 있다

  • Git Merge 설정 추가
[merge]
  tool = vscode
[mergetool "vscode"]
  cmd = "code --wait $MERGED"
  • 마지막에 위 코드 추가, 저장, 닫기

Merge

  • Git Merge
    현재 위치한 Branch 에 다른 Branch 를 병합
    (위에서 작성한 dev Branch 를 main Branch 에 Merge(병합))

git merge <branchname>
  • Main Branch 로 이동(현재 *이 main에 있음, 이동완료)
merge_project % git checkout main # 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
    (HEAD -> main, dev)
    Merge 결과 확인(main에 modify 1 이 있다. 병합완료)

Conflict(충돌)

Conflict 해결은
1. Conflict 코드들을 다 없애고,
2. 남길 코드만 남겨서 저장해준 다음에
3. add, commit 을 해주면 됨

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

충돌 상황 만들기
1. Main Branch 에서 파일 수정 - Hello, noma 만들기
2. Main Branch 이름 수정 noma > zero
3. Branch 만들어서(dev2) 이름 수정 noma > base
4. merge

  • (충돌 상황 만들기) Main Branch 에서 파일 수정
    Hello, noma 를 만들자.

  • (충돌 상황 만들기) Conflict Test 를 위한 Branch 생성
    Hello, noma 를 카피한다. (이동은 하지 않습니다.)
merge_project % git branch dev2

  • (충돌 상황 만들기) Main Branch 에서 파일 수정
    Hello, zero 를 만들자.

  • (충돌 상황 만들기) Dev2 Branch 에서 파일 수정
    Hello, base.

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

-> 하나는 base, 하나는 zero 라서 충돌함

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

-> vscode 실행됨

  • VSCode 에서 Conflict 파일 수정
    Main Branch 와 Dev2 Branch 의 Diff 를 <<<<, ====, >>>> 로 표시

  • 둘 중 맞는 코드를 선택하여 수정하고 저장.(Diff 표시 부분도 삭제, 우리는 base를 선택함,)
    (hello, base. 라인만 남기고 나머지는 모두 지운다)

(맞는 부분만 남기고, 저장, 닫기)

  • Conflict 해제
    git add + git commit

(vscode 실행됨)

  • Commit Message 저장 후 완료

(vscode 실행되면 저장, 닫기)

(hello, base. 로 바뀜)

  • Git Log 로 확인

문제

1. Local Repository 생성

• 위치 : git_ws 폴더 하위
• 이름 : conflict_project

2. Merge 실습

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

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

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

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

• [main] 에서 [dev] Merge

3. Conflict 상황 만들기

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

• [main] 에서 Branch 생성 (이동 X) : dev2

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

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

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

4. Conflict 해결

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

(This is conflict test. 만 남기고 모두 지움 > 저장 > 닫기)

  • git add, commit

(vscode 자동으로 실행됨, 저장 > 닫기)

  • • Log 로 확인

  • 그래프로도 확인

profile
+database

0개의 댓글

관련 채용 정보