git(5) - merge๐ค
merge?
merge๋ branch๋ก ๋ถ๊ธฐ๋ ๊ฐ commit์ ํ๋๋ก ๋ค์ ํฉ์น๊ณ ์ถ์ ๋ ์ฌ์ฉํ๋ ๋ช ๋ น์ด์ด๋ค.
1. ๋ช ๋ น์ด
-
branch ๋ณํฉ
- master์ merge๊ฐ ์๋ฃ๋์์ผ๋ฉด branch๋ฅผ ์ญ์ ํด๋ ๋๋ค.
(master) $ git merge {branch name} (master) $ git merge example -
merge ์ทจ์
(master) $ git merge --abort -
๋ณํฉํ๋ฉด์ ํด๋น branch๋ ๊ธฐ๋ก์ ๋จ๊ธฐ๊ณ ์ถ์๋
(master) $ git merge --no-ff -
branch ํ์ธ
$ git branch --merged # ํ์ฌ ๋ธ๋์น์ ๋จธ์ง๊ฐ ๋ ๋ธ๋์น ํ์ธ $ git branch --no-merged # ๋ง์คํฐ ๋ธ๋ฐ์น์์ ํ์๋ ๋ธ๋์น ํ์ธ
2. branch ๋ณํฉ ์๋๋ฆฌ์ค
branch ๊ด๋ จ๋ ๋ช ๋ น์ด๋ ๊ฐ๋จํ๋ค.
๋ค์ํ ์๋๋ฆฌ์ค ์์์ ์ด๋ค ์ํฉ์ธ์ง ํ์ ํ๊ณ ์์ ๋กญ๊ฒ ํ์ฉํ ์ ์์ด์ผ ํ๋ค.
์ํฉ 1. fast-foward
fast-foward ๋ ๋ฟ๋ฆฌ๊ฐ ๋๋ master๋ธ๋์น์ ๋ณํ๊ฐ ์ฃผ์ด์ง์ง ์์ ์ฑ ๋ค๋ฅธ ๋ณํ๊ฐ ์๊ธด ๋ธ๋์น๋ก ๋จธ์ง๋ฅผ ํ๊ฒ ๋๋ ๊ฒ.
์๋ก์ด ์ปค๋ฐ์ด ์์ฑ๋์ง ์๊ณ HEAD์ ์์น๋ง ๋ณํ ์ฑ ๋จธ์ง๋ฅผ ํ ๋์ ๋ธ๋์น์ ๋ง์ง๋ง ์ปค๋ฐ์ master ๋ธ๋์น๊ฐ ์๋ฆฌ์ก๊ฒ ๋๋ค.
head?
d7afaf1 (HEAD -> master) add README # ์์
๋ด๊ฐ ์ด๋ํ Commit์ ์ ๋ณด๋ฅผ ํ์, ์ ์์๋ master์ ์์นํด ์์์ ๋ํ๋ธ๋ค.
-
feature/home branch ์์ฑ ๋ฐ ์ด๋
(master) $ git branch feature/home (master) $ git checkout feature/home -
์์ ์๋ฃ ํ commit
(feature/home) $ touch home.txt (feature/home) $ git add . (feature/home) $ git commit -m 'Add home.txt' (feature/home) $ git log --oneline b534a34 (HEAD -> feature/home) Complete Home!!!! e89616a (master) Init -
master ์ด๋
(feature/home) $ git checkout master (master) $ git log --oneline -
master์ ๋ณํฉ
(master) $ git merge feature/home Updating e89616a..b534a34 Fast-forward home.txt | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 home.txt -
๊ฒฐ๊ณผ : fast-foward
(master) $ git log --oneline b534a34 (HEAD -> master, feature/home) Complete Home!!!! e89616a Init -
branch ์ญ์
(master) $ git branch -d feature/home Deleted branch feature/home (was b534a34).
์ํฉ 2. merge commit
์๋ก ๋ค๋ฅธ ์ด๋ ฅ(commit)์ ๋ณํฉ(merge)ํ๋ ๊ณผ์ ์์ ๋ค๋ฅธ ํ์ผ์ด ์์ ๋์ด ์๋ ์ํฉ
git์ด auto merging์ ์งํํ๊ณ , commit์ด ๋ฐ์๋๋ค.
-
feature/about branch ์์ฑ ๋ฐ ์ด๋
(master) $ git checkout -b feature/about (feature/about) $ -
์์ ์๋ฃ ํ commit
(feature/about) $ touch about.txt (feature/about) $ git add . (feature/about) $ git commit -m 'Add about.txt' (feature/about) $ git log --oneline 5e1f6de (HEAD -> feature/about) ์๊ธฐ์๊ฐ ํ์ด์ง ์๋ฃ! b534a34 (master) Complete Home!!!! e89616a Init -
master ์ด๋
(feature/about) $ git checkout master (master) $ -
master์ ์ถ๊ฐ commit์ ๋ฐ์์ํจ๋ค.
- ๋ค๋ฅธ ํ์ผ์ ์์ ํน์ ์์ฑํ ๊ฒ.
(master) $ touch master.txt (master) $ git add . (master) $ git commit -m 'Add master.txt' (master) $ git log --oneline 98c5528 (HEAD -> master) ๋ง์คํฐ ์์ .... b534a34 Complete Home!!!! e89616a Init -
master์ ๋ณํฉ
(master) $ git merge feature/about -
๊ฒฐ๊ณผ -> ์๋์ผ๋ก merge commit ๋ฐ์
-
์ปค๋ฐ ๋ฐ ๊ทธ๋ํ ํ์ธํ๊ธฐ
$ git log --oneline --graph * 582902d (HEAD -> master) Merge branch 'feature/about' |\ | * 5e1f6de (feature/about) ์๊ธฐ์๊ฐ ํ์ด์ง ์๋ฃ! * | 98c5528 ๋ง์คํฐ ์์ .... |/ * b534a34 Complete Home!!!! * e89616a Init -
branch ์ญ์
$ git branch -d feature/about Deleted branch feature/about (was 5e1f6de).
์ํฉ 3. merge commit ์ถฉ๋
์๋ก ๋ค๋ฅธ ์ด๋ ฅ(commit)์ ๋ณํฉ(merge)ํ๋ ๊ณผ์ ์์ ๊ฐ์ ํ์ผ์ ๋์ผํ ๋ถ๋ถ์ด ์์ ๋์ด ์๋ ์ํฉ
git์ด auto merging์ ํ์ง ๋ชปํ๊ณ , ์ถฉ๋ ๋ฉ์์ง๊ฐ ๋ฌ๋ค.
ํด๋น ํ์ผ์ ์์น์ ํ์คํ์์ ๋ฐ๋ผ ํ์ ํด์ค๋ค.
์ํ๋ ํํ์ ์ฝ๋๋ก ์ง์ ์์ ์ ํ๊ณ ์ง์ commit์ ๋ฐ์ ์์ผ์ผ ํ๋ค.
-
feature/test branch ์์ฑ ๋ฐ ์ด๋
(master) $ git checkout -b feature/test -
์์ ์๋ฃ ํ commit
# README.md ํ์ผ ์ด์ด์ ์์ (feature/test) $ touch test.txt (feature/test) $ git add . (feature/test) $ git commit -m 'Add test.txt' (feature/test) $ git log --oneline 95fad1c (HEAD -> feature/test) README ์์ ํ๊ณ test ์์ฑํ๊ณ 582902d (master) Merge branch 'feature/about' 98c5528 ๋ง์คํฐ ์์ .... 5e1f6de ์๊ธฐ์๊ฐ ํ์ด์ง ์๋ฃ! b534a34 Complete Home!!!! e89616a Init -
master ์ด๋
$ git checkout master -
master์ ์ถ๊ฐ commit์ ๋ฐ์์ํค๊ธฐ
- ๋์ผ ํ์ผ์ ์์ ํน์ ์์ฑํด์ผํ๋ค.
# README.md ํ์ผ ์ด์ด์ ์์ (master) $ git add README.md (master) $ git commit -m 'Update README.md' -
master์ ๋ณํฉ
(master) $ git merge feature/test Auto-merging README.md CONFLICT (content): Merge conflict in README.md Automatic merge failed; fix conflicts and then commit the result. -
๊ฒฐ๊ณผ -> merge conflict๋ฐ์
git status ๋ช ๋ น์ด๋ก ์ถฉ๋ ํ์ผ์ ํ์ธํ ์ ์์.
(master|MERGING) $ git status On branch master You have unmerged paths. (fix conflicts and run "git commit") (use "git merge --abort" to abort the merge) Changes to be committed: new file: test-1.txt new file: test-2.txt new file: test.txt Unmerged paths: (use "git add <file>..." to mark resolution) both modified: README.md -
์ถฉ๋ ํ์ธ ๋ฐ ํด๊ฒฐ
<<<<<<< HEAD # ๋ง์คํฐ์์ ์์ ํจ... ======= # ํ ์คํธ์์ ์์ฑ >>>>>>> feature/test -
merge commit ์งํ
(master|MERGING) $ git add . (master|MERGING) $ git commit-
vim ํธ์ง๊ธฐ ํ๋ฉด์ด ๋ํ๋๋ค.
- ์๋์ผ๋ก ์์ฑ๋ ์ปค๋ฐ ๋ฉ์์ง๋ฅผ ํ์ธํ๊ณ ,
esc๋ฅผ ๋๋ฅธ ํ:wq๋ฅผ ์ ๋ ฅํ์ฌ ์ ์ฅ ๋ฐ ์ข ๋ฃ. w: writeq: quit
- ์๋์ผ๋ก ์์ฑ๋ ์ปค๋ฐ ๋ฉ์์ง๋ฅผ ํ์ธํ๊ณ ,
-
vs code ํธ์ง๊ธฐ์์ ๋ฉ์์ง๋ณด๊ณ ๋ซ์๊ฒ.
-
-
์ปค๋ฐ ๋ฐ ํ์ธํ๊ธฐ
(master) $ git log --oneline --graph * bc1c0cd (HEAD -> master) Merge branch 'feature/test' |\ | * 95fad1c (feature/test) README ์์ ํ๊ณ test ์์ฑํ๊ณ * | 2ecad28 ๋ฆฌ๋๋ฏธ ์์ |/ * 582902d Merge branch 'feature/about' |\ | * 5e1f6de ์๊ธฐ์๊ฐ ํ์ด์ง ์๋ฃ! * | 98c5528 ๋ง์คํฐ ์์ .... |/ * b534a34 Complete Home!!!! * e89616a Init -
branch ์ญ์
(master) $ git branch -d feature/test
merge์ ๊ดํ ์ฐธ๊ณ ํ๊ธฐ ์ข์ ์๋ฃ
https://otzslayer.github.io/git/2021/12/05/git-merge-fast-forward.html