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 편집기가 나옵니다.

이 병합이 필요한 이유를 설명하기 위해 커밋 메시지를 입력하십시오,
라는 내용이기 때문에 고민할 필요가 없습니다. 침착하게
:
를 누르면 입력창이 활성화 되고q
를 입력 후 엔터를 쳐서 나오면 됩니다.:q
는 변경 사항이 없을 때vim
을 종료하는 명령어입니다.
:q!
는 변경 사항이 있더라도 저장하지 않고 강제로vim
을 종료하는 명령어입니다.

병합 결과를 확인해 보겠습니다.

(참고:
4b2d566
커밋은 "회원가입"이 아닌 "로그인" 커밋입니다.)
$ git log --oneline --graph
# 커밋 이력을 간단한 형식으로 출력
6. 정리

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(+)

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(+)

동일한 파일에 글을 작성합니다.
topic 브랜치와 master 브랜치가 동일한 파일 내부에 글을 작성했습니다.
merge 를 하더라도 1,2,3 라인이 각각 작성되어 있기 때문에 충돌이 발생하게 됩니다.
확인을 위해
git merge topic
으로 머지하겠습니다.
$ git merge topic
Auto-merging 아이디중복체크.txt
CONFLICT (content): Merge conflict in 아이디중복체크.txt
Automatic merge failed; fix conflicts and then commit the result.
다음과 같은 로그가 출력됩니다.( 자동 merge 실패; 충돌을 수정한 뒤 결과를 커밋하세요 이런뜻)
화면은 위처럼 나옵니다.

이
====
을 기준으로 위 아래 무엇을 쓸건지? 표시하는 느낌입니다.지금은 간단한 텍스트지만 긴 코드의 충돌이 생기게 되면 충분한 의사 소통을 통해 올라갈 코드를 결정해야합니다.

저는 다음과 같이 정리했습니다.
이후 다시 commit 을 합니다.

병합이 완료되지 않았기 때문에 현재 브랜치 상태에
MERGING
이라는 표시가 나타납니다.
충돌을 해결한 후 변경된 파일을 git add .
명령어로 추가하고, git commit
명령어로 병합을 완료하면 됩니다.👍(추가 : Git 커밋 메시지를 입력할 때 쌍따옴표(
"
)가 닫히지 않으면, Git은 명령어가 아직 끝나지 않은 것으로 인식하여 다음 줄로 넘어갑니다. 따라서 쌍따옴표를 추가하여 메시지를 닫아주어야 합니다.)Share article