Git - YunByungKwan/Fundamental GitHub Wiki
Git
fast-forward merge vs 3-way merge์ ๋ํด ์ค๋ช
fast-forward merge๋ ์๋ฅผ ๋ค์ด์ ๊ฐ์ ์ค๊ธฐ์ master branch๊ฐ ๋ค์ ์๊ณ slave branch๊ฐ ์์ ์๋ค๊ณ ํ์๋
master branch(*)์์ git merge slave
๋ฅผ ํ๋ฉด ๋จ์ํ master branch์ ์ํ๊ฐ slave branch ์์น๋ก ์ด๋ํ๋ ๊ฒ์ ๋งํฉ๋๋ค.
3-way merge๋ ์๋ฅผ ๋ค์ด์ commit0๋ฅผ ๊ธฐ์ค์ผ๋ก slave1 branch์ slave2 branch๊ฐ ๊ฐ๊ฐ commit1, commit2๋ฅผ ํด์ ๊ฐ๋ผ์ก๋ค๊ณ ํ์๋
slave1 branch์์ git merge slave2
๋ฅผ ํ๋ฉด ๋ commit์ ํฌํจํ๋ ์๋ก์ด commit์ด ์๊ธฐ๋๋ฐ ์ด๋ฅผ 3-way merge๋ผ๊ณ ํฉ๋๋ค.
Interactive rebase
๊ฐ์
Repository ์์ฑํ๊ธฐ
-
commit: ํ๋์ ๋ฒ์ ์ ๋ง๋๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐ. ํ๋ฒ์ commit์๋ ์ฌ๋ฌ๊ฐ์ ํ์ผ ๋๋ ํ๊ฐ์ ํ์ผ์ commitํ ์ ์๋ค.
-
Discard: Working directory์์ ๋ณ๊ฒฝ์ฌํญ์ด ์๋ ํ์ผ๋ค(unstaged files)์ ๋ณ๊ฒฝ ์ํ ์ด์ ์ผ๋ก ๋๋ฆฌ๊ณ ์ถ์๋ ์ฌ์ฉํ๋ค.
-
Reset
- Mixed: commit ๋ด์ญ์ด 5๊ฐ ์๋ค(1,2,3,4,5) 3๋ฒ์งธ commit์์ Reset Mixed๋ฅผ ํ๊ฒ ๋๋ฉด 4, 5๋ฒ์งธ commit์ด ์ฌ๋ผ์ง๊ณ ๋ณ๊ฒฝ์ฌํญ์ด ๋ค ๋ ๋ผ๊ฐ๋ ๊ฒ์ด ์๋๋ผ working copy๋ก ๊ฐ๋ค.(์ฆ, 4,5๋ฒ์งธ commit์ ๋ณ๊ฒฝ ์ฌํญ๋ค์ด ์๋์ฑ๋ก add ์ด์ ์ํ๋ก ๊ฐ๋ ๊ฒ์)
- Hard: ์๋ฅผ ๋ค์ด์ commitํ ๋ด์ญ์ด 5๊ฐ ์ ๋๋๋ค. ๊ทธ์ค์ 3๋ฒ์งธ ์ปค๋ฐ ์ดํ์ ํ 4,5๋ฒ์งธ ์ปค๋ฐ์ ๋ ๋ ค๋ฒ๋ฆฌ๊ณ ์ถ์ ๋ ์ฌ์ฉํ๋ ๊ธฐ๋ฅ(์กฐ์ฌํด์ ์ฌ์ฉํด์ผ ํ ๊ธฐ๋ฅ)
-
Revert: ์์คํธ๋ฆฌ์์๋ Reverse commit์ด๋ค. ์ด ๊ธฐ๋ฅ์ ๋ฐ๋ก ์ฝ๋๋ค์ ๋ฐ๋ก ์ ์ปค๋ฐ ๋จ๊ณ์ํ๋ก ๋ง๋ค๋ฉด์ ์๋ก์ด ์ปค๋ฐ์ ํ๋ ์์ฑํ๋ค(์๋ก์ด ์ปค๋ฐ์๋ Revert๋ผ๊ณ ๋ธ)
- ๋ฐ๋ก ์ ๋จ๊ณ commit์ด ์๋ ์ ์ ๋จ๊ณ ๋ฑ์ผ๋ก ๋์ด๊ฐ๋ ค๊ณ ํ๋ฉด conflict๊ฐ ๋ฐ ๊ฒ์ด๋ค.(์ ์ ๋จ๊ณ๋ก ๊ฐ๋ ค๋ฉด Revert 2๋ฒ ํ๋ฉด ๋ ๋ฏ)
-
unstaged files(์ด ์์ญ์ Working copy๋ผ๊ณ ๋ถ๋ฆ) vs staged files(์ด ์์ญ์ index ๋๋ staging area๋ผ๊ณ ๋ถ๋ฆ)
- unstaged files: ๋ณ๊ฒฝ์ฌํญ์ด ์๊ธด ํ์ผ๋ค์ ๋ชฉ๋ก์ด ๋จ๋ ๊ณณ์ด๋ค.
- staged files: unstaged files ์ค์ ์ ํํด์ stagedํ๋ฉด ์ด ๊ณณ์ผ๋ก ๋์ด์จ๋ค.
- Unstaged files์ ์ ํํ๋ ํ์๋ฅผ add๋ผ๊ณ ํ๋ค.(addํ๋ฉด Staged files๋ก ๋์ด๊ฐ๋ค.)
- staging area์ ์ฌ๋ผ์ ์๋ ํ์ผ๋ค์ commitํ๋ฉด repository์ ํ๋์ ๋ฒ์ ์ผ๋ก ์ฌ๋ผ๊ฐ๋ค.
-
branch: branch๋ฅผ ํ๋ ๋ง๋ค๊ณ (์คํ์ด๋ ๋ธ๋์น) ๋ง์คํฐ๋ก ์ ํํ ๋ค์ commit์ ์ด 3๊ฐํ๋ค. ๋ง์คํฐ๋ 3๊ฐ์ ์ปค๋ฐ์ ์คํ ๋ธ๋์น๋ณด๋ค ์์ ์์ ๊ฒ์ด๋ค. ์ด์ํ์์ ์คํ ๋ธ๋์น๋ฅผ ์ ํํ๋ฉด ์คํ ๋ธ๋์น์ผ๋์ ์ํฉ์ผ๋ก ์ฝ๋๋ค์ด ๋ฐ๋๋ค.
-
merge: ์คํ ๋ธ๋์น, ๋ง์คํฐ ๋ธ๋์น๊ฐ ์๋ค. ์คํ ๋ธ๋์น ๋ด์ฉ์ ๋ง์คํฐ ๋ธ๋์น๋ก mergeํ๊ณ ์ถ์ ๊ฒฝ์ฐ, ๋ง์คํฐ ๋ธ๋์น๋ฅผ ์ ํ(checkout)ํ๊ณ ์คํ ๋ธ๋์น ์ค๋ฅธ์ชฝ ๋๋ฌ์ merge๋ฅผ ๋๋ฅธ๋ค.
-
merge conflict ํด๊ฒฐ:
fast-forward vs 3-way-merge
fast-forward๋ ๋จ์ํ ํฌ์ธํฐ๋ฅผ ์ต์ ์ปค๋ฐ์ผ๋ก ์ฎ๊ธฐ๋ ๊ฒ์ ๋งํฉ๋๋ค. ์๋ฅผ ๋ค์ด์ commit 0,1,2๊ฐ ์์๋๋ก ์๊ณ commit 2์ master ๋ธ๋์น๊ฐ ์๋ค๊ณ ์นฉ๋๋ค. ์ด ์ํ์์ ์๋ก์ด ๋ธ๋์น์ธ slave๊ฐ commit 3์ ๋ง๋ค์๋ค๊ณ ์นฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ํ์ฌ ๋ธ๋์น์ธ slave์์ master ๋ธ๋์น๋ก mergeํ ๊ฒฝ์ฐ, master ๋ธ๋์น๊ฐ commit 3๋ก ๋จ์ํ ์ฎ๊ธฐ๊ฒ ๋ฉ๋๋ค. ๊ทธ ์ด์ ๋ commit3๊ฐ commit2์์ ํ์๋๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ด๋ฐ ์ํฉ์ fast-forward๋ผ๊ณ ํฉ๋๋ค.
์๋ ์ฐธ์กฐ
Merge
์ด ์ํ์์ git merge main
ํ๋ฉด ์๋ฌด ์ผ๋ ์ ์ผ์ด๋๋ค.
์ด ์ํ์์ git merge sub
ํ๋ฉด ์๋์ ๊ฐ์ด ๋๋ค.
์ด๊ฒ fast-forward์ด๋ค.
์ด ์ํ์์ get merge sub1
ํ๋ฉด ์๋์ ๊ฐ์ด ๋๋ค.
์ด๊ฒ 3-way merge์ด๋ค.