- merge
branch와 반대되는 개념으로 branch를 병합하는 기능- conflict
merge 과정에서 양쪽이 같은 코드에 부분을 고쳤을 때 시스템이 사용자에게 알려주는 기능
Remote Repository 생성

Local Repository 에 Clone
박솔비@솔비의gram MINGW64 ~/OneDrive/Documents/git_ws (master)
$ git clone https:sxlbl:{토큰}@//github.com/sxlbl/merge_project.git
Cloning into 'merge_project'...
ssh: Could not resolve hostname https: Name or service not known
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
박솔비@솔비의gram MINGW64 ~/OneDrive/Documents/sql_ws
$ cd merge_project/
박솔비@솔비의gram MINGW64 ~/OneDrive/Documents/sql_ws/merge_project (main)
$ cat > test.txt
my name is noma.
박솔비@솔비의gram MINGW64 ~/OneDrive/Documents/sql_ws/merge_project (main)
$ git status
On branch main
Your branch is up to date with 'origin/main'.
Untracked files:
(use "git add <file>..." to include in what will be committed)
test.txt
nothing added to commit but untracked files present (use "git add" to track)
박솔비@솔비의gram MINGW64 ~/OneDrive/Documents/sql_ws/merge_project (main)
$ git add test.txt
박솔비@솔비의gram MINGW64 ~/OneDrive/Documents/sql_ws/merge_project (main)
$ git status
On branch main
Your branch is up to date with 'origin/main'.
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: test.txt
박솔비@솔비의gram MINGW64 ~/OneDrive/Documents/sql_ws/merge_project (main)
$ git commit -m 'create' test.txt
[main 107a985] create
1 file changed, 1 insertion(+)
create mode 100644 test.txt
박솔비@솔비의gram MINGW64 ~/OneDrive/Documents/sql_ws/merge_project (main)
$ git checkout -b branch 'dev'
fatal: 'dev' is not a commit and a branch 'branch' cannot be created from it
박솔비@솔비의gram MINGW64 ~/OneDrive/Documents/sql_ws/merge_project (main)
$ git checkout -b dev
Switched to a new branch 'dev'
박솔비@솔비의gram MINGW64 ~/OneDrive/Documents/sql_ws/merge_project (dev)
$ cat test.txt
my name is noma.
박솔비@솔비의gram MINGW64 ~/OneDrive/Documents/sql_ws/merge_project (dev)
$ cat >> test.txt
are you?
박솔비@솔비의gram MINGW64 ~/OneDrive/Documents/sql_ws/merge_project (dev)
$ cat test.txt
my name is noma.
are you?
박솔비@솔비의gram MINGW64 ~/OneDrive/Documents/sql_ws/merge_project (dev)
$ git add test.txt
박솔비@솔비의gram MINGW64 ~/OneDrive/Documents/sql_ws/merge_project (dev)
$ git commit -m 'modify 1' test.txt
[dev 1833adf] modify 1
1 file changed, 1 insertion(+)
박솔비@솔비의gram MINGW64 ~/OneDrive/Documents/sql_ws/merge_project (dev)
$ git log
commit 1833adfb06cf0ed1bc3d18c5bd77620272616634 (HEAD -> dev)
Author: sxlbl <sb.112097#gmail.com>
Date: Mon Feb 5 20:40:37 2024 +0900
modify 1
commit 107a9851b9c8c0035251a2a4ca6110b3f9b95dd7 (main)
Author: sxlbl <sb.112097#gmail.com>
Date: Mon Feb 5 20:37:19 2024 +0900
create
commit 08d0f62de1e3d0ae4ad69bc1152e304e6daf3713 (origin/main, origin/HEAD)
Author: 박솔비 <154489441+sxlbl@users.noreply.github.com>
Date: Mon Feb 5 20:22:39 2024 +0900
Initial commit


현재
- main에서의 test.txt 내용은 my name is noma.
- dev에서의 test.txt 내용은 my name is noma. are you?
박솔비@솔비의gram MINGW64 ~/OneDrive/Documents/sql_ws/merge_project (dev)
$ cat test.txt
my name is noma.
are you?
박솔비@솔비의gram MINGW64 ~/OneDrive/Documents/sql_ws/merge_project (dev)
$ git checkout main
Switched to branch 'main'
Your branch is ahead of 'origin/main' by 1 commit.
(use "git push" to publish your local commits)
박솔비@솔비의gram MINGW64 ~/OneDrive/Documents/sql_ws/merge_project (main)
$ cat test.txt
my name is noma.
두파일을 합치는 실습을 진행
📌 이때 branch name은 합칠 branch name
박솔비@솔비의gram MINGW64 ~/OneDrive/Documents/sql_ws/merge_project (main)
$ git merge dev
Updating 107a985..1833adf
Fast-forward
test.txt | 1 +
1 file changed, 1 insertion(+)
박솔비@솔비의gram MINGW64 ~/OneDrive/Documents/sql_ws/merge_project (main)
$ cat test.txt
my name is noma.
are you? 📌 합쳐져서 main의 text.txt 내용이 변경됨


- 상황 세팅
박솔비@솔비의gram MINGW64 ~/OneDrive/Documents/sql_ws/merge_project (main)
$ cat > test.txt
hello noma
박솔비@솔비의gram MINGW64 ~/OneDrive/Documents/sql_ws/merge_project (main)
$ git commit -m 'reset' test.txt
[main 403a6ad] reset
1 file changed, 1 insertion(+), 2 deletions(-)
📌 hello noma 상태에서 dev2 branch 생성
➡️ dev2에서의 text 내용은 hello noma 인채로 복사됨
박솔비@솔비의gram MINGW64 ~/OneDrive/Documents/sql_ws/merge_project (main)
$ git branch dev2
박솔비@솔비의gram MINGW64 ~/OneDrive/Documents/sql_ws/merge_project (main)
$ git branch
dev
dev2
* main
📌 main에서 text 내용을 hello zero로 변경, commit
박솔비@솔비의gram MINGW64 ~/OneDrive/Documents/sql_ws/merge_project (main)
$ cat > test.txt
hello zero
박솔비@솔비의gram MINGW64 ~/OneDrive/Documents/sql_ws/merge_project (main)
$ git commit -m 'modify zero' test.txt
[main de44093] modify zero
1 file changed, 1 insertion(+), 1 deletion(-)
➡️ 현재 dev2에서는 hello noma , main에서는 hello zero인 상황
박솔비@솔비의gram MINGW64 ~/OneDrive/Documents/sql_ws/merge_project (dev2)
$ cat test.txt
hello noma
📌 dev2 내용 hello base 으로 변경 후 commit
박솔비@솔비의gram MINGW64 ~/OneDrive/Documents/sql_ws/merge_project (dev2)
$ cat > test.txt
hello base
박솔비@솔비의gram MINGW64 ~/OneDrive/Documents/sql_ws/merge_project (dev2)
$ git commit -m 'modify base' test.txt
[dev2 0888523] modify base
1 file changed, 1 insertion(+), 1 deletion(-)
- merge와 conflict 확인
📌 main과 dev2 merge
박솔비@솔비의gram MINGW64 ~/OneDrive/Documents/sql_ws/merge_project (main)
$ git merge dev2
Auto-merging test.txt
CONFLICT (content): Merge conflict in test.txt
Automatic merge failed; fix conflicts and then commit the result.
➡️ CONFLICT : merge 안됨
📢 두 branch가 내용이 모두 바뀌었으므로 git 자체에서 CONFLICT 문구를 출력함
- 해결방법
박솔비@솔비의gram MINGW64 ~/OneDrive/Documents/sql_ws/merge_project (main|MERGING)
$ git mergetool

➡️main과 dev가 달라서 어떤게 맞는지 모르겠어 ~ 하는 상태임

박솔비@솔비의gram MINGW64 ~/OneDrive/Documents/sql_ws/merge_project (main|MERGING)
$ git add test.txt
박솔비@솔비의gram MINGW64 ~/OneDrive/Documents/sql_ws/merge_project (main|MERGING)
$ git commit

➡️ conflict가 난 상황을 뱉어줌 -> 저장하고 끄기
박솔비@솔비의gram MINGW64 ~/OneDrive/Documents/sql_ws/merge_project (main)
$ cat test.txt
hello base
1. Local Repository 생성
• 위치 : git_ws 폴더 하위
• 이름 : conflict_project
박솔비@솔비의gram MINGW64 ~/OneDrive/Documents/sql_ws
$ mkdir comflict project
박솔비@솔비의gram MINGW64 ~/OneDrive/Documents/sql_ws
$ mkdir conflict_project
박솔비@솔비의gram MINGW64 ~/OneDrive/Documents/sql_ws
$ cd conflict_project/
박솔비@솔비의gram MINGW64 ~/OneDrive/Documents/sql_ws/conflict_project
$ git init
Initialized empty Git repository in C:/Users/solbi/OneDrive/Documents/sql_ws/conflict_project/.git/
박솔비@솔비의gram MINGW64 ~/OneDrive/Documents/sql_ws/conflict_project (master)
$
2. 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
📌 [master] 에서 conflict.txt 생성 후 commit : This is
박솔비@솔비의gram MINGW64 ~/OneDrive/Documents/sql_ws/conflict_project (master)
$ cat > conflict.txt
this is
박솔비@솔비의gram MINGW64 ~/OneDrive/Documents/sql_ws/conflict_project (master)
$ git add conflict.txt
박솔비@솔비의gram MINGW64 ~/OneDrive/Documents/sql_ws/conflict_project (master)
$ git commit -m 'create' conflict.txt
[master (root-commit) 2c3c4ec] create
1 file changed, 1 insertion(+)
create mode 100644 conflict.txt
📌 [main] 에서 Branch 생성 후 이동 : dev
박솔비@솔비의gram MINGW64 ~/OneDrive/Documents/sql_ws/conflict_project (master)
$ git checkout -b dev
Switched to a new branch 'dev'
📌 [dev] 에서 conflict.txt 수정 후 commit : This is merge test.
박솔비@솔비의gram MINGW64 ~/OneDrive/Documents/sql_ws/conflict_project (dev)
$ cat > conflict.txt
this is merge test
박솔비@솔비의gram MINGW64 ~/OneDrive/Documents/sql_ws/conflict_project (dev)
$ git add conflict.txt
박솔비@솔비의gram MINGW64 ~/OneDrive/Documents/sql_ws/conflict_project (dev)
$ git commit -m 'modify' conflict.txt
[dev 30ee052] modify
1 file changed, 1 insertion(+), 1 deletion(-)
📌 [main] 에서 [dev] Merge
박솔비@솔비의gram MINGW64 ~/OneDrive/Documents/sql_ws/conflict_project (dev)
$ git checkout master
Switched to branch 'master'
박솔비@솔비의gram MINGW64 ~/OneDrive/Documents/sql_ws/conflict_project (master)
$ cat conflict.txt
this is
박솔비@솔비의gram MINGW64 ~/OneDrive/Documents/sql_ws/conflict_project (master)
$ git merge dev
Updating 2c3c4ec..30ee052
Fast-forward
conflict.txt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
📌 merge 확인
박솔비@솔비의gram MINGW64 ~/OneDrive/Documents/sql_ws/conflict_project (master)
$ cat conflict.txt
this is merge test
3.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 발생 확인
📌 [main] 에서 Branch 생성 (이동 X) : dev2
박솔비@솔비의gram MINGW64 ~/OneDrive/Documents/sql_ws/conflict_project (master)
$ git branch dev2
박솔비@솔비의gram MINGW64 ~/OneDrive/Documents/sql_ws/conflict_project (master)
$ git branch
dev
dev2
* master
📌 [main] 에서 conflict.txt 수정 후 commit : This is conflict test.
박솔비@솔비의gram MINGW64 ~/OneDrive/Documents/sql_ws/conflict_project (master)
$ cat > conflict.txt
this is conflict test
박솔비@솔비의gram MINGW64 ~/OneDrive/Documents/sql_ws/conflict_project (master)
$ git add conflict.txt
박솔비@솔비의gram MINGW64 ~/OneDrive/Documents/sql_ws/conflict_project (master)
$ git commit -m 'modify -conflict' conflict.txt
[master c09689b] modify -conflict
1 file changed, 1 insertion(+), 1 deletion(-)
📌 확인
박솔비@솔비의gram MINGW64 ~/OneDrive/Documents/sql_ws/conflict_project (master)
$ cat conflict.txt
this is conflict test
박솔비@솔비의gram MINGW64 ~/OneDrive/Documents/sql_ws/conflict_project (master)
$ git checkout dev2
Switched to branch 'dev2'
박솔비@솔비의gram MINGW64 ~/OneDrive/Documents/sql_ws/conflict_project (dev2)
$ cat conflict.txt
this is merge test 📌 복사시점의 내용
📌 [dev2] 에서 conflict.txt 수정 후 commit : This is log test.
박솔비@솔비의gram MINGW64 ~/OneDrive/Documents/sql_ws/conflict_project (master)
$ git checkout dev2
Switched to branch 'dev2'
박솔비@솔비의gram MINGW64 ~/OneDrive/Documents/sql_ws/conflict_project (dev2)
$ cat conflict.txt
this is merge test
박솔비@솔비의gram MINGW64 ~/OneDrive/Documents/sql_ws/conflict_project (dev2)
$ cat > conflict.txt
this is log test
박솔비@솔비의gram MINGW64 ~/OneDrive/Documents/sql_ws/conflict_project (dev2)
$ git add conflict.txt
박솔비@솔비의gram MINGW64 ~/OneDrive/Documents/sql_ws/conflict_project (dev2)
$ git commit -m 'modify log' conflict.txt
[dev2 a0cadf4] modify log
1 file changed, 1 insertion(+), 1 deletion(-)
📌 [main] 에서 [dev2] Merge : Conflict 발생 확인
박솔비@솔비의gram MINGW64 ~/OneDrive/Documents/sql_ws/conflict_project (dev2)
$ git checkout master
Switched to branch 'master'
박솔비@솔비의gram MINGW64 ~/OneDrive/Documents/sql_ws/conflict_project (master)
$ git merge dev2
Auto-merging conflict.txt
CONFLICT (content): Merge conflict in conflict.txt
Automatic merge failed; fix conflicts and then commit the result.
4. Conflict 해결
• Conflict 해결 : This is conflict test.
• Log 로 확인
박솔비@솔비의gram MINGW64 ~/OneDrive/Documents/sql_ws/conflict_project (master|MERGING)
$ git mergetool
Merging:
conflict.txt
Normal merge conflict for 'conflict.txt':
{local}: modified file
{remote}: modified file

박솔비@솔비의gram MINGW64 ~/OneDrive/Documents/sql_ws/conflict_project (master|MERGING)
$ git add conflict.txt
박솔비@솔비의gram MINGW64 ~/OneDrive/Documents/sql_ws/conflict_project (master|MERGING)
$ git commit
hint: Waiting for your editor to close the file...
