다음 자료를 참고해서 Merge 하였습니다.
https://cjh5414.github.io/get-git-remote-branch/
https://git-scm.com/book/ko/v2/Git-%EB%8F%84%EA%B5%AC-%EA%B3%A0%EA%B8%89-Merge#_advanced_merging
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> 명령어는
불러옴과 동시에 그 branch로 head가 이동하게 해 주네요.
이제 merge를 해봅시다!
(English meaning, merge: 병합)
git merge <branch명>을 입력하자
당황스럽게도 새로운 화면으로 바뀝니다.
이게 충돌 없이 정상적으로 뜨는 화면이라고 합니다.
vim으로 진입
아래의 두 사이트를 참고하여 해결했습니다.
https://m.blog.naver.com/ykycome00/221463004954
단축키 'i'로 입력 모드로 바꿔 merge commit message를 입력하고
'esc'로 명령 모드로 바꿔 ":wq"(write & quit)를 입력한 후 enter를 합니다
이렇게 하면 아래 창으로 넘어갑니다!
merge 되는 모습
git log로 확인해보니
위에서 쓴 Merge log가 commit log로 남은 것을 볼 수 있습니다.
lee branch에서 작업을 해주신 것을
제가 master에서 병합을 하는데, 특이사항으로는
6. 번에서 새로운 branch lee를 만들고 그 브랜치에서
작업을 하는 도중에
master도 계속 작업을 하고 있었습니다.
그리고 7. 번 commit을 하게 되죠
이렇게 하면 master head는 7번에 위치합니다.
반면 branch lee에서 계속 작업을 해주고 commit도 해주었기 때문에
lee head는 lee 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 공식문서 그림을 보면 더 잘 이해할 수 있습니다.
이제 master에 merge 하고 나면 더는 lee branch가 필요 없습니다.
git branch -d lee로 branch를 지워줍니다.
이 명령으로 branch를 삭제하고 이슈의 상태를 처리 완료로 표시합니다.
이렇게 하고 push 하면 원격 저장소에 local의 기록이 전달되어 update 됩니다.
branch merge 완료!
merge후 제가 따로 작업하고 commit후 push해도
정상적으로 작동합니다.
(작업환경은 master head)
push후 remote repository에서 확인해보면,
push가 잘된 모습을 확인할 수 있습니다!
특이사항으로는 제가 local에서 lee branch(local branch)를 삭제를 해서,
remote repository에서는 그대로 남아있네요!
이것도 제가 제거해줘야 합니다!
merge후 필요 없어진 remote branch는 삭제해야죠.
아래의 자료를 참고했습니다
https://www.lesstif.com/gitbook/git-delete-remote-branch-20776547.html
방법은 두 가지인데
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 |