Merge : branch와 반대되는 개념으로 branch를 다시 병합해주는 기능
Conflict(충돌) : Merge를 하는 과정에서 양쪽이 같은 코드부분을 고쳤을 때 시스템이 이를 사용자한테 알려서 해결하도록 도와주는 기능
git_ws % git clone https://zerobasegit:\ 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@\ github.com/zerobasegit/merge_project.git Cloning into 'merge_project'... remote: Enumerating objects: 3, done. remote: Counting objects: 100% (3/3), done. remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 Unpacking objects: 100% (3/3), done. (base) nomaefg@nomaefgui-MacBookPro git_
(파란색이 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
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(+)
merge_project % git log commit 134aaf56a25bb5489cc27836b9059320ae8de9f4 (HEAD -> dev) Author: zerobasegit <zerobase.git@gmail.com> Date: Sun Nov 7 22:25:09 2021 +0900 modify 1 commit 7adac9f91b4967c1bb465cc27b84e6382b6d0749 (main) Author: zerobasegit <zerobase.git@gmail.com> Date: Sun Nov 7 22:24:14 2021 +0900 create commit ad973bd1399ff8264b0e8ebb9a1065bfc6d26906 (origin/main, origin/HEAD) Author: zerobasegit <93780130+zerobasegit@users.noreply.github.com> Date: Sun Nov 7 21:23:22 2021 +0900 Initial commit
git config --global -e
(아래 vscode를 닫아야 다음 명령문을 넣을 수 있다)
[merge] tool = vscode [mergetool "vscode"] cmd = "code --wait $MERGED"
(마지막에 위 코드 추가, 저장, 닫기)
git merge <branchname>
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
merge_project % git merge dev Updating 7adac9f..134aaf5 Fast-forward test.txt | 1 + 1 file changed, 1 insertion(+)
merge_project % git log commit 134aaf56a25bb5489cc27836b9059320ae8de9f4 (HEAD -> main, dev) Author: zerobasegit <zerobase.git@gmail.com> Date: Sun Nov 7 22:25:09 2021 +0900 modify 1 commit 7adac9f91b4967c1bb465cc27b84e6382b6d0749 Author: zerobasegit <zerobase.git@gmail.com> Date: Sun Nov 7 22:24:14 2021 +0900 create commit ad973bd1399ff8264b0e8ebb9a1065bfc6d26906 (origin/main, origin/HEAD) Author: zerobasegit <93780130+zerobasegit@users.noreply.github.com> Date: Sun Nov 7 21:23:22 2021 +0900 Initial commit
(요약) Conflict 해결은
1. Conflict 코드들을 다 없애고,
2. 남길 코드만 남겨서 저장해준 다음에
3. add, commit 을 해주면 됨
충돌 상황 만들기
1. Main Branch 에서 파일 수정 - Hello, noma 만들기
2. Main Branch 이름 수정 noma > zero
3. Branch 만들어서(dev2) 이름 수정 noma > base
4. merge
merge_project % git branch dev * main merge_project % cat > test.txt hello, noma. merge_project % git commit -m "reset" test.txt [main 839d38c] reset 1 file changed, 1 insertion(+), 2 deletions(-)
merge_project % git branch dev2
merge_project % git branch dev dev2 * main merge_project % cat > test.txt hello, zero. merge_project % git commit -m "modify -zero" test.txt [main 8830653] modify -zero 1 file changed, 1 insertion(+), 1 deletion(-)
merge_project % git checkout dev2 Switched to branch 'dev2' (base) nomaefg@nomaefgui-MacBookPro merge_project % cat > test.txt hello, base. (base) nomaefg@nomaefgui-MacBookPro merge_project % git commit -m "modify -base" test.txt [dev2 c4d0984] modify -base 1 file changed, 1 insertion(+), 1 deletion(-)
merge_project % git checkout main # main 으로 이동 Switched to branch 'main' Your branch is ahead of 'origin/main' by 4 commits. (use "git push" to publish your local commits) merge_project % git merge dev2 # merge 시도 Auto-merging test.txt CONFLICT (content): Merge conflict in test.txt Automatic merge failed; (failed, 충돌함) fix conflicts and then commit the result.
(하나는 base, 하나는 zero 라서 충돌함)
merge_project % git mergetool Merging: test.txt Normal merge conflict for 'test.txt': {local}: modified file {remote}: modified file
(vscode 실행됨)
(맞는 부분만 남기고, 저장, 닫기)
merge_project % git add test.txt (base) nomaefg@nomaefgui-MacBookPro merge_project % git commit [main 5ea1c87] Merge branch 'dev2' into main
(vscode 실행됨)
(vscode 실행되면 저장, 닫기)
(hello, base. 로 바뀜)
merge_project % git log commit 5ea1c879140a6752c89d461c05ee28d170d0af7c (HEAD -> main) Merge: 8830653 c4d0984 Author: zerobasegit <zerobase.git@gmail.com> Date: Sun Nov 7 22:48:45 2021 +0900 Merge branch 'dev2' into main commit c4d0984984548d4fbc785976ec7db59b2fdc7d35 (dev2) Author: zerobasegit <zerobase.git@gmail.com> Date: Sun Nov 7 22:35:37 2021 +0900 modify -base commit 8830653709464de5ed1367ecbcf64d8c075108d2 Author: zerobasegit <zerobase.git@gmail.com> Date: Sun Nov 7 22:33:50 2021 +0900 modify -zero commit 839d38cec6e69e04040c028477dcb92a79d4f405 Author: zerobasegit <zerobase.git@gmail.com> Date: Sun Nov 7 22:31:14 2021 +0900 reset ...
• 위치 : git_ws 폴더 하위
• 이름 : conflict_project
• 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
• [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 발생 확인
• Conflict 해결 : This is conflict test.
• Log 로 확인
(This is conflict test. 만 남기고 모두 지움 > 저장 > 닫기)
- git add, commit
(vscode 자동으로 실행됨, 저장 > 닫기)
• Log 로 확인
• 그래프로도 확인
위 글은 제로베이스 데이터 취업 스쿨의 강의자료를 참고하여 작성되었습니다.