์ด์ ๋ฒ์ ์ ๋นํด ์ ๋ฒ์ ์๋ 745๊ฐ์ ๋ณ๊ฒฝ ์ฌํญ์ด ํฌํจ๋์์ผ๋ฉฐ, 74๋ช
์ ๊ฐ๋ฐ์๊ฐ ์ฐธ์ฌํ์ฌ ์ค๋นํ์ผ๋ฉฐ, ์ด ์ค 18๋ช
์ด ์ฒ์์ผ๋ก ๊ฐ๋ฐ์ ์ฐธ์ฌํ์ต๋๋ค.
- ๋ฆด๋ฆฌ์ค 1.18๋ถํฐ ์ฌ์ฉํ ์ ์๋ ์๋ก์ด ์ปค๋ฐ ๋ฆฌ๋ฒ ์ด์ค ๋ชจ๋ "git rebase --rebase-merges"๋ ํ์ฌ ๋ ์ด์ ์ฌ์ฉ๋์ง ์๋ ์ด์ "--preserve-merges" ์ต์
์ ๋์ฒดํฉ๋๋ค. "git rebase" ์์
์ ์ผ๋ จ์ ์ปค๋ฐ์ ์๋ก์ด ๊ธฐ๋ณธ ์ปค๋ฐ์ผ๋ก ๋ฐ๊พธ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด ์๋ก์ด ๊ธฐ๋ฅ์ ๊ฐ๋ฐํ๋ ๋ณ๋์ ๋ธ๋์น๋ฅผ ๋ง์คํฐ ๋ธ๋์น์ ํ์ฌ ์ํ๋ก ์ด๋ํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์ฌ๊ธฐ์๋ ๋ธ๋์น ๋ค์ ์ถ๊ฐ๋ ์์ ์ฌํญ์ด ํฌํจ๋ฉ๋๋ค. :
o - o - o(๋ด ๊ธฐ๋ฅ)
/
o - o - o - o - o (๋ง์คํฐ)
o - o - o(๋ด ๊ธฐ๋ฅ)
/
o - o - o - o - o (๋ง์คํฐ)
๋ง์ด๊ทธ๋ ์ด์ ๋ ๋ธ๋์น์์ ๋ธ๋์น ๊ตฌ์กฐ๋ฅผ ๋ณด์กดํ๊ธฐ ์ํด ์ด์ ์๋ "--preserve-merges" ์ต์ ์ ์ฌ์ฉํ ์ ์์์ต๋๋ค. ์ด ์ต์ ์ ๋ํํ ๋ชจ๋(git rebase -i --preserve-merges)์์ ์คํํ ๋ ์ปค๋ฐ ๊ธฐ๋ก ํธ์ง์ ํ์ฉํ์ง๋ง ์ ์ฅ์ ๊ตฌ์กฐ์ ์์ ํ ๋ณด์กด์ ๋ณด์ฅํ์ง ์์ต๋๋ค. ์๋ก์ด "--rebase-merges" ๋ชจ๋๋ฅผ ์ฌ์ฉํ๋ฉด ๋ง์ด๊ทธ๋ ์ด์ ์ค์ธ ๋ธ๋์น์ ๋ณ๊ฒฝ ์ฌํญ ๊ตฌ์กฐ๋ฅผ ๋ณด์กดํ๋ ๋์์ ์ปค๋ฐ ์ญ์ , ์ฌ๊ทธ๋ฃนํ, ์ด๋ฆ ๋ฐ๊พธ๊ธฐ๋ฅผ ํฌํจํ ๊ด๋ฒ์ํ ๋ํํ ์์ ์ ์ ๊ณตํ ์ ์์ต๋๋ค.
์: "--rebase-merges"
๊ทธ๊ฒ์ ์ ์์ต๋๋ค ๋ง์ด๊ทธ๋ ์ด์ ๋ ๋ธ๋์น์ ๋ธ๋์น ๊ตฌ์กฐ๋ฅผ ์ ์งํ๋ฉด์ ๋ณ๋์ ๋ธ๋์น์์ ์ต์ ๋ง์คํฐ ๋ธ๋์น๋ก ์ปค๋ฐ์ ๋ค์ ์ ๋ก๋ํ๊ณ ์ฆ์ ์ปค๋ฐ ๋ฉ๋ชจ๋ฅผ ์ผ๋ถ ๋ณ๊ฒฝํฉ๋๋ค. - "git Branch new A...B" ๋ฐ "git checkout -b new ๊ตฌ์ฑ์ ์ฌ์ฉํ์ฌ ๋ค๋ฅธ ๋ ๋ธ๋์น(๋ณํฉ ๋ฒ ์ด์ค, ๊ณตํต ์กฐ์์ ๋ฐ์ธ๋ฉ)์ ๋ณํฉ ๋ฒ ์ด์ค๋ฅผ ๊ฒฐ์ ํ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ ๋ธ๋์น๋ฅผ ์์ฑํ๊ธฐ ์ํ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค. A...Bโ, ์ฌ๊ธฐ์ โA ...Bโ๋ โgit checkout A...Bโ๊ฐ HEAD๋ฅผ ๊ธฐ๋ณธ ์ปค๋ฐ์ผ๋ก ์ด๋ํ๊ณ โdiff A. ..B"๋ ์ปค๋ฐ "B"์ ์ปค๋ฐ "A" "Ancestor" ์ฌ์ด์ ๋ณ๊ฒฝ ์ฌํญ์ ๋ณด์ฌ์ค๋๋ค.
์๋ฅผ ๋ค์ด ๋ณ๋์ my-feature ๋ธ๋์น์์ ์์ ํ ๋ ๋ค๋ฅธ ๋ธ๋์น(์: my-feature ๋ธ๋์น๊ฐ ์ฒดํฌ์์๋ ๋ง์คํฐ ๋ธ๋์น์ ๋์ผํ ์์น)์์ ์์ํ๋ ค๋ ๊ฒฝ์ฐ ์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด์ ์๋ ๋ณ๊ฒฝ ๋ด์ญ์ด ๋ง์ ๊ฒฝ์ฐ ๋ถํธํ๋ ๋ณ๊ฒฝ ๋ก๊ทธ๋ฅผ ์๋์ผ๋ก ๊ฒ์ฌํ ๋ค์ "git merge-base master my-feature"๋ฅผ ์คํํ์ฌ ๋ง์คํฐ์ my-feature ๋ถ๊ธฐ ์ฌ์ด์ ๋ณํฉ ๋ฒ ์ด์ค ํด์๋ฅผ ๊ณ์ฐํด์ผ ํ์ต๋๋ค. ๊ณตํต ์กฐ์์ธ "git Branch my-other-feature hash"๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ๋ธ๋์น๋ฅผ ์์ฑํฉ๋๋ค. Git 2.22์์๋ "git Branch my-other-feature A...B" ๊ตฌ๋ฌธ์ ์ฌ์ฉํ์ฌ ๋ค๋ฅธ ๋ ๋ธ๋์น์ ๋ณํฉ ๊ธฐ๋ฐ์ ๊ธฐ์ค์ผ๋ก ๋ธ๋์น๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
- ์ฒดํฌ์์ ์์ ์ค์ ์ป์ ๋ธ๋์น ์ด๋ฆ์ ํ์ํ๊ธฐ ์ํด "git Branch --show-current" ์ต์ ์ ์ถ๊ฐํ์ต๋๋ค.
- ์ฒดํฌ์์ ์์ ์ ์ํํ ๋ dir ๋๋ ํฐ๋ฆฌ์ ๋ด์ฉ์ ๋ง์คํฐ ๋ธ๋์น์ ์ํ์ ์์ ํ ์ผ์นํ๋ ํ์์ผ๋ก ๊ฐ์ ธ์ฌ ์ ์๋ "git checkout โno-overlay โ dir" ์ต์ ์ด ์ถ๊ฐ๋์์ต๋๋ค. ์๋ฅผ ๋ค์ด, master ๋ธ๋์น์ ์๋ dir ๋๋ ํฐ๋ฆฌ์ ๋ก์ปฌ ๋ณต์ฌ๋ณธ์ ํ์ผ์ด ์๋ ๊ฒฝ์ฐ ๊ธฐ๋ณธ์ ์ผ๋ก "git checkout master - dir"์ ์คํํ ๋ ํด๋น ํ์ผ์ ๋จ๊ฒ ๋๋ฉฐ "--no-overlay" โ ์ต์ ์ด ์ง์ ๋๋ฉด ์ญ์ ๋ฉ๋๋ค.
- "git diff" ๋ช ๋ น์ ์ต์ ๊ตฌ๋ฌธ ๋ถ์์ ์ํด ๋ฒ์ฉ API๋ฅผ ์ฌ์ฉํ๋ฏ๋ก ๋ค๋ฅธ git ์ ํธ๋ฆฌํฐ์ ์ต์ ์ฒ๋ฆฌ๋ฅผ ํตํฉํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, "git diff"์์ ๋ชจ๋ ์ต์ ์๋ ์ด์ ์ ๋์("--function-context" ๋ฐ "--no-function-context")๊ฐ ์์ต๋๋ค.
- "git log" ์ถ๋ ฅ์ ์ปค๋ฐ์ ์ฒจ๋ถ๋ ํ์ฅ ํ๊ทธ๋ฅผ ํํฐ๋งํ๋ ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋์์ต๋๋ค("ํธ๋ ์ผ๋ฌ" - Signed-off-by ๋ฐ Co-authored-by์ ๊ฐ์ ์ถ๊ฐ ์ ๋ณด ํ๋๊ทธ). ํค์ ๊ฐ์ ๋ชจ๋ ๊ธฐ์ค์ผ๋ก ๋ผ๋ฒจ์ ํํฐ๋งํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
"git log --pretty="%(trailers:key=๊ฒํ ์,๊ฐ๋ง)"; - ๋ณด๋ค ์ ์ฐํ๊ณ ๊ตฌ์กฐํ๋ ์ถ๋ ฅ ํ์์ ์ ๊ณตํ๋ ์๋ก์ด ์ถ์ ์์ง์ธ Trace2๊ฐ ์ถ๊ฐ๋์์ต๋๋ค. Trace2๋ฅผ ์ฌ์ฉํ๋ฉด ๋ณด๋ค ์์ธํ ๋ถ์ ๋ฐ ๋๋ฒ๊น ์ ์ํด ์คํ๋ ์์ ๋ฐ ์ฑ๋ฅ ๋ฐ์ดํฐ์ ๋ํ ์๊ฒฉ ์ธก์ ์ ์์งํ ์ ์์ต๋๋ค(ํธ๋ค๋ฌ๋ ์ฌ์ฉ์๊ฐ ํ ๋นํ๋ฉฐ ๋ฐ์ดํฐ๋ ์ธ๋ถ๋ก ์ ์ก๋์ง ์์ต๋๋ค).
- "git bisect" ๋ณด๊ณ ์์ ๊ฐ๋ ์ฑ์ด ํฅ์๋์ด ๋ฌธ์ ๊ฐ ์๋ ์ปค๋ฐ์ด ๋์ฑ ๋ช ํํ๊ฒ ๊ฐ์กฐ ํ์๋๊ณ ๊ฐ ํ์ผ์ ๋ณ๊ฒฝ ์ฌํญ์ ๋ํ ์์ฝ ํต๊ณ๊ฐ ํ์๋ฉ๋๋ค(๋ณ๊ฒฝ๋ ์ค ์ ์์ค์์).
- ์ด๋ฆ ๋ณ๊ฒฝ ๋ ์ด๋ธ์ ์๋ชป๋ ์ค์น๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ๋๋ ํฐ๋ฆฌ ์ด๋ฆ ๋ณ๊ฒฝ์ ๊ฒฐ์ ํ๊ธฐ ์ํ ๊ฒฝํ์ ๋ฐฉ๋ฒ์ด ์ฌ์์ ๋์์ต๋๋ค. ์์ฌ์ค๋ฌ์ด ๊ฒฝ์ฐ ํด๋น ๋๋ ํ ๋ฆฌ๋ ์ด์ ์ถฉ๋ํ๋ ๊ฒ์ผ๋ก ํ์๋ฉ๋๋ค.
- ๋ค๋ฅธ ํ๊ทธ์ ํ๊ทธ๋ฅผ ์ค์นํ๋ ค๊ณ ํ๋ฉด ๊ฒฝ๊ณ ๊ฐ ํ์๋ฉ๋๋ค. ์ด๋ ์ผ๋ฐ์ ์ผ๋ก ์ค์๋ก ์ํ๋๋ฉฐ ์๋ชป๋ ์ปค๋ฐ์ ํ๊ทธ๋ฅผ ์ค์ ํ๊ฒ ๋ ์ ์์ต๋๋ค(์: "git tag -f -m "updated message"์ ๊ฐ์ ๊ตฌ์ฑ). my-tag1 my-tag2โณ๋ ์ด์ ํ๊ทธ์ ํ๊ทธ๊ฐ ์์ฑ๋๋ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ ธ์ค์ง๋ง ๊ฐ๋ฐ์๋ ์ด์ ํ๊ทธ๊ฐ ๊ฐ๋ฆฌํค๋ ์ปค๋ฐ์ ์ ํ๊ทธ๊ฐ ์ค์น๋ ๊ฒ์ผ๋ก ์์ํ์ต๋๋ค.
- ๊ฐ ์ปค๋ฐ์ ์ฌ์ฉํ ์ ์๋ ๊ฐ์ฒด ์งํฉ์ ๋ํ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ๊ธฐ๋ณธ ๊ฐ์ฒด์ ์กด์ฌ๋ฅผ ๋น ๋ฅด๊ฒ ํ์ธํ ์ ์๋ ๋นํธ๋งต ์ ์ฅ์(๋์คํฌ ๊ธฐ๋ฐ "์ ๊ทผ์ฑ ๋นํธ๋งต" ๊ตฌ์กฐ)์ ๋ํ ์์ฑ์ด ํ์ฑํ๋ฉ๋๋ค. ์ด ๊ตฌ์กฐ๋ ๋ฐ์ดํฐ ๊ฒ์ ์์ (git fetch)์ ์คํ ์๊ฐ์ ํฌ๊ฒ ์ค์ฌ์ค๋๋ค.
์ถ์ฒ : opennet.ru