[Git][3]Merge하기
Programming/Git

[Git][3]Merge하기

다음 자료를 참고해서 Merge 하였습니다.

 

https://git-scm.com/book/ko/v2/Git-%EB%B8%8C%EB%9E%9C%EC%B9%98-%EB%B8%8C%EB%9E%9C%EC%B9%98%EC%99%80-Merge-%EC%9D%98-%EA%B8%B0%EC%B4%88

 

Git - 브랜치와 Merge 의 기초

Merge 시에 발생한 충돌을 다루는 더 어렵고 요상한 내용은 뒤에 고급 Merge 에서 다루기로 한다.

git-scm.com

 

https://cjh5414.github.io/get-git-remote-branch/

 

Git remote branch 가져오기

Jihun's Development Blog

cjh5414.github.io

 

https://git-scm.com/book/ko/v2/Git-%EB%8F%84%EA%B5%AC-%EA%B3%A0%EA%B8%89-Merge#_advanced_merging

 

Git - 고급 Merge

Merge 작업할 때 공백 처리 옵션을 사용하면 Git이 꽤 잘해준다. 하지만, Git이 자동으로 해결하지 못하는 때도 있다. 이럴 때는 외부 도구의 도움을 받아 해결한다. 예를 들어 Git이 자동으로 해결해

git-scm.com

 

 

git branch 브랜치 확인 후

git pull origin master로 가져옵니다

 

 

잘 가져와집니다.

그리고 branch를 확인해 보니 master밖에 없네요?

분명 원격에 하나가 더 있는데 말이죠.

 

 

다른 문서를 참고하였는데 remote로 가져와야 한다네요.

 

git remote update

-> remote를 최신의 상태로 업데이트합니다.

(즉, 원격 저장소의 변경사항이나 원격 branch를 최신으로 업데이트함)

 

git branch

-> local branch를 확인합니다.

 

git branch -r

-> remote branch를 모두 확인해줍니다.

 

git branch -a

-> local remote branch를 모두 확인해줍니다.

 

 

우리는 remote 된 것을 가져와야 합니다.

 

git checkout -t <원격 브랜치명>

 

가져올 branch를 아래처럼 입력하고

git checkout -t origin/lee

enter 합니다!

 

 

이렇게 하고 branch를 확인해보면

lee branch인데요.

 

git log로 log를 확인해본 결과

remote branch(원격 브랜치)local(로컬)에 잘 불러와진 모습입니다.


git checkout -t <remote branch> 명령어는

불러옴과 동시에 그 branchhead가 이동하게 해 주네요.

 

 

이제 merge를 해봅시다!

(English meaning, merge: 병합)

 

 

git merge <branch명>을 입력하자 

 

당황스럽게도 새로운 화면으로 바뀝니다.

이게 충돌 없이 정상적으로 뜨는 화면이라고 합니다.

 

 

vim으로 진입

 

아래의 두 사이트를 참고하여 해결했습니다.

 

https://m.blog.naver.com/ykycome00/221463004954

 

[Git] git pull and merge (Please enter a commit message to explain why this merge is necessary) 진행방법

-> 충돌파일 overwrite -> bash -> git pull origin master 하였는데 위와 같은 편집기로 이동하...

blog.naver.com

 

https://stackoverflow.com/questions/19085807/please-enter-a-commit-message-to-explain-why-this-merge-is-necessary-especially

 

Please enter a commit message to explain why this merge is necessary, especially if it merges an updated upstream into a topic b

I am using Git. I did a pull from a remote repo and got an error message: Please enter a commit message to explain why this merge is necessary, especially if it merges an updated upstream into a

stackoverflow.com

 

단축키 'i'입력 모드로 바꿔 merge commit message를 입력하고

'esc'명령 모드로 바꿔 ":wq"(write & quit)를 입력한 후 enter를 합니다

 

 

이렇게 하면 아래 창으로 넘어갑니다!

 

merge 되는 모습

 

 

git log로 확인해보니

위에서 쓴 Merge logcommit log로 남은 것을 볼 수 있습니다.

 

 

lee branch에서 작업을 해주신 것을

제가 master에서 병합을 하는데, 특이사항으로는

 

6. 번에서 새로운 branch lee를 만들고 그 브랜치에서

작업을 하는 도중에 

 

master도 계속 작업을 하고 있었습니다.

그리고 7. 번 commit을 하게 되죠

이렇게 하면 master head7번에 위치합니다.

 

반면 branch lee에서 계속 작업을 해주고 commit도 해주었기 때문에

lee headlee head log의 가장 마지막에(lately, 최신) 위치하게 됩니다.

 

 

즉, 시간 순으로 하면 다음과 같이 됩니다.

6번(master, lee head parent) -> 병합 작업 완료! (head lee) -> 리드미 수정!(head lee) -> 7번(head master)

 

이 상황에서 merge가 되기 위해서는 recursive 되어야 합니다.

바로 branch를 만들었던 바로 그 상황으로 돌아가는 것이죠

(parent로 돌아간다)

 

현재 브랜치가 가리키는 커밋이 Merge 할 브랜치의 조상이 아니므로 Git은 'Fast-forward’로 Merge 하지 않는다. 이 경우에는 Git은 각 브랜치가 가리키는 커밋 두 개와 공통 조상 하나를 사용하여 3-way Merge를 한다.
출처 : 3.2 Git 브랜치 - 브랜치와 Merge의 기초

 

이런 방식을 3-way Merge라고 합니다

 

이 방식을 사용하게 되면 공통 조상으로 recursive 되며,

새롭게 Merge commit을 합니다.

 

 

아래처럼 commit의 최신(마지막, lately) header의 위치를 볼 수 있습니다.

 

 

아래의 git 공식문서 그림을 보면 더 잘 이해할 수 있습니다. 

 

이제 mastermerge 하고 나면 더는 lee branch가 필요 없습니다.

git branch -d lee로 branch를 지워줍니다.

 

 

이 명령으로 branch를 삭제하고 이슈의 상태를 처리 완료로 표시합니다.

이렇게 하고 push 하면 원격 저장소에 local의 기록이 전달되어 update 됩니다.

 

 

branch merge 완료!

 

 

 

merge후 제가 따로 작업하고 commitpush해도 

정상적으로 작동합니다.

(작업환경은 master head)

 

 

pushremote repository에서 확인해보면,

push가 잘된 모습을 확인할 수 있습니다!

 

 

 

특이사항으로는 제가 local에서 lee branch(local branch)를 삭제를 해서,

remote repository에서는 그대로 남아있네요!

 

이것도 제가 제거해줘야 합니다!

merge후 필요 없어진 remote branch는 삭제해야죠.

 

아래의 자료를 참고했습니다

https://www.lesstif.com/gitbook/git-delete-remote-branch-20776547.html

 

git 원격지 브랜치 삭제(delete remote branch)

 

www.lesstif.com

 

방법은 두 가지인데

 

1. --delete <원격 branch명> 명령과 push

 

git push origin --delete <원격 branch명>

 

2. branch -d <원격 branch명> 명령을 한 후 push 

 

git branch -d <원격 branch명>

git push origin <원격 branch명>

 

 

저는 첫 번째 방법을 사용했습니다.

여기서는 github repository에 있는 branch명 그대로 넣으면 됩니다.

 

둘 다 확인해 본 결과, 확실히 지워졌습니다.

 

github에서도 확인 가능합니다.

 

이상,

merge 하는 방법과 remote branch 삭제에 대해 알아보았습니다.


 

 

 

'Programming > Git' 카테고리의 다른 글

[Git][4]Conflict 해결  (0) 2021.08.13
[Git][2]Github연결  (0) 2021.07.04
[Git][1]Git  (0) 2021.07.04