[Git] 병합(merge)

Merge는 각각 다른 브랜치에서 작업한 변경 사항을 하나의 브랜치로 합치는 것을 의미한다.
HootJem's avatar
Aug 27, 2024
[Git] 병합(merge)
Merge는 각각 다른 브랜치에서 작업한 변경 사항을 하나의 브랜치로 합치는 것을 의미한다.

1. 회원 가입 생성 및 add. commit (master)

# 회원가입.txt 파일 생성 후 실행 GGG@DESKTOP-43CC23G MINGW64 /c/metacoding/gitwork/ex03 (master) $ git add . $ git commit -m "회원 가입"

2. 로그인 생성 및 add. commit (master)

# 로그인.txt 파일 생성 후 실행 GGG@DESKTOP-43CC23G MINGW64 /c/metacoding/gitwork/ex03 (master) $ git add . $ git commit -m "로그인"

3. 아이디 중복체크 생성 및 add. commit (topic)

$ git checkout -b topic -- Switched to a new branch 'topic' // 브랜치 생성 이동 # 회원가입.txt 파일 생성 후 실행 $ git add . $ git commit -m " 아이디 중복"

4. 글쓰기 생성 및 add. commit (master)

이전에 생성한 아이디 중복.txt 가 사라지는데 정상적인겁니다.
GGG@DESKTOP-43CC23G MINGW64 /c/metacoding/gitwork/ex03 (topic) $ git checkout master # 토픽에서 마스터 브랜치로 이동합니다 # 글쓰기.txt 파일 생성 후 실행 GGG@DESKTOP-43CC23G MINGW64 /c/metacoding/gitwork/ex03 (master) $ git add . $ git commit -m " 글쓰기"

5. Merge

GGG@DESKTOP-43CC23G MINGW64 /c/metacoding/gitwork/ex03 (master) $ git merge topic # topic 브랜치의 변경 사항을 master 브랜치에 병합
수행하면 터미널에 다음과 같은 vim 편집기가 나옵니다.
notion image
이 병합이 필요한 이유를 설명하기 위해 커밋 메시지를 입력하십시오,
라는 내용이기 때문에 고민할 필요가 없습니다. 침착하게 : 를 누르면 입력창이 활성화 되고
q 를 입력 후 엔터를 쳐서 나오면 됩니다.
  • :q는 변경 사항이 없을 때 vim을 종료하는 명령어입니다.
  • :q!는 변경 사항이 있더라도 저장하지 않고 강제로 vim을 종료하는 명령어입니다.
notion image
 
병합 결과를 확인해 보겠습니다.
notion image
(참고: 4b2d566 커밋은 "회원가입"이 아닌 "로그인" 커밋입니다.)
$ git log --oneline --graph # 커밋 이력을 간단한 형식으로 출력
 

6. 정리

notion image
master 는 topic 이 생성한 중복 체크를 가지지 못한채로 글쓰기 를 만들었습니다. 작업 내용을 합치기 위해서는 mater 브랜치 의 글쓰기와 topic 브랜치 의 중복 체크가 병합 되어야 합니다(merge)
 
이렇게 병합을 수행하면 두 브랜치의 작업이 하나의 브랜치에 통합되게 되고 협업과 버전관리에 유용하게 활용할 수 있습니다.👍
 

7. 응용.

7.1 리셋해서 돌아가기

# 리셋해서 돌아가기 GGG@DESKTOP-43CC23G MINGW64 /c/metacoding/gitwork/ex03 (master) $ git reset --hard 1e77043 HEAD is now at 1e77043 아이디 중복체크
hard 뒤의 코드는 git log 에서 확인할 수 있고, $ git log --oneline --graph 명령어로도 가능합니다.

7.2 topic 브랜치 에서 글 작성하기

# 브랜치 topic 으로 이동 후 글 작성 합니다. GGG@DESKTOP-43CC23G MINGW64 /c/metacoding/gitwork/ex03 (master) $ git checkout topic Switched to branch 'topic' # 글 작성한 뒤 git add. 합니다 GGG@DESKTOP-43CC23G MINGW64 /c/metacoding/gitwork/ex03 (topic) $ git add . GGG@DESKTOP-43CC23G MINGW64 /c/metacoding/gitwork/ex03 (topic) $ git commit -m "중복체크 수정" [topic 50d1cc9] 중복체크 수정 1 file changed, 3 insertions(+)
notion image
 

7.3 master 브랜치 에서 글 작성하기

# 마찬가지로 master 브랜치로 이동 후 작성해야합니다. GGG@DESKTOP-43CC23G MINGW64 /c/metacoding/gitwork/ex03 (topic) $ git checkout master Switched to branch 'master' # 글 작성한 뒤 git add. 합니다 GGG@DESKTOP-43CC23G MINGW64 /c/metacoding/gitwork/ex03 (master) $ git add . GGG@DESKTOP-43CC23G MINGW64 /c/metacoding/gitwork/ex03 (master) $ git commit -m "중복체크 중간부분 수정" [master 46bbcd4] 중복체크 중간부분 수정 1 file changed, 3 insertions(+)
notion image
동일한 파일에 글을 작성합니다.
 
 
topic 브랜치와 master 브랜치가 동일한 파일 내부에 글을 작성했습니다. merge 를 하더라도 1,2,3 라인이 각각 작성되어 있기 때문에 충돌이 발생하게 됩니다.
확인을 위해 git merge topic 으로 머지하겠습니다.
notion image
$ git merge topic Auto-merging 아이디중복체크.txt CONFLICT (content): Merge conflict in 아이디중복체크.txt Automatic merge failed; fix conflicts and then commit the result.
다음과 같은 로그가 출력됩니다.( 자동 merge 실패; 충돌을 수정한 뒤 결과를 커밋하세요 이런뜻)
화면은 위처럼 나옵니다.
 
notion image
==== 을 기준으로 위 아래 무엇을 쓸건지? 표시하는 느낌입니다.
지금은 간단한 텍스트지만 긴 코드의 충돌이 생기게 되면 충분한 의사 소통을 통해 올라갈 코드를 결정해야합니다.
 
notion image
저는 다음과 같이 정리했습니다.
이후 다시 commit 을 합니다.
notion image
병합이 완료되지 않았기 때문에 현재 브랜치 상태에 MERGING이라는 표시가 나타납니다. 충돌을 해결한 후 변경된 파일을 git add . 명령어로 추가하고, git commit 명령어로 병합을 완료하면 됩니다.👍
(추가 : Git 커밋 메시지를 입력할 때 쌍따옴표(")가 닫히지 않으면, Git은 명령어가 아직 끝나지 않은 것으로 인식하여 다음 줄로 넘어갑니다. 따라서 쌍따옴표를 추가하여 메시지를 닫아주어야 합니다.)
 
Share article

[HootJem] 개발 기록 블로그