Skip to content

Latest commit

ย 

History

History
499 lines (385 loc) ยท 19.8 KB

File metadata and controls

499 lines (385 loc) ยท 19.8 KB
title title-ko page_group page_order comments
Rebasing
๋ฆฌ๋ฒ ์ด์Šค
rysgit
5
true

Rebasing

์šฐ๋ฆฌ์˜ ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ์ž์„ธํžˆ ์‚ดํŽด๋ณด๋Š” ๊ฒƒ์œผ๋กœ ์ด๋ฒˆ ์žฅ์„ ์‹œ์ž‘ํ•˜์ž. ์•„๋ž˜์˜ ๋ณ„ํ‘œ(*)๋กœ ํ‘œ์‹œ๋œ ์—ฌ์„ฏ ๊ฐœ์˜ commit์€ ๊ฐ™์€ ์ƒ๊ฐ์˜ ํ๋ฆ„์— ์žˆ๋Š” ๋ถ€๋ถ„์ด๋‹ค. ์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ๋“ค์„ feature branch๋กœ ๋งŒ๋“ค์–ด ๊ฐœ๋ฐœํ–ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜, ๋ณ„๋„์˜ merge commit(b9ae1bc)์œผ๋กœ ์ธํ•ด ๋‹ค๋ฅธ branch์˜ commit๊ณผ ํ•จ๊ป˜ ์—ฌ๊ธฐ์ €๊ธฐ ๋ฐฐ์น˜๋˜์–ด ํ‘œ์‹œ๋œ๋‹ค. ๋‹ค์‹œ ๋งํ•ด, ์šฐ๋ฆฌ์˜ ์ €์žฅ์†Œ ํžˆ์Šคํ† ๋ฆฌ๋Š” ์–ด์ง€๋Ÿฝ๊ฒŒ ์„ž์—ฌ ์žˆ๋‹ค:

ec1b8cb Merge branch 'crazy'
*42fa173 Add news item for rainbow
3db88e1 Add 1st news item
*7147cc5 Link index.html to rainbow.html
*6aa4b3b Add CSS stylesheet to rainbow.html
b9ae1bc Merge branch 'master' into crazy
ae4e756 Link HTML pages to stylesheet
98cd46d Add CSS stylesheet
*33e25c9 Rename crazy.html to rainbow.html
*677e0e0 Add a rainbow to crazy.html
506bb9b Revert "Add a crazzzy experiment"
*514fbe7 Add a crazzzy experiment
1c310d2 Add navigation links
54650a3 Create blue and orange pages
b650e4b Create index page

๋‹คํ–‰์Šค๋Ÿฝ๊ฒŒ๋„, Git์€ ์šฐ๋ฆฌ commit๋“ค์„ ์ •๋ฆฌํ•˜๋„๋ก ๋•๊ธฐ ์œ„ํ•ด ํˆด์„ ์ œ๊ณตํ•œ๋‹ค: git rebase. ๋ฆฌ๋ฒ ์ด์Šค๋Š” base๊ฐ€ ๋˜๋Š” commit์„ ๋ณ€๊ฒฝํ•จ์œผ๋กœ์„œ branch๋ฅผ ์ด๋™์‹œ์ผœ ์ค€๋‹ค. ๊ฐœ๋…์ ์œผ๋กœ, ์ด๊ฒƒ์ด ์šฐ๋ฆฌ๊ฐ€ ํ•˜๋„๋ก ํ—ˆ๋ฝ๋œ ๊ฒƒ์ด๋‹ค:

master์œ„์— feature branch ๋ฆฌ๋ฒ ์ด์Šค

๋ฆฌ๋ฒ ์ด์Šค ์ดํ›„, feature branch๋Š” ์ƒˆ๋กœ์šด ๋ถ€๋ชจ commit์„ ๊ฐ€์ง€๋Š”๋ฐ master๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ commit์ด๋‹ค. merge commit์œผ๋กœ branch๋ฅผ ๊ฒฐํ•ฉํ•˜๋Š” ๋Œ€์‹ ์—, ๋ฆฌ๋ฒ ์ด์Šค๋Š” master์˜ ๋‹ค์Œ์— feature branch๋ฅผ ์„ธ์›€์œผ๋กœ์„œ ํ†ตํ•ฉํ•œ๋‹ค. ๊ทธ ๊ฒฐ๊ณผ ์™„์ „ํ•œ ์„ ํ˜•์˜ ํžˆ์Šคํ† ๋ฆฌ๊ฐ€ ๋˜๊ณ  ์œ„์—์„œ ๋ณธ ๊ด€๋ จ์—†๋Š” ํ•ญ๋ชฉ๋ผ๋ฆฌ ๋’ค์ฃฝ๋ฐ•์ฃฝ ๋œ ๊ฒƒ๋ณด๋‹ค๋Š” ๋”๋‚˜์€ ์Šคํ† ๋ฆฌ์ฒ˜๋Ÿผ ์ฝํ˜€์ง„๋‹ค.

Git์˜ ๋ฆฌ๋ฒ ์ด์Šค ๋Šฅ๋ ฅ์„ ์‚ดํŽด๋ณด๊ธฐ ์œ„ํ•ด, ์šฐ๋ฆฌ๊ฐ€ ํ•ด์•ผ ํ•  ์ž‘์—…์„ ์œ„ํ•ด ์šฐ๋ฆฌ์˜ ์˜ˆ์ œ ํ”„๋กœ์ ํŠธ๋ฅผ ๋” ๊ฐœ๋ฐœํ•  ํ•„์š”๊ฐ€์žˆ์„ ๊ฒƒ์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‚˜์„œ, ์šฐ๋ฆฌ๋Š” ๋‹ค์‹œ ๋Œ์•„์™€์„œ git rebase๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ์žฌ์ž‘์„ฑ(rewrite)ํ•  ๊ฒƒ์ด๋‹ค.

์ด๋ฒˆ ์žฅ์„ ์œ„ํ•œ ์ €์žฅ์†Œ ๋‹ค์šด๋กœ๋“œ ๋ฐ›๊ธฐ

์ด์ „ ์žฅ์—์„œ๋ถ€ํ„ฐ ๊ณ„์† ์ง„ํ–‰์ค‘์ด๋ผ๋ฉด, ์—ฌ๋Ÿฌ๋ถ„์€ ์ด๋ฏธ ํ•„์š”ํ•œ ๋ชจ๋“  ๊ฒƒ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด, ์œ„์˜ ๋งํฌ์—์„œ ์••์ถ•๋œ Git ์ €์žฅ์†Œ๋ฅผ ๋‹ค์šด๋กœ๋“œ ๋ฐ›์•„ ์••์ถ•์„ ํ’€์ž. ๊ทธ๋ฆฌ๊ณ  ๋‚˜์„œ ์ง„ํ–‰ํ•ด๋„ ์ข‹๋‹ค.

About ์„น์…˜ ๋งŒ๋“ค๊ธฐ

์šฐ๋ฆฌ๋Š” ์›น์‚ฌ์ดํŠธ๋ฅผ ์œ„ํ•œ about ํŽ˜์ด์ง€๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์‹œ์ž‘ํ•  ๊ฒƒ์ด๋‹ค. ๊ธฐ์–ตํ•˜์ž, ์šฐ๋ฆฌ๋Š” ํ”„๋กœ์ ํŠธ์˜ ์•ˆ์ •ํ™”๋œ ๋ฒ„์ „์— ์˜๋„ํ•˜์ง€ ์•Š์€ ๋ณ€๊ฒฝ์„ ์œ ๋ฐœํ•˜์ง€ ์•Š๊ธฐ ์œ„ํ•ด์„œ ๋ณ„๋„์˜ branch์—์„œ ์šฐ๋ฆฌ์˜ ๋ชจ๋“  ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ๊ฒƒ์ด๋‹ค.

git branch about
git checkout about

๋‹ค์Œ์˜ ๋ช‡ ๋‹จ๊ณ„๋Š” ๋ฆฌ๋ฒ ์ด์Šค์˜ ํšจ๊ณผ๋ฅผ ํ™•์ธํ•ด ๋ณผ ์ˆ˜ ์žˆ๋„๋ก ์ด ๊ธฐ๋Šฅ(feature)์„ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ž‘์€ commit์œผ๋กœ ๋‚˜๋ˆˆ๋‹ค. ๋จผ์ €, my-git-repo์— about์ด๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ์ƒˆ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•˜์ž. ๊ทธ๋ฆฌ๊ณ ๋‚˜์„œ, about/index.html์˜ ๋นˆ ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜์ž. ์Šค๋ƒ…์ƒท์„ stageํ•˜๊ณ  commitํ•˜์ž.

git add about
git status
git commit -m "Add empty page in about section"

git add๋Š” ๋˜ํ•œ ์Šคํ…Œ์ด์ง€ ์˜์—ญ(staging area)์— ๋””๋ ‰ํ† ๋ฆฌ ์ „์ฒด๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜๋„ ์žˆ์Œ์„ ์ฃผ๋ชฉํ•˜์ž.

About Page ์ถ”๊ฐ€ํ•˜๊ธฐ

๋‹ค์Œ, ์šฐ๋ฆฌ๋Š” about/index.html์— ์•ฝ๊ฐ„์˜ HTML์„ ์ถ”๊ฐ€ํ•  ๊ฒƒ์ด๋‹ค:

<!DOCTYPE html>
<html lang="en">
<head>
  <title>About Us</title>
  <link rel="stylesheet" href="../style.css" />
  <meta charset="utf-8" />
</head>
<body>
  <h1>About Us</h1>
  <p>We're a small, colorful website with just two employees:</p>

  <ul>
    <li><a href="me.html">Me: The Developer</a></li>
    <li><a href="mary.html">Mary: The Graphic Designer</a></li>
  </ul>
    
  <p><a href="../index.html">Return to home page</a></p>
</body>
</html>

์Šค๋ƒ…์ƒท์„ stageํ•˜๊ณ  commitํ•˜์ž.

git status
git commit -a -m "Add contents to about page"

์ด branch์— ๋ช‡ ๋ฒˆ์˜ commit์„ ํ•œ ์ดํ›„, ์šฐ๋ฆฌ์˜ ํžˆ์Šคํ† ๋ฆฌ๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ๋ณด์ผ ๊ฒƒ์ด๋‹ค.

about branch ์ถ”๊ฐ€ํ•˜๊ธฐ

๋˜๋‹ค๋ฅธ ๊ธด๊ธ‰ ์—…๋ฐ์ดํŠธ!

์šฐ๋ฆฌ ์‚ฌ์žฅ๋‹˜์ด ์ข€ ๋” ๊ธด๊ธ‰ ๋‰ด์Šค(breaking news)๋ฅผ ๊ฐ€์ ธ์˜ค์…จ๋‹ค! ๋‹ค์‹œ, ์šฐ๋ฆฌ๋Š” about page ๊ฐœ๋ฐœ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๊ณ  ์‚ฌ์ดํŠธ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๊ธฐ ์œ„ํ•ด hotfix branch๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ์ด๋‹ค. ์—…๋ฐ์ดํŠธ๋Š” about branch๊ฐ€ ์•„๋‹Œ master๋ฅผ base๋กœ ํ•ด์•ผ ํ•จ์„ ํ•„ํžˆ ํ™•์ธํ•˜์ž:

git checkout master
git branch news-hotfix
git checkout news-hotfix
git branch

index.html ์•ˆ์˜ โ€œNewsโ€ ์„น์…˜์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ณ€๊ฒฝํ•˜์ž:

<h2 style="color: #C00">News</h2>
<ul>
  <li><a href="news-1.html">Blue Is The New Hue</a></li>
  <li><a href="rainbow.html">Our New Rainbow</a></li>
  <li><a href="news-2.html">A Red Rebellion</a></li>
</ul>

์Šค๋ƒ…์ƒท์„ commitํ•˜์ž:

git status
git commit -a -m "Add 2nd news item to index page"

๊ทธ๋ฆฌ๊ณ , news-2.html ์ด๋ฆ„์œผ๋กœ ์ƒˆ๋กœ์šด ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค์ž:

<!DOCTYPE html>
<html lang="en">
<head>
  <title>A Red Rebellion</title>
  <link rel="stylesheet" href="style.css" />
  <meta charset="utf-8" />
</head>
<body>
  <h1 style="color: #C03">A Red Rebellion</h1>
    
  <p>Earlier today, several American design firms
  announced that they have completely rejected the use
  of blue in any commercial ventures. They have
  opted instead for <span style="color: #C03">Red</span>.</p>
    
  <p><a href="index.html">Return to home page</a></p>
</body>
</html>

๋˜๋‹ค๋ฅธ ์Šค๋ƒ…์ƒท์„ stageํ•˜๊ณ  commitํ•˜์ž:

git add news-2.html
git status
git commit -m "Add article for 2nd news item"

๋‰ด์Šค ํ•ซํ”ฝ์Šค ๊ฒŒ์‹œํ•˜๊ธฐ

์šฐ๋ฆฌ๋Š” ๋‹ค์‹œ master๋กœ news ์—…๋ฐ์ดํŠธ๋ฅผ mergeํ•  ์ค€๋น„๊ฐ€ ๋˜์—ˆ๋‹ค.

git checkout master
git merge news-hotfix
git branch -d news-hotfix

master branch๋Š” ์šฐ๋ฆฌ๊ฐ€ news-hotfix๋ฅผ ์ƒ์„ฑํ•œ ์ดํ›„๋กœ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์•˜๋‹ค. ๊ทธ๋ž˜์„œ Git์€ ํŒจ์ŠคํŠธ-ํฌ์›Œ๋“œ(๋นจ๋ฆฌ๊ฐ๊ธฐ) merge๋ฅผ ์ˆ˜ํ–‰ํ•  ๊ฒƒ์ด๋‹ค. ์šฐ๋ฆฌ์˜ ์ €์žฅ์†Œ๋Š” ์ด์ œ ๋‹ค์Œ์ฒ˜๋Ÿผ ๋ณด์ผ ๊ฒƒ์ด๋‹ค.

news-hotfix๋กœ master๋ฅผ ํŒจ์ŠคํŠธ-ํฌ์›Œ๋”ฉ

About Branch ๋ฆฌ๋ฒ ์ด์Šค

์šฐ๋ฆฌ๋Š” ์ด์ „์— ์ฒ˜ํ–ˆ๋˜ 3-way merge์™€ ์™„์ „ํžˆ ๊ฐ™์€ ์œ„์น˜์— ๋†“์ด๊ฒŒ ๋˜์—ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” master์—์„œ feature branch๋กœ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๊ฐ€์ ธ์˜ค๊ธฐ ์›ํ•œ๋‹ค. ์ง€๊ธˆ์ด์•ผ๋ง๋กœ merge ๋Œ€์‹ ์— ๋ฆฌ๋ฒ ์ด์Šค๋ฅผ ์ˆ˜ํ–‰ํ•  ํƒ€์ž„์ด๋‹ค.

git checkout about
git rebase master
git log --oneline

์›๋ž˜, about branch๋Š” Merge branch 'crazy-experiment' commit์„ base๋กœ ํ•˜๊ณ  ์žˆ๋‹ค. ๋ฆฌ๋ฒ ์ด์Šค๋Š” about branch ์ „์ฒด๋ฅผ ๋“ค๊ณ ์™€์„œ master branch์˜ *๋๋ถ€๋ถ„(tip)*์— ํ๋‹น ๋–จ์–ด๋œจ๋ฆฐ๋‹ค. ๋˜ํ•œ, git merge ๋ช…๋ น์ฒ˜๋Ÿผ git rebase๋Š” ์ด๋™์‹œํ‚ฌ branch ์œ„์— ์žˆ๊ธฐ๋ฅผ ์š”๊ตฌํ•œ๋‹ค.

about branch๋ฅผ master์œ„์— ๋ฆฌ๋ฒ ์ด์Šค

๋ฆฌ๋ฒ ์ด์Šค ์ˆ˜ํ–‰ ์ดํ›„, about์€ master branch์˜ ์„ ํ˜• ํ™•์žฅ(linear extension)์ด ๋˜๊ณ , ์ถ”ํ›„์— ํŒจ์ŠคํŠธ-ํฌ์›Œ๋“œ merge ์ˆ˜ํ–‰์ด ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด ์ค€๋‹ค. ๋˜ํ•œ ๋ฆฌ๋ฒ ์ด์Šค๋Š” merge commit ์—†์ด๋„ master์˜ ๊ฐ€์žฅ ์ตœ์‹  ๋ฒ„์ „์„ ํ†ตํ•ฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด ์ค€๋‹ค.

Personal Bio ์ถ”๊ฐ€ํ•˜๊ธฐ

news hotfix์—์„œ ๋ฒ—์–ด๋‚˜, ์šฐ๋ฆฌ๋Š” ์ด์ œ about ์„น์…˜์— ๋Œ€ํ•œ ์ž‘์—…์„ ๊ณ„์†ํ•  ์ˆ˜ ์žˆ๋‹ค. ์•„๋ž˜ ๋‚ด์šฉ์„ ๊ฐ€์ง€๊ณ  about/me.html์„ ์ƒ์„ฑํ•˜์ž:

<!DOCTYPE html>
<html lang="en">
<head>
  <title>About Me</title>
  <link rel="stylesheet" href="../style.css" />
  <meta charset="utf-8" />
</head>
<body>
  <h1>About Me</h1>
  <p>I'm a big nerd.</p>

  <h2>Interests</h2>
  <ul>
    <li>Computers</li>
    <li>Mathematics</li>
    <li>Typography</li>
  </ul>

  <p><a href="index.html">Return to about page</a></p>
</body>
</html>

๊ทธ๋ฆฌ๊ณ , ์ €์žฅ์†Œ์— ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ commitํ•˜์ž.

git add about/me.html
git commit -m "Add HTML page for personal bio"
git log --oneline

๋ฆฌ๋ฒ ์ด์Šค ๋•๋ถ„์— about์ด master์˜ ๋‹ค์Œ์— ์œ„์น˜ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋จ์„ ๊ธฐ์–ตํ•˜์ž. ๊ทธ๋ž˜์„œ, ๋ชจ๋“  about ์„น์…˜ commit์€ ๊ฐ™์ด ๊ทธ๋ฃน์ง€์–ด์ง„๋‹ค. ๋งŒ์•ฝ ์šฐ๋ฆฌ๊ฐ€ ๋ฆฌ๋ฒ ์ด์Šค ๋Œ€์‹  merge๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค๋ฉด ์žˆ์„ ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ๋‹ค. ์ด๊ฒƒ์€ ๋˜ํ•œ ํ”„๋กœ์ ํŠธ ํžˆ์Šคํ† ๋ฆฌ์—์„œ ๋ถˆํ•„์š”ํ•œ ๋ถ„๊ธฐ๋ฅผ ์ œ๊ฑฐํ•ด ์ฃผ๊ธฐ๋„ ํ•œ๋‹ค.

Mary๋ฅผ ์œ„ํ•œ dummy page ์ถ”๊ฐ€ํ•˜๊ธฐ

๋‹ค์‹œ ํ•œ๋ฒˆ, ๋‹ค์Œ์˜ ๋‘ ์Šค๋ƒ…์ƒท์€ ๋ถˆํ•„์š”ํ•˜๊ฒŒ ์‚ฌ์†Œํ•œ ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿฌ๋‚˜, ์šฐ๋ฆฌ๋Š” ๋‚˜์ค‘์— ํ•˜๋‚˜์˜ commit์œผ๋กœ ๊ฒฐํ•ฉํ•˜๊ธฐ ์œ„ํ•ด ์ธํ„ฐ๋ ‰ํ‹ฐ๋ธŒ ๋ฆฌ๋ฒ ์ด์Šค(interactive rebase)๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ์ด๋‹ค. git rebase๋Š” branch์„ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด ์ค„ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ๊ฐœ๋ณ„ commit์„ ์›ํ•˜๋Š” ๋Œ€๋กœ ์กฐ์ž‘ํ•˜๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์ค€๋‹ค.

about ์„น์…˜์— ์ƒˆ๋กœ์šด ๋นˆ ํŒŒ์ผ์„ ๋งŒ๋“ค์ž: about/mary.html.

git add about
git status
git commit -m "Add empty HTML page for Mary's bio"

About ์„น์…˜์— ๋งํฌํ•˜๊ธฐ

๊ทธ๋ฆฌ๊ณ ๋‚˜์„œ, ๋‹ค์Œ์— ๋‚˜์˜ค๋Š” โ€œNavigationโ€ ์„น์…˜๊ณผ ๊ฐ™์ด index.html ์•ˆ์— about page์— ๋Œ€ํ•œ ๋งํฌ๋ฅผ ์ถ”๊ฐ€ํ•˜์ž.

<h2>Navigation</h2>
<ul>
  <li>
    <a href="about/index.html">About Us</a>
  </li>
  <li style="color: #F90">
    <a href="orange.html">The Orange Page</a>
  </li>
  <li style="color: #00F">
    <a href="blue.html">The Blue Page</a>
  </li>
  <li>
    <a href="rainbow.html">The Rainbow Page</a>
  </li>
</ul>

๋ณ€๊ฒฝ์‚ฌํ•ญ์„ commitํ•˜๋Š” ๊ฒƒ์„ ์žŠ์ง€ ๋ง์ž:

git commit -a -m "Add link to about section in home page"

Commit ํžˆ์Šคํ† ๋ฆฌ ์ •๋ฆฌํ•˜๊ธฐ

master branch๋กœ mergeํ•˜๊ธฐ ์ „์—, ์šฐ๋ฆฌ๋Š” feature branch ์•ˆ์— ๊น”๋”ํ•˜๊ณ , ์˜๋ฏธ์žˆ๋Š” ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ๊ฐ€์กŒ๋‹ค๊ณ  ํ™•์‹ ํ•ด์•ผ ํ•  ๊ฒƒ์ด๋‹ค. ์ธํ„ฐ๋ ‰ํ‹ฐ๋ธŒ(๋Œ€ํ™”์‹) ๋ฆฌ๋ฒ ์ด์Šค๋ฅผ ์ˆ˜ํ–‰ํ•จ์œผ๋กœ์„œ, ์šฐ๋ฆฌ๋Š” ์–ด๋–ป๊ฒŒ ๊ฐ commit์ด ์ƒˆ๋กœ์šด base๋กœ ์›€์ง์—ฌ์งˆ์ง€ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋‹ค. rebase ๋ช…๋ น์— -i ํ”Œ๋ž˜๊ทธ๋ฅผ ์ „๋‹ฌํ•˜์—ฌ ์ธํ„ฐ๋ ‰ํ‹ฐ๋ธŒ ๋ฆฌ๋ฒ ์ด์Šค์ž„์„ ๋ช…์‹œํ•˜์ž:

git rebase -i master

์ด๊ฒƒ์€ about branch์— ๋‚˜์˜ค๋Š” ๋ชจ๋“  commit๋“ค์ด ์˜ค๋ž˜๋œ ๊ฒƒ๋ถ€ํ„ฐ ์ตœ๊ทผ ๊ฒƒ๊นŒ์ง€ ๋‚˜์—ด๋œ ์ƒํƒœ๋กœ ํ…์ŠคํŠธ ์—๋””ํ„ฐ๊ฐ€ ์—ด๋ฆฌ๊ฒŒ ๋  ๊ฒƒ์ด๋‹ค. ๊ทธ ๋ชฉ๋ก์€ ์–ด๋–ป๊ฒŒ Git์ด ์ƒˆ๋กœ์šด base๋กœ commit์„ ์ด๋™ํ•  ๊ฒƒ์ธ์ง€ ์ •ํ™•ํžˆ ์ •์˜ํ•œ๋‹ค. ๊ทธ๋Œ€๋กœ ๋‘๋Š” ๊ฒƒ์€ ๋ณดํ†ต์˜ git rebase๋ฅผ ์ˆ˜ํ–‰ํ•˜์ง€๋งŒ, ์šฐ๋ฆฌ๊ฐ€ ๋ผ์ธ์„ ์ด๋™ํ•œ๋‹ค๋ฉด, commit์ด ์ ์šฉ๋˜๋Š” ์ˆœ์„œ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ฒŒ๋‹ค๊ฐ€, ์šฐ๋ฆฌ๋Š” ํŽธ์ง‘ํ•˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ์ปค๋ฐ‹๊ณผ ๊ฒฐํ•ฉํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ ๋ผ์ธ ์•ž์˜ pick ๋ช…๋ น์„ ๊ต์ฒดํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ชจ๋“  ๊ฐ€์šฉํ•œ ๋ช…๋ น์€ ๋ฆฌ๋ฒ ์ด์Šค ๋ชฉ๋ก์˜ ์ฃผ์„ ๋ถ€๋ถ„์— ๋‚˜์˜จ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ง€๊ธˆ ์šฐ๋ฆฌ๋Š” ๋‹จ์ง€ squash ๋ช…๋ น๋งŒ ํ•„์š”ํ•˜๋‹ค. ์ด๊ฒƒ์€ ์šฐ๋ฆฌ์˜ ๋ถˆํ•„์š”ํ•˜๊ฒŒ ์ž‘์€ commit๋“ค์„ ํ•˜๋‚˜์˜ ์˜๋ฏธ์žˆ๋Š” ์Šค๋ƒ…์ƒท์œผ๋กœ ์••์ถ•ํ•  ๊ฒƒ์ด๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ชฉ๋ก์„ ๋ณ€๊ฒฝํ•ด ๋ณด์ž:

pick 5cf316e Add empty page in about section
squash 964e013 Add contents to about page
pick 89db9ab Add HTML page for personal bio
squash 2bda8e5 Add empty HTML page for Mary's bio
pick 915466f Add link to about section in home page

๊ทธ๋ฆฌ๊ณ , ์—๋””ํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ๋‹ซ์•„์„œ ๋ฆฌ๋ฒ ์ด์Šค๋ฅผ ์‹œ์ž‘ํ•˜์ž. ๋‹ค์Œ ๋ชฉ๋ก์€ ๋ฆฌ๋ฒ ์ด์Šค ์ ˆ์ฐจ๋ฅผ ์ƒ์„ธํ•˜๊ฒŒ ๋ฌ˜์‚ฌํ•˜๋ฉฐ ์ง„ํ–‰ํ•˜๋Š” ๋™์•ˆ ์—ฌ๋Ÿฌ๋ถ„์ด ๋ณ€๊ฒฝํ•ด์•ผ ํ•  ๊ฒƒ์„ ์•Œ๋ ค์ค€๋‹ค.

  1. Git์€ 5cf316e commit์„ master์˜ ๋๋ถ€๋ถ„(tip)์œผ๋กœ ์˜ฎ๊ธด๋‹ค.
  2. Git์€ 964e013 ๊ณผ 5cf316e ์Šค๋ƒ…์ƒท์„ ๊ฒฐํ•ฉํ•œ๋‹ค.
  3. Git์€ ๊ฒฐํ•ฉ๋œ ์Šค๋ƒ…์ƒท์„ ์œ„ํ•ด ์‚ฌ์šฉํ•  commit ๋ฉ”์‹œ์ง€๋ฅผ ๋ฌด์—‡์œผ๋กœ ํ• ์ง€ ๋ฌป๊ธฐ์œ„ํ•ด ๋ฉˆ์ถ˜๋‹ค. ์ž๋™์ ์œผ๋กœ ๋‘ commit์˜ ๋ฉ”์‹œ์ง€๋ฅผ ํฌํ•จํ•˜์ง€๋งŒ ๊ทธ๊ฒƒ์„ ์‚ญ์ œํ•˜๊ณ  ๊ทธ๋ƒฅ Create the about page๋กœ ๊ฐ„๋‹จํžˆ ์“ธ ์ˆ˜ ์žˆ๋‹ค. ๊ณ„์† ์ง„ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ์ €์žฅํ•˜๊ณ  ์—๋””ํ„ฐ๋ฅผ ๋น ์ ธ๋‚˜๊ฐ„๋‹ค.
  4. Git์€ 89db9ab์™€ 2bda8e5 commit์— ๋Œ€ํ•ด ์ด ์ ˆ์ฐจ๋ฅผ ๋ฐ˜๋ณตํ•œ๋‹ค. Begin creating bio pages๋ฅผ ๋ฉ”์‹œ์ง€๋กœ ์‚ฌ์šฉํ•˜์ž.
  5. Git์€ ๋งˆ์ง€๋ง‰ commit 915466f)๋ฅผ ์ด์ „ ๋‹จ๊ณ„์— ์ƒ์„ฑํ•œ commit ๋‹ค์Œ์— ์ถ”๊ฐ€ํ•œ๋‹ค.

์—ฌ๋Ÿฌ๋ถ„์€ git log --oneline๊ณผ ์•„๋ž˜ ๋‹ค์ด์–ด๊ทธ๋žจ์œผ๋กœ ์ด ๋ชจ๋“  ํ™œ๋™์˜ ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. about์•ˆ์˜ ์›๋ž˜ ๋‹ค์„ฏ commit์€ ์„ธ ๊ฐœ๋กœ ์••์ถ•๋˜์—ˆ๊ณ , ๊ทธ ์ค‘ ๋‘ ๊ฐœ๋Š” ์ƒˆ๋กœ์šด ๋ฉ”์‹œ์ง€๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋˜์—ˆ๋‹ค. ๋˜ํ•œ ๋ชจ๋‘ ๋‹ค๋ฅธ commit ID๋ฅผ ๊ฐ€์กŒ๋‹ค๋Š” ๊ฒƒ์„ ์ฃผ๋ชฉํ•˜์ž. ์ด ์ƒˆ๋กœ์šด ID๋Š” ์šฐ๋ฆฌ๊ฐ€ commit๋“ค์˜ ๋ฌถ์Œ์„ ๊ทธ๋ƒฅ ์ด๋™ํ•œ ๊ฒƒ์ด ์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ์„ ๋งํ•ด์ค€๋‹ค ? ์šฐ๋ฆฌ๋Š” ๋ฌธ์ž๊ทธ๋Œ€๋กœ ์ƒˆ๋กœ์šด commit์œผ๋กœ ์ €์žฅ์†Œ ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ๋‹ค์‹œ ์ผ๋‹ค(rewritten)

์ธํ„ฐ๋ ‰ํ‹ฐ๋ธŒ ๋ฆฌ๋ฒ ์ด์Šค์˜ ๊ฒฐ๊ณผ

์ธํ„ฐ๋ ‰ํ‹ฐ๋ธŒ ๋ฆฌ๋ฒ ์ด์Šค๋Š” ํ”„๋กœ์ ํŠธ ํžˆ์Šคํ† ๋ฆฌ ์ „๋ฐ˜์— ์™„๋ฒฝํ•œ ์ปจํŠธ๋กค์„ ์ œ๊ณตํ•˜์ง€๋งŒ, ์ด๋Š” ๋˜ํ•œ ๋งค์šฐ ์œ„ํ—˜ํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋งŒ์•ฝ ๋ฆฌ๋ฒ ์ด์Šค ๋ชฉ๋ก์—์„œ ํ•œ ๋ผ์ธ์„ ์‚ญ์ œํ–ˆ๋‹ค๋ฉด, ๊ทธ์™€ ์—ฐ๊ด€๋œ commit์€ ์ƒˆ๋กœ์šด base๋กœ ์ด๋™๋˜์ง€ ์•Š์„ ๊ฒƒ์ด๊ณ  ๊ทธ ๋‚ด์šฉ์€ ์˜์›ํžˆ ์žƒ๊ฒŒ ๋  ์ˆ˜๋„ ์žˆ๋‹ค. ๋˜ํ•œ ๋‚˜์ค‘์— ์šฐ๋ฆฌ๋Š” ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ๋‹ค์‹œ์“ฐ๋Š” ๊ฒƒ์ด ๊ณต๊ณต(public) Git ์ €์žฅ์†Œ์— ์–ด๋–ค ๋ฌธ์ œ๊ฐ€ ์ผ์–ด๋‚  ์ˆ˜ ์žˆ๋Š”์ง€๋„ ์‚ดํŽด๋ณผ ๊ฒƒ์ด๋‹ค.

Commit์„ ์ˆ˜์ •ํ•˜๊ธฐ ์œ„ํ•ด ๋ฉˆ์ถ”๊ธฐ

์ด์ „์˜ ๋ฆฌ๋ฒ ์ด์Šค๋Š” ์˜ค์ง ๊ฐ commit์˜ ๋ฉ”์‹œ์ง€๋ฅผ ํŽธ์ง‘ํ•˜๊ธฐ ์œ„ํ•ด ๋ฉˆ์ถ”์—ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ํ•œ๋‹จ๊ณ„ ๋” ๋‚˜์•„๊ฐ€ ๋ฆฌ๋ฒ ์ด์Šค๋ฅผ ํ•˜๋Š” ๋™์•ˆ ์Šค๋ƒ…์ƒท์„ ๋ณ€๊ฒฝํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ๋˜๋‹ค๋ฅธ ์ธํ„ฐ๋ ‰ํ‹ฐ๋ธŒ ๋ฆฌ๋ฒ ์ด์Šค ์„ธ์…˜์„ ์‹คํ–‰ํ•˜์ž. ์šฐ๋ฆฌ๋Š” ์ƒˆ๋กœ์šด base๋กœ์„œ ์—ฌ์ „ํžˆ master๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๋ฐ ๊ทธ๊ฒƒ์€ about branch์—์„œ ์›ํ•˜๋Š” commit๋“ค์„ ์„ ํƒํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

git rebase -i master

์•„๋ž˜์™€ ๊ฐ™์ด ๋‘๋ฒˆ์งธ commit์„ ์œ„ํ•ด edit ๋ช…๋ น์„ ๋ช…์‹œํ•˜์ž.

pick 58dec2a Create the about page
edit 6ac8a9f Begin creating bio pages
pick 51c958c Add link to about section in home page

Git์ด ์ƒˆ๋กœ์šด base๋กœ ๋‘ ๋ฒˆ์งธ commit์„ ์›€์ง์ด๊ธฐ ์‹œ์ž‘ํ•  ๋•Œ, ์•ฝ๊ฐ„์˜ โ€œ์ˆ˜์ •(amending)โ€์„ ํ•˜๊ธฐ ์œ„ํ•ด ๋ฉˆ์ถœ ๊ฒƒ์ด๋‹ค. ์ด๊ฒƒ์€ commitํ•˜๊ธฐ ์ „์— staged ์Šค๋ƒ…์ƒท์„ ๋ณ€๊ฒฝํ•  ๊ธฐํšŒ๋ฅผ ์ค€๋‹ค.

commit ์ˆ˜์ •์„ ์œ„ํ•ด ๋ฉˆ์ถ”๊ธฐ

์šฐ๋ฆฌ๋Š” ๋ฆฌ๋ชจํŠธ (Remotes) ์—์„œ ๋งŒ๋‚  Mary๋ฅผ ์œ„ํ•ด ๋„์›€์ด ๋˜๋Š” ๊ณต์ง€๋ฅผ ๋‚จ๊ธธ ๊ฒƒ์ด๋‹ค. about/mary.html์„ ์—ด๊ณ  ๋‹ค์Œ์„ ์ถ”๊ฐ€ํ•˜์ž.

[Mary, please update your bio!]

์šฐ๋ฆฌ๋Š” ํ˜„์žฌ ๋ฆฌ๋ฒ ์ด์Šค ์•ˆ์˜ commit๋“ค ์‚ฌ์ด์— ์žˆ์ง€๋งŒ, ์ „์ฒด ํŠœํ† ๋ฆฌ์–ผ์„ ํ†ตํ•ด ํ–ˆ๋˜ ๊ฒƒ๊ณผ ์™„์ „ํžˆ ๋™์ผํ•œ ๋ฐฉ๋ฒ•ใ…‡๋กœ staged ์Šค๋ƒ…์ƒท์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค:

git add about/mary.html
git status
git commit --amend

์—ฌ๋Ÿฌ๋ถ„์€ git commit์— ์˜ํ•ด ์ƒ์„ฑ๋œ ๋””ํดํŠธ ๋ฉ”์‹œ์ง€๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์ƒˆ๋กœ์šด ?amend ํ”Œ๋ž˜๊ทธ๋Š” ์ƒˆ๋กœ์šด ๊ฒƒ์„ ์ƒ์„ฑํ•˜๋Š” ๋Œ€์‹ ์— Git์—๊ฒŒ ๊ธฐ์กด commit์„ staged snapshot์œผ๋กœ ๊ต์ฒดํ•˜๋„๋ก ๋ช…๋ นํ•œ๋‹ค. ์ด๊ฒƒ์€ ๋˜ํ•œ ๋ณดํ†ต์˜ ๊ฐœ๋ฐœ ์ค‘์— ์ข…์ข… ๋ฐœ์ƒํ•˜๋Š” ๋ฏธ์™„์„ฑ(premature) commit์„ ๊ณ ์น˜๋Š”๋ฐ ๋งค์šฐ ์œ ์šฉํ•˜๋‹ค.

์ธํ„ฐ๋ ‰ํ‹ฐ๋ธŒ ๋ฆฌ๋ฒ ์ด์Šค ๊ณ„์†ํ•˜๊ธฐ

์šฐ๋ฆฌ๊ฐ€ ๋ฆฌ๋ฒ ์ด์Šค ๋„์ค‘์ด๊ณ  Git์€ ์—ฌ์ „ํžˆ ์žฌ์Šน์ธ์„ ํ•„์š”๋กœํ•˜๋Š” ํ•˜๋‚˜ ์ด์ƒ์˜ commit์„ ๊ฐ€์ง€๊ณ  ์žˆ์Œ์„ ๊ธฐ์–ตํ•˜์ž. Git์—๊ฒŒ --continue ํ”Œ๋ž˜๊ทธ์™€ ํ•จ๊ป˜ ์ด๋™ํ•  ์ค€๋น„๊ฐ€ ๋˜์—ˆ์Œ์„ ์•Œ๋ ค์ฃผ์ž:

git rebase --continue
git log --oneline

์šฐ๋ฆฌ์˜ ํžˆ์Šคํ† ๋ฆฌ๋Š” ์—ฌ์ „ํžˆ ๋™์ผํ•˜๊ฒŒ ๋‚˜ํƒ€๋‚จ์— ์ฃผ๋ชฉํ•˜์ž (์™œ๋ƒํ•˜๋ฉด ์šฐ๋ฆฌ๋Š” ์œ„์—์„œ ๋””ํดํŠธ commit ๋ฉ”์‹œ์ง€๋ฅผ ์‚ฌ์šฉํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค), ๊ทธ๋Ÿฌ๋‚˜ Begin creating bio pages์€ ์ƒˆ๋กœ์šด ID์™€ ํ•จ๊ป˜ rebase ์ „๊ณผ๋Š” ๋‹ค๋ฅธ ๋‚ด์šฉ์„ ํฌํ•จํ•œ๋‹ค.

๋งŒ์•ฝ ๋ฆฌ๋ฒ ์ด์Šค ๋„์ค‘์— ์—ฌ๋Ÿฌ๋ถ„ ์Šค์Šค๋กœ ์žƒ์–ด๋ฒ„๋ฆฐ ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜์—ˆ๊ณ  ๊ณ„์† ์ง„ํ–‰ํ•˜๋Š” ๊ฒƒ์ด ๋‘๋ ต๋‹ค๋ฉด, ๊ทธ๊ฒƒ์„ ๋ฒ„๋ฆฌ๊ธฐ ์œ„ํ•ด -abort ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค์‹œ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค.

About ์„น์…˜ ๊ฒŒ์‹œํ•˜๊ธฐ

์ธํ„ฐ๋ ‰ํ‹ฐ๋ธŒ ๋ฆฌ๋ฒ ์ด์Šค์˜ ํ•ต์‹ฌ์€ ์šฐ๋ฆฌ๊ฐ€ master๋กœ ๋‹ค์‹œ mergeํ•  ์ˆ˜ ์žˆ๋Š” ์˜๋ฏธ์žˆ๋Š” ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ๋งŒ๋“ค์–ด๋‚ด๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ , master์˜ ๋๋ถ€๋ถ„(tip)์— about์„ ๋ฆฌ๋ฒ ์ด์Šคํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— Git์€ ๋‘ branch๋ฅผ ๊ฒฐํ•ฉํ•˜๊ธฐ ์œ„ํ•ด merge commit์„ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€์‹  ํŒจ์ŠคํŠธ ํฌ์›Œ๋“œ merge๋ฅผ ์ˆ˜ํ–‰ํ•  ๊ฒƒ์ด๋‹ค.

git checkout master
git log --oneline
git merge about
git log --oneline

๋ถˆํ•„์š”ํ•œ about branch๋ฅผ ์‚ญ์ œํ•˜๋Š” ๊ฒƒ์„ ์žŠ์ง€๋ง์ž.

git branch -d about

์šฐ๋ฆฌ์˜ ๋งˆ์ง€๋ง‰ ํžˆ์Šคํ† ๋ฆฌ๋Š” ์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ๋ณด์ผ ๊ฒƒ์ด๋‹ค. ์—ฌ๋Ÿฌ๋ถ„์ด ๋ณธ ๊ฒƒ์ฒ˜๋Ÿผ, ์„ ํ˜•์˜ ํžˆ์Šคํ† ๋ฆฌ๋Š” ์ด์ „ ์žฅ์˜ ์—ฌ๊ธฐ์ €๊ธฐ ์˜ค๋ฝ๊ฐ€๋ฝํ•˜๋Š” meger๋ณด๋‹ค ์ดํ•ดํ•˜๊ธฐ ๋” ์‰ฝ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‹ค๋ฅธ ํ•œํŽธ์œผ๋กœ๋Š”, ์šฐ๋ฆฌ๋Š” ์–ด๋–ป๊ฒŒ ํ˜„์žฌ ์ƒํƒœ๋ฅผ ๊ฐ–๊ฒŒ ๋˜์—ˆ๋Š”์ง€ ์ตœ์†Œํ•œ์˜ ๊ฐœ๋…๋„ ์—†๋‹ค.

about branch๋ฅผ mergeํ•˜๊ณ  ์‚ญ์ œํ•˜๊ธฐ

๊ฒฐ๋ก 

๋ฆฌ๋ฒ ์ด์Šค๋Š” ์ž„์˜์˜ branch๋ฅผ ๋‹ค๋ฅธ branch์˜ ๋๋ถ€๋ถ„(tip)์— ์ด๋™์‹œ์ผœ ํŒจ์ŠคํŠธ-ํฌ์›Œ๋“œ merge๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•œ๋‹ค. ๊ทธ๊ฒƒ์€ merge commit์˜ ์š”๊ตฌ๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ์—†์• ๋ฉฐ, ์™„์ „ํ•œ ์„ ํ˜•์˜ ํžˆ์Šคํ† ๋ฆฌ๊ฐ€ ๋œ๋‹ค. ์™ธ๋ถ€ ๊ด€์ฐฐ์ž์—๊ฒŒ๋Š”, ์—ฌ๋Ÿฌ๋ถ„์ด ๋‹ค์–‘ํ•œ ๋Œ€์•ˆ๋“ค์„ ๋ชจ์ƒ‰ํ•˜๊ณ  ์„œ๋กœ ๊ด€๋ จ์—†๋Š” ๊ธฐ๋Šฅ๋“ค์„ ๋™์‹œ์— ๊ฐœ๋ฐœํ–ˆ์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ํ”„๋กœ์ ํŠธ์˜ ๋ชจ๋“  ๋ถ€๋ถ„์„ ์ž˜ ๊ณ„ํš๋œ ์ ˆ์ฐจ๋Œ€๋กœ ์ƒ์„ฑํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ผ ๊ฒƒ์ด๋‹ค. ๋ฆฌ๋ฒ ์ด์Šค๋Š” ์ €์žฅ์†Œ์— ์ •ํ™•ํžˆ ๋ฌด์—‡์„ ์ €์žฅํ•ด์•ผ ํ• ์ง€ ์—ฌ๋Ÿฌ๋ถ„์—๊ฒŒ ์„ ํƒํ•  ๊ถŒํ•œ์„ ์ œ๊ณตํ•œ๋‹ค.

์ด๊ฒƒ์€ ์‹ค์ œ๋กœ Git ์ปค๋ฎค๋‹ˆํ‹ฐ ์•ˆ์—์„œ ๋…ผ๋ž€์˜ ์—ฌ์ง€๊ฐ€ ์žˆ๋Š” ์ฃผ์ œ์ด๋‹ค. ์ผ๋ถ€๋Š” ์ด๋ฒˆ ์žฅ์—์„œ ๋…ผ์˜ํ•œ ์ด์ ์ด ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ์žฌ์ž‘์„ฑํ•˜๋Š” ๋ฒˆ๊ฑฐ๋Ÿฌ์›€ ๋งŒํผ์˜ ๊ฐ€์น˜๊ฐ€ ์—†๋‹ค๊ณ  ๋ฏฟ๊ณ  ์žˆ๋‹ค. ๊ทธ๋“ค์€ ์–ด๋– ํ•œ ์ •๋ณด๋„ ๊ฒฐ์ฝ” ์žƒ์–ด๋ฒ„๋ฆฌ์ง€ ์•Š๋Š” ๊ฒƒ์„ ๋ณด์žฅํ•˜๋ฉด์„œ ํžˆ์Šคํ† ๋ฆฌ๋Š” ์ •ํ™•ํžˆ ์—ฌ๋Ÿฌ๋ถ„์ด ์ˆ˜ํ–‰ํ•œ ๊ฒƒ๋“ค์„ ๋ฐ˜์˜ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ๋งํ•จ์œผ๋กœ์„œ Git์— ์ข€ ๋” โ€œ์ˆœ์ˆ˜ํ•œโ€ ์ ‘๊ทผ๋ฒ•์„ ์ทจํ•˜๊ณ  ์žˆ๋‹ค. ๊ฒŒ๋‹ค๊ฐ€, git log์˜ ๊ณ ๊ธ‰ ์„ค์ •๋“ค์€ branch๊ฐ€ ๋ณต์žกํ•œ ์ €์žฅ์†Œ๋กœ๋ถ€ํ„ฐ ์„ ํ˜•์˜ ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ํ‘œ์‹œ ํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜, ๋‹ค๋ฅธ ์ด๋“ค์€ merge commit์€ ์˜๋ฏธ์žˆ๋Š”(meaningful) ๊ฒƒ์ด์–ด์•ผ ๋œ๋‹ค๊ณ  ์ฃผ์žฅํ•œ๋‹ค. ์—…๋ฐ์ดํŠธ์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด ๊ทธ๋ƒฅ ์ž„์˜์˜ ์ง€์ ์— mergeํ•˜๋Š” ๋Œ€์‹ ์—, ๊ทธ๋“ค์€ merge commit์ด ๋‘ branch์˜ ์ƒ์ง•์ ์ธ ๊ฒฐํ•ฉ์„ ๋‚˜ํƒ€๋‚ด์•ผ ํ•œ๋‹ค๊ณ  ์ฃผ์žฅํ•œ๋‹ค. ํŠน๋ณ„ํžˆ, ๋Œ€ํ˜• ์†Œํ”„ํŠธ์›จ์–ด ํ”„๋กœ์ ํŠธ (๋ฆฌ๋ˆ…์Šค ์ปค๋„๊ณผ ๊ฐ™์ด)๋Š” ๊ฐ€๋Šฅํ•œ ํ•œ ๊น”๋”ํ•˜๊ณ  ๋ณต์žกํ•˜์ง€ ์•Š์€ ์ €์žฅ์†Œ๋ฅผ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ „ํ˜•์ ์œผ๋กœ ์ธํ„ฐ๋ ‰ํ‹ฐ๋ธŒ ๋ฆฌ๋ฒ ์ด์Šค๋ฅผ ์˜นํ˜ธํ•˜๊ณ  ์žˆ๋‹ค.

git rebase์˜ ์‚ฌ์šฉ์€ ์ „์ ์œผ๋กœ ์—ฌ๋Ÿฌ๋ถ„์—๊ฒŒ ๋‹ฌ๋ ค์žˆ๋‹ค. ํ”„๋กœ์ ํŠธ์˜ ์ง„ํ–‰์‚ฌํ•ญ์„ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•ํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ์œ ์šฉํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ ๋ช…์‹œ์ ์œผ๋กœ merge๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋™์ผํ•œ ๊ธฐ๋Šฅ์„ ์ด๋ฃจ์—ˆ์„ ๋•Œ ๊ณ ์ƒํ•œ ๋ณด๋žŒ์ด ์—†์„ ์ˆ˜๋„ ์žˆ๋‹ค. ๊ด€๋ จ ์‚ฌํ•ญ์œผ๋กœ, Git์ด ํ‰์†Œ๋Œ€๋กœ ํŒจ์ŠคํŠธ-ํฌ์›Œ๋“œ merge๋ฅผ ํ•˜๋ คํ•  ๋•Œ merge comit์„ ๊ฐ•์ œํ•˜๊ธฐ ์œ„ํ•ด ์—ฌ๋Ÿฌ๋ถ„์€ ๋‹ค์Œ ๋ช…๋ น์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

git merge --no-ff <branch-name>

๋‹ค์Œ ์žฅ์€ ์šฐ๋ฆฌ ํ”„๋กœ์ ํŠธ ํžˆ์Šคํ† ๋ฆฌ์— ์ข€ ๋” ๊ด€์—ฌํ•  ๊ฒƒ์ด๋‹ค. ์šฐ๋ฆฌ๋Š” ๋ณต์žกํ•œ ๋ฆฌ๋ฒ ์ด์Šค๋ฅผ ํ†ตํ•ด ์‹ค์ˆ˜ ๊ณ ์น˜๊ธฐ๋ฅผ ์‹œ๋„ํ•˜๊ณ  ์‹ฌ์ง€์–ด ์‚ญ์ œ๋œ commit์„ ๋ณต๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ๋ฐฐ์šธ ๊ฒƒ์ด๋‹ค.

์ •๋ฆฌ

git rebase <new-base>
ํ˜„์žฌ branch์˜ commit์„ ์˜ tip์œผ๋กœ ์˜ฎ๊ธด๋‹ค. ๋Š” branch ์ด๋ฆ„ ํ˜น์€ commit ID๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค.

git rebase -i <new-base>
์ธํ„ฐ๋ ‰ํ‹ฐ๋ธŒ ๋ฆฌ๋ฒ ์ด์Šค๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  ๊ฐ commit์— ๋Œ€ํ•œ ํ–‰์œ„๋ฅผ ์„ ํƒํ•œ๋‹ค.

git commit --amend
์ƒˆ๋กœ์šด commit์„ ์ƒ์„ฑํ•˜๋Š” ๋Œ€์‹ ์— ๊ฐ€์žฅ ์ตœ๊ทผ commit์— staged ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์ถ”๊ฐ€ํ•œ๋‹ค.

git rebase --continue
commit์„ ์ˆ˜์ •ํ•œ ์ดํ›„ rebase๋ฅผ ๊ณ„์†ํ•œ๋‹ค.

git rebase --abort
ํ˜„์žฌ์˜ ์ธํ„ฐ๋ ‰ํ‹ฐ๋ธŒ ๋ฆฌ๋ฒ ์ด์Šค๋ฅผ ์ค‘๋‹จํ•˜๊ณ  ์ด์ „ ์ƒํƒœ๋กœ ์ €์žฅ์†Œ๋ฅผ ๋˜๋Œ๋ฆฐ๋‹ค.

git merge --no-ff <branch-name>
๋งŒ์•ฝ Git์ด ํŒจ์ŠคํŠธ-ํฌ์›Œ๋“œ merge๋ฅผ ํ•˜๋ ค๊ณ  ํ•  ๋•Œ ๊ฐ•์ œ๋กœ merge commit์„ ํ•˜๊ฒŒ ํ•œ๋‹ค.