Skip to content

Latest commit

ย 

History

History
1160 lines (920 loc) ยท 71.8 KB

C-git-commands.asc

File metadata and controls

1160 lines (920 loc) ยท 71.8 KB

Appendix A: Git ๋ช…๋ น์–ด

์ด ์ฑ…์—์„œ Git ๋ช…๋ น์–ด๋ฅผ ๋งŽ์ด ์„ค๋ช…ํ•˜์ง€๋งŒ, Git์„ ์„ค๋ช…ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ค‘๊ฐ„๋งˆ๋‹ค ์„ค๋ช…ํ•˜๋Š” ๊ฒƒ๋ฟ์ด๋‹ค. ์„ค๋ช…์„ ๋ฐฉํ•ดํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ช…๋ น์–ด ์ค‘์‹ฌ์œผ๋กœ ์‚ดํŽด๋ณด์ง€ ์•Š๋Š”๋‹ค. ์ด ์žฅ์—์„œ๋Š” ์—ฌ๊ธฐ์ €๊ธฐ ํฉ์–ด์ ธ ์žˆ๋Š” ๋ช…๋ น์–ด ์‚ฌ์šฉ๋ฒ•์„ ํ•œ๋ˆˆ์— ๋ณผ ์ˆ˜ ์žˆ๋„๋ก ์ •๋ฆฌํ•œ๋‹ค.

์ฑ… ์ „์ฒด์—์„œ ์–ธ๊ธ‰ํ–ˆ๋˜ Git ๋ช…๋ น์–ด๋ฅผ ์ „๋ถ€ ์‚ดํŽด๋ณด๋Š”๋ฐ ๋ช…๋ น์–ด๋ฅผ ์šฉ๋„์— ๋”ฐ๋ผ ๊ทธ๋ฃน์œผ๋กœ ๋ฌถ์–ด ๋†“์•˜๋‹ค. ํ•ด๋‹น ๋ช…๋ น์–ด๋ฅผ ์–ด๋””์— ์“ฐ๋Š”์ง€ ์„ค๋ช…ํ•˜๊ณ  ์–ด๋””์—์„œ ์ฐพ์•„๋ณผ ์ˆ˜ ์žˆ๋Š”์ง€๋„ ํ‘œ๊ธฐํ•œ๋‹ค.

์„ค์น˜์™€ ์„ค์ •

์ •๋ง ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ๋ช…๋ น์–ด๊ฐ€ ๋‘ ๊ฐœ ์žˆ๋‹ค. ๋ฐ”๋กœ config ์™€ help ๋ช…๋ น์ด๋‹ค. ์ด ๋ช…๋ น์€ ๋งค์ผ ์‚ฌ์šฉํ•œ๋‹ค.

git config

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

git config ๋ช…๋ น์€ ์ด ์ฑ…์˜ ๋ชจ๋“  ์žฅ์—์„œ ์‚ฌ์šฉํ•œ๋‹ค.

Git์„ ์ฒ˜์Œ ์‚ฌ์šฉํ•  ๋•Œ ์ด๋ฆ„, ์ด๋ฉ”์ผ ์ฃผ์†Œ, ํŽธ์ง‘๊ธฐ๋Š” ์–ด๋–ป๊ฒŒ ์„ค์ •ํ•˜๋Š”์ง€๋Š” ch01-getting-started.asc์—์„œ ์„ค๋ช…ํ•œ๋‹ค.

์–ด๋–ป๊ฒŒ ๋‹จ์ถ• ๋ช…๋ น์–ด๋ฅผ ๋งŒ๋“œ๋Š”์ง€๋Š” ch02-git-basics-chapter.asc์— ์žˆ๋‹ค. ๋งค๋ฒˆ ๊ธด ์˜ต์…˜์„ ์ค„์ค„ ์ž…๋ ฅํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค.

git pull ๋ช…๋ น์„ ์‹คํ–‰ํ•  ๋•Œ --rebase ์˜ต์…˜์œผ๋กœ ๋™์ž‘ํ•˜๊ฒŒ ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ch03-git-branching.asc์— ์žˆ๋‹ค.

HTTP ์•”ํ˜ธ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ch07-git-tools.asc๋ฅผ ๋ณด๋ฉด ๋œ๋‹ค.

Git์— ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ๊ณ  ๊บผ๋‚ผ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” Smudge์™€ Clean ํ•„ํ„ฐ๋ฅผ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ch08-customizing-git.asc์— ์žˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ git config ๋ช…๋ น ์ž์ฒด์— ๋Œ€ํ•œ ์„ค๋ช…์€ ch08-customizing-git.asc์— ์žˆ๋‹ค.

git help

git help ๋ช…๋ น์€ Git์— ํฌํ•จ๋œ ๋ฌธ์„œ๋ฅผ ๋ณด์—ฌ์ค€๋‹ค. ์ด ์žฅ์—์„œ๋Š” ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋งŒ ๊ฐ„๋‹จํžˆ ์„ค๋ช…ํ•œ๋‹ค. git help <command> ๋ผ๊ณ  ์‹คํ–‰ํ•˜๋ฉด ํ•ด๋‹น ๋ช…๋ น์–ด์— ์–ด๋–ค ์˜ต์…˜์ด ์žˆ๊ณ  ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜๋Š”์ง€ ์•Œ๋ ค์ค€๋‹ค.

git help ๋ช…๋ น์€ ch01-getting-started.asc์— ์†Œ๊ฐœํ•œ๋‹ค. git shell ์„ ์„œ๋ฒ„์— ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ch04-git-on-the-server.asc์—์„œ ๋ณด์—ฌ์ค€๋‹ค.

ํ”„๋กœ์ ํŠธ ๊ฐ€์ ธ์˜ค๊ธฐ์™€ ์ƒ์„ฑํ•˜๊ธฐ

Git ์ €์žฅ์†Œ๋Š” ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ๋งŒ๋“ ๋‹ค. ๋„คํŠธ์›Œํฌ ์–ด๋”˜๊ฐ€์— ์žˆ๋Š” ์ €์žฅ์†Œ๋ฅผ ๋ณต์‚ฌํ•ด์˜ค๊ฑฐ๋‚˜ ๊ธฐ์กด ํ”„๋กœ์ ํŠธ ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ์ €์žฅ์†Œ๋ฅผ ์ƒˆ๋กœ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

git init

ํ”„๋กœ์ ํŠธ ๋””๋ ‰ํ† ๋ฆฌ๋กœ ๊ฐ€์„œ git init ์ด๋ผ๊ณ  ์‹คํ–‰ํ•œ๋‹ค. ๋””๋ ‰ํ† ๋ฆฌ์— Git ์ €์žฅ์†Œ๊ฐ€ ์ƒˆ๋กœ ๋งŒ๋“ค์–ด์ง€๊ณ  ํ”„๋กœ์ ํŠธ๋ฅผ ๋ฒ„์ „ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

ch02-git-basics-chapter.asc์—์„œ ๋กœ์ปฌ์— ์ €์žฅ์†Œ๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•œ๋‹ค.

โ€œmasterโ€ ์—์„œ ๋‹ค๋ฅธ ๋ธŒ๋žœ์น˜๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ch03-git-branching.asc์— ์†Œ๊ฐœํ•œ๋‹ค.

ch04-git-on-the-server.asc๋ฅผ ๋ณด๋ฉด Bare ์ €์žฅ์†Œ๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์ด ๋‚˜์™€ ์žˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ git init ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋ฉด ๋‚ด๋ถ€์—์„œ ์–ด๋–ค ์ผ์ด ์ผ์–ด๋‚˜๋Š” ์ง€ ch10-git-internals.asc์—์„œ ์„ค๋ช…ํ•œ๋‹ค.

git clone

git clone ์€ ์‚ฌ์‹ค ๋‹ค๋ฅธ ๋ช…๋ น์–ด๋ฅผ ๋ช‡ ๊ฐœ ์‹คํ–‰ํ•œ๋‹ค. ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๋งŒ๋“ค๊ณ  ๋””๋ ‰ํ† ๋ฆฌ๋กœ ๋“ค์–ด๊ฐ€๊ณ  ๋‚˜์„œ git init ๋ช…๋ น์œผ๋กœ ๋นˆ Git ์ €์žฅ์†Œ๋ฅผ ๋งŒ๋“ ๋‹ค. ๊ทธ๋‹ค์Œ ์ž…๋ ฅํ•œ URL์„ origin ์ด๋ผ๋Š”(๊ธฐ๋ณธ๊ฐ’) ์ด๋ฆ„์˜ ๋ฆฌ๋ชจํŠธ๋กœ ์ถ”๊ฐ€ํ•˜๊ณ (git remote add) git fetch ๋ช…๋ น์œผ๋กœ ๋ฆฌ๋ชจํŠธ ์ €์žฅ์†Œ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ ์ตœ์ข… ์ปค๋ฐ‹์„ ์›Œํ‚น ๋””๋ ‰ํ† ๋ฆฌ์— Checkout ํ•œ๋‹ค(git checkout).

git clone ๋ช…๋ น์€ ์ด ์ฑ… ์–ด๋””์—์„œ๋‚˜ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๋ช…๋ น์ด์ง€๋งŒ ๊ฐ€์žฅ ์„ค๋ช…์ด ์ž˜๋œ ๋ช‡ ๊ณณ์„ ์†Œ๊ฐœํ•œ๋‹ค.

์ด ๋ช…๋ น์€ ch02-git-basics-chapter.asc์—์„œ ์„ค๋ช…ํ–ˆ๊ณ  ๋ฐ”๋กœ ๋”ฐ๋ผ ํ•  ์ˆ˜ ์žˆ๋Š” ์˜ˆ์ œ๋„ ๋ณด์—ฌ์ค€๋‹ค.

--bare ์˜ต์…˜์„ ์ฃผ๊ณ  ์›Œํ‚น ๋””๋ ‰ํ† ๋ฆฌ ์—†๋Š” Git ์ €์žฅ์†Œ๋ฅผ ๋ณต์‚ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ch04-git-on-the-server.asc์—์„œ ๋‹ค๋ฃฌ๋‹ค.

Bundle ํŒŒ์ผ๋กœ ๋œ Git ์ €์žฅ์†Œ๋ฅผ ๋‹ค์‹œ ํ’€ ์ˆ˜๋„ ์žˆ๋Š”๋ฐ ch07-git-tools.asc์—์„œ ์†Œ๊ฐœํ•œ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ --recursive ์˜ต์…˜์œผ๋กœ Clone ํ•  ๋•Œ ์„œ๋ธŒ๋ชจ๋“ˆ๊นŒ์ง€ Clone ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ch07-git-tools.asc์—์„œ ์„ค๋ช…ํ•œ๋‹ค.

์ด ๋ช…๋ น์€ ์—ฌ๊ธฐ์— ์ •๋ฆฌํ•œ ๋ถ€๋ถ„ ์ด์™ธ์—์„œ๋„ ๋งŽ์€ ๊ณณ์—์„œ ์‚ฌ์šฉํ–ˆ์ง€๋งŒ, ์ฐจ๊ทผ์ฐจ๊ทผ ์ž˜ ์„ค๋ช…ํ•œ ๊ณณ์œผ๋กœ ์ •๋ฆฌํ–ˆ๋‹ค.

์Šค๋ƒ…์ƒท ๋‹ค๋ฃจ๊ธฐ

Stage ํ•˜๊ณ  ์ปค๋ฐ‹ํ•˜๋Š” ์ •๋„์˜ ์•„์ฃผ ๊ธฐ๋ณธ์ ์ธ ์›Œํฌํ”Œ๋กœ๋Š” ๋ช…๋ น์–ด ๋ช‡ ๊ฐœ๋งŒ ์•Œ๋ฉด ๋œ๋‹ค.

git add

git add ๋ช…๋ น์€ ์›Œํ‚น ๋””๋ ‰ํ† ๋ฆฌ์—์„œ Staging Area(โ€œindexโ€)๋กœ ์ปจํ…ํŠธ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ช…๋ น์–ด๋‹ค. git commit ๋ช…๋ น์€ ์˜ค๋กœ์ง€ Staging Area๋งŒ ๋ฐ”๋ผ๋ณด๊ธฐ ๋•Œ๋ฌธ์— git add ๋ช…๋ น์œผ๋กœ ์ปค๋ฐ‹ํ•  ์Šค๋ƒ…์ƒท์„ ์ž˜ ๋‹ค๋“ฌ์–ด์•ผ ํ•œ๋‹ค.

์ด ๋ช…๋ น์€ ๋งค์šฐ ์ค‘์š”ํ•œ ๋ช…๋ น์–ด๋ผ์„œ ์ด ์ฑ…์—์„œ ์ˆ˜์‹ญ ๋ฒˆ๋„ ๋” ์–ธ๊ธ‰ํ•œ๋‹ค. ์—ฌ๊ธฐ์„œ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜๋Š”์ง€ ์ž˜ ์„ค๋ช…ํ•œ ๊ณณ์„ ์ฐพ์•„๋ณด์ž.

git add ๋Š” ch02-git-basics-chapter.asc์—์„œ ์ž์„ธํžˆ ์„ค๋ช…ํ•œ๋‹ค.

์ด ๋ช…๋ น๋Š” ์ถฉ๋Œ ์‹œ์—๋„ ํ•„์š”ํ•˜๋‹ค. ch03-git-branching.asc์—์„œ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜๋Š”์ง€ ์„ค๋ช…ํ•œ๋‹ค.

ch07-git-tools.asc์—์„œ ์ˆ˜์ •ํ•œ ํŒŒ์ผ ์ผ๋ถ€๋ถ„์„ ๋Œ€ํ™”ํ˜•์œผ๋กœ Stage ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ์ค€๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ ์ด ๋ช…๋ น์ด ๋‚ด๋ถ€์ ์œผ๋กœ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋„๋ก ch10-git-internals.asc์—์„œ ์ €์ˆ˜์ค€ ๋ช…๋ น์–ด๋กœ ๋”ฐ๋ผ ํ•˜๋Š” ์˜ˆ๋ฅผ ๋ณด์—ฌ์ค€๋‹ค.

git status

git status ๋ช…๋ น์€ ์›Œํ‚น ๋””๋ ‰ํ† ๋ฆฌ์™€ Staging Aread์˜ ์ƒํƒœ๋ฅผ ๋ณด์—ฌ์ค€๋‹ค. Modified ์ƒํƒœ์ด๊ฑฐ๋‚˜ Unstaged ์ƒํƒœ์ธ ํŒŒ์ผ์ด ๋ฌด์—‡์ธ์ง€ Staged ์ƒํƒœ์ด์ง€๋งŒ ์•„์ง ์ปค๋ฐ‹ํ•˜์ง€ ์•Š์€ ํŒŒ์ผ์€ ๋ฌด์—‡์ธ์ง€ ๋ณด์—ฌ์ค€๋‹ค. Staging Area์— ํŒŒ์ผ์„ ๋„ฃ๊ณ  ๊บผ๋‚ด๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ํžŒํŠธ๋„ ๋ณด์—ฌ์ค€๋‹ค.

git status ๋ช…๋ น์€ ch02-git-basics-chapter.asc์—์„œ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์„ค๋ช…ํ•œ๋‹ค. ์ด ๋ช…๋ น์€ ์ด ์ฑ…์—์„œ ์•„์ฃผ ๋งŽ์ด ์‚ฌ์šฉํ–ˆ์ง€๋งŒ ์—ฌ๊ธฐ ์„ค๋ช…์„ ๋ฒ—์–ด๋‚˜์ง€ ์•Š๋Š”๋‹ค.

git diff

git diff ๋ช…๋ น์€ ๋‘ ํŠธ๋ฆฌ ๊ฐœ์ฒด์˜ ์ฐจ์ด๋ฅผ ๋ณด๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. ์›Œํ‚น ๋””๋ ‰ํ† ๋ฆฌ์™€ Staging Area๋ฅผ ๋น„๊ตํ•  ์ˆ˜ ์žˆ๊ณ (git diff) Staing Area์™€ ๋งˆ์ง€๋ง‰ ์ปค๋ฐ‹์„ ๋น„๊ตํ•  ์ˆ˜ ์žˆ๋‹ค(git diff --staged). ๊ทธ๋ฆฌ๊ณ  ๋‘ ์ปค๋ฐ‹์„ ๋น„๊ตํ•  ์ˆ˜ ์žˆ๋‹ค(git diff master branchB).

git diff ๋Š” ch02-git-basics-chapter.asc์—์„œ ์ฒ˜์Œ ์„ค๋ช…ํ•œ๋‹ค. Staged ์ƒํƒœ์ธ ๋‚ด์šฉ์ด ๋ฌด์—‡์ด๊ณ  ๋ฐ˜๋Œ€ ์ƒํƒœ์ธ ๋‚ด์šฉ์€ ๋ฌด์—‡์ธ์ง€ ๋น„๊ตํ•˜๋Š” ๋ฒ•์„ ์„ค๋ช…ํ•œ๋‹ค.

ch05-distributed-git.asc์—์„œ --check ์˜ต์…˜์œผ๋กœ ๊ณต๋ฐฑ๋ฌธ์ž๊ฐ€ ์ž˜๋ชป ์ž…๋ ฅ๋˜์ง€ ์•Š์•˜๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์†Œ๊ฐœํ•œ๋‹ค.

ch05-distributed-git.asc์—์„œ ๋‘ ๋ธŒ๋žœ์น˜๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๋น„๊ตํ•  ์ˆ˜ ์žˆ๋Š” git diff Aโ€ฆโ€‹B ๋ฌธ๋ฒ•์„ ์„ค๋ช…ํ•œ๋‹ค.

ch07-git-tools.asc์„ ๋ณด๋ฉด -b ์˜ต์…˜์œผ๋กœ ๊ณต๋ฐฑ๋ฌธ์ž๋Š” ๋ฌด์‹œํ•˜๊ณ  ๋น„๊ตํ•˜๋Š” ๊ฒƒ๊ณผ --theirs, --ours, --base ์˜ต์…˜์œผ๋กœ ์ถฉ๋Œ ๋‚œ ํŒŒ์ผ์˜ ์ƒํƒœ๋ฅผ ๋น„๊ตํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ๋‚˜์™€ ์žˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ ch07-git-tools.asc์—์„œ ์„œ๋ธŒ๋ชจ๋“ˆ์˜ ๋ณ€๊ฒฝ ๋‚ด์šฉ์„ ๋น„๊ตํ•˜๋Š” --submodule ์˜ต์…˜๋„ ์„ค๋ช…ํ•œ๋‹ค.

git difftool

git difftool ๋ช…๋ น์€ ๋‹จ์ˆœํžˆ ์™ธ๋ถ€ diff ๋„๊ตฌ๋ฅผ ์‹คํ–‰ํ•ด์ค€๋‹ค. git diff ๋Š” Git์— ๋“ค์–ด ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๊ณ  ์™ธ๋ถ€ diff ๋„๊ตฌ๋กœ ๋‘ ํŠธ๋ฆฌ๋ฅผ ๋น„๊ตํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

์ด ๋ช…๋ น์€ ch02-git-basics-chapter.asc์—์„œ ์„ค๋ช…ํ•œ๋‹ค.

git commit

git commit ๋ช…๋ น์€ git add ๋กœ Staging Area์— ๋„ฃ์€ ๋ชจ๋“  ํŒŒ์ผ์„ ์ปค๋ฐ‹ํ•œ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—๋Š” ํ•˜๋‚˜์˜ ์Šค๋ƒ…์ƒท์œผ๋กœ ๊ธฐ๋ก๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ˜„ ๋ธŒ๋žœ์น˜๊ฐ€ ์ƒˆ ์ปค๋ฐ‹์„ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ํ•œ๋‹ค.

์ปค๋ฐ‹์— ๋Œ€ํ•œ ๊ธฐ๋ณธ์ ์ธ ๋‚ด์šฉ์€ ch02-git-basics-chapter.asc์—์„œ ๋‹ค๋ฃฌ๋‹ค. -a ํ”Œ๋ž˜๊ทธ๋ฅผ ์ฃผ๊ณ  git add ๋ฅผ ๊ฑด๋„ˆ๋›ฐ๊ณ  ๋ฐ”๋กœ ์ปค๋ฐ‹ํ•˜๋Š” ๊ฒƒ๊ณผ -m ์œผ๋กœ ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€๋ฅผ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋„˜๊ธฐ๋Š” ๋ฐฉ๋ฒ•๋„ ๋ณด์—ฌ์ค€๋‹ค.

๊ฐ€์žฅ ์ตœ๊ทผ ์ปค๋ฐ‹์„ ์ˆ˜์ •ํ•˜๋Š” --amend ์˜ต์…˜์€ ch02-git-basics-chapter.asc์—์„œ ์„ค๋ช…ํ•œ๋‹ค.

ch03-git-branching.asc์„ ๋ณด๋ฉด git commit ์ด ๋ฌด์—‡์„ ํ•˜๋Š”์ง€ ์™œ ๊ทธ๋ ‡๊ฒŒ ํ•˜๋Š”์ง€ ์„ค๋ช…ํ•œ๋‹ค.

-S ํ”Œ๋ž˜๊ทธ๋กœ ์ปค๋ฐ‹์— ์„œ๋ช…ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ch07-git-tools.asc์—์„œ ์„ค๋ช…ํ•œ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ ch10-git-internals.asc์—์„œ git commit ๋ช…๋ น์ด ๋‚ด๋ถ€์ ์œผ๋กœ ํ•˜๋Š” ์ผ์ด ๋ฌด์—‡์ด๊ณ  ์‹ค์ œ๋กœ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„๋ผ ์žˆ๋Š”์ง€ ์„ค๋ช…ํ•œ๋‹ค.

git reset

git reset ๋ช…๋ น์€ ๋˜๋Œ๋ฆฌ๋Š”(Undo) ๋ช…๋ น์ด๋‹ค. ๋‹จ์–ด๊ฐ€ ์˜๋ฏธํ•˜๋Š” ๊ทธ๋Œ€๋กœ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค. HEAD ํฌ์ธํ„ฐ๋ฅผ ์˜ฎ๊ธฐ๋Š” ๊ฒƒ๊ณผ ๊ด€๋ จ๋ผ ์žˆ๊ณ  Staging Area(index)๋ฅผ ๋˜๋Œ๋ฆด ์ˆ˜ ์žˆ๊ณ  --hard ์˜ต์…˜์„ ์ฃผ๋ฉด ์›Œํ‚น ๋””๋ ‰ํ† ๋ฆฌ๋„ ๋˜๋Œ๋ฆฐ๋‹ค. --hard ์˜ต์…˜์„ ์ž˜๋ชป ์‚ฌ์šฉํ•˜๋ฉด ์ž‘์—…๋ฌผ์„ ์žƒ์–ด๋ฒ„๋ฆด ์ˆ˜๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด ๋ช…๋ น์„ ์ž˜ ์ดํ•ดํ•˜๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค.

git reset ์€ ๋ฌด์—‡๋ณด๋‹ค๋„ git add ๋กœ ์ถ”๊ฐ€ํ•œ ํŒŒ์ผ์„ Unstage ํ•˜๋Š”๋ฐ ์‚ฌ์šฉํ•œ๋‹ค. ch02-git-basics-chapter.asc์—์„œ ์„ค๋ช…ํ•œ๋‹ค.

ch07-git-tools.asc์—์„œ ์ด ๋ช…๋ น์„ ์ „์ฒด์ ์œผ๋กœ ์ž์„ธํžˆ ์„ค๋ช…ํ•œ๋‹ค.

git reset --hard ๋ช…๋ น์œผ๋กœ ์ถฉ๋Œ ์‹œ Merge๋ฅผ ์ทจ์†Œํ•  ์ˆ˜ ์žˆ๋‹ค. git merge --abort ๋กœ๋„ ๊ฐ™์€ ์ผ์„ ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ์ด ๋ช…๋ น์€ git reset ๋ช…๋ น์–ด์˜ Wrapper๋‹ค. ์ด ๋‚ด์šฉ์€ ch07-git-tools.asc์—์„œ ์„ค๋ช…ํ•œ๋‹ค.

git rm

git rm ๋ช…๋ น์€ Staging Area๋‚˜ ์›Œํ‚น ๋””๋ ‰ํ† ๋ฆฌ์— ์žˆ๋Š” ํŒŒ์ผ์„ ์‚ญ์ œํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•œ๋‹ค. git add ๋ช…๋ น๊ณผ ๋น„์Šทํ•˜๊ฒŒ ํŒŒ์ผ์˜ ์‚ญ์ œ๋ฅผ Stage ํ•˜๋Š” ๊ธฐ๋Šฅ์ด๋‹ค.

ch02-git-basics-chapter.asc์—์„œ git rm ๋ช…๋ น์„ ์ž์„ธํžˆ ์„ค๋ช…ํ•œ๋‹ค. Staging Area์™€ ์›Œํ‚น ๋””๋ ‰ํ† ๋ฆฌ ๋ชจ๋‘์—์„œ ํŒŒ์ผ์„ ์‚ญ์ œํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ --cached ์˜ต์…˜์„ ์ฃผ๊ณ  Staging Area์— ์žˆ๋Š” ํŒŒ์ผ๋งŒ ์ง€์šฐ๊ณ  ์›Œํ‚น ๋””๋ ‰ํ† ๋ฆฌ์˜ ํŒŒ์ผ์€ ๋‚จ๊ฒจ๋‘๋Š” ๋ฐฉ๋ฒ•๋„ ์„ค๋ช…ํ•œ๋‹ค.

๋Œ€๋ถ€๋ถ„์€ ch10-git-internals.asc์—์„œ ์„ค๋ช…ํ•œ ๋Œ€๋กœ ์“ฐ์ง€๋งŒ, ์ด ์ฑ…์—์„œ๋Š” ๋‹ค๋ฅด๊ฒŒ ์‚ฌ์šฉํ•œ ์˜ˆ๋„ ์žˆ๋‹ค. git filter-branch ๋ช…๋ น์„ ์‹คํ–‰ํ•  ๋•Œ git rm ๋ช…๋ น์— --ignore-unmatch ์˜ต์…˜์„ ์ฃผ๊ณ  ์‚ฌ์šฉํ•œ๋‹ค. ์ด ์˜ต์…˜์€ ์‚ญ์ œํ•˜๋ ค๋Š” ํŒŒ์ผ์ด ์—†์„ ๋•Œ ์—๋Ÿฌ๊ฐ€ ๋‚˜์ง€ ์•Š๊ฒŒ ํ•ด์ค€๋‹ค. ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ๋Š” ์œ ์šฉํ•˜๋‹ค.

git mv

git mv ๋ช…๋ น์€ ํŒŒ์ผ์„ ์˜ฎ๊ธฐ๊ณ (์ด๋ฆ„์„ ๋ณ€๊ฒฝํ•˜๊ณ ) ๋‚˜์„œ ์ƒˆ ํŒŒ์ผ์— git add ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๊ณ  ์ด์ „ ํŒŒ์ผ์—๋Š” git rm ์„ ์‹คํ–‰์‹œ์ผœ์ฃผ๋Š” ๋ช…๋ น์ด๋‹ค.

์ด ๋ช…๋ น์€ ch02-git-basics-chapter.asc์—์„œ ๋‹ค๋ฃฌ๋‹ค.

git clean

git clean ๋ช…๋ น์€ ์›Œํ‚น ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ํ•„์š”์—†๋Š” ํŒŒ์ผ์„ ์‚ญ์ œํ•˜๋Š” ๋ช…๋ น์ด๋‹ค. ์ด ๋ช…๋ น์œผ๋กœ ์ถฉ๋Œ๋กœ ์ƒ๊ธด ํŒŒ์ผ์ด๋‚˜ ๋นŒ๋“œ ์•„ํ‹ฐํŒฉํŠธ ํŒŒ์ผ์„ ์‚ญ์ œํ•  ๋•Œ ํŽธ๋ฆฌํ•˜๋‹ค.

์ด ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜๋Š” ์ƒํ™ฉ๊ณผ ํ•„์š”ํ•œ ์˜ต์…˜์€ ch07-git-tools.asc์—์„œ ๋‹ค๋ฃฌ๋‹ค.

Branch์™€ Merge

์—ฌ๊ธฐ์„œ ์†Œ๊ฐœํ•˜๋Š” ๋ช…๋ น์–ด๋งŒ ์•Œ๋ฉด Branch๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  Merge ํ•˜๋Š” ์ผ์€ ๋Šฅํžˆ ํ•  ์ˆ˜ ์žˆ๋‹ค.

git branch

git branch ๋ช…๋ น์€ ๋ธŒ๋žœ์น˜๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋„๊ตฌ๋‹ค. ์ด ๋ช…๋ น์€ ๋ธŒ๋žœ์น˜๋ฅผ ๋ชจ๋‘ ๋ณด์—ฌ์ฃผ๊ณ  ๋ธŒ๋žœ์น˜๋ฅผ ์ƒˆ๋กœ ๋งŒ๋“ค๊ณ  ๋ธŒ๋žœ์น˜๋ฅผ ์‚ญ์ œํ•˜๊ณ  ๋ธŒ๋žœ์น˜ ์ด๋ฆ„์„ ๋ณ€๊ฒฝํ•œ๋‹ค.

ch03-git-branching.asc์—์„œ branch ๋ช…๋ น์„ ์„ค๋ช…ํ•˜๋Š”๋ฐ ์ด ๋ช…๋ น์„ ํ•œ ์žฅ์— ๊ฑธ์ณ์„œ ์„ค๋ช…ํ•œ๋‹ค. ๋ธŒ๋žœ์น˜๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ ch03-git-branching.asc์—์„œ ์„ค๋ช…ํ•˜๊ณ  ๋ธŒ๋žœ์น˜๋ฅผ ๋ณด์—ฌ์ฃผ๊ฑฐ๋‚˜ ์‚ญ์ œํ•˜๋Š” ๊ธฐ๋Šฅ์€ ch03-git-branching.asc์—์„œ ์„ค๋ช…ํ•œ๋‹ค.

git branch -u ๋ช…๋ น์œผ๋กœ ํŠธ๋ž˜ํ‚น ๋ธŒ๋žœ์น˜๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ch03-git-branching.asc์—์„œ ๋ณด์—ฌ์ค€๋‹ค.

๋‚ด๋ถ€์ ์œผ๋กœ ์–ด๋–ค ์ผ์ด ๋ฒŒ์–ด์ง€๋Š”์ง€๋Š” ch10-git-internals.asc์—์„œ ์„ค๋ช…ํ•œ๋‹ค.

git checkout

git checkout ๋ช…๋ น์€ ๋ธŒ๋žœ์น˜๋ฅผ ๋ณ€๊ฒฝํ•˜๊ณ  ํ•ด๋‹น ํŒŒ์ผ์„ ์›Œํ‚น ๋””๋ ‰ํ† ๋ฆฌ๋กœ ๋ณต์‚ฌํ•œ๋‹ค.

ch03-git-branching.asc์—์„œ git branch ๋ช…๋ น์„ ์„ค๋ช…ํ•˜๋ฉด์„œ ์ด ๋ช…๋ น๋„ ์„ค๋ช…ํ•œ๋‹ค.

ch03-git-branching.asc์—์„œ --track ์˜ต์…˜์„ ์ฃผ๊ณ  ํŠธ๋ž˜ํ‚น ๋ธŒ๋žœ์น˜๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•œ๋‹ค.

ch07-git-tools.asc๋ฅผ ํ†ตํ•ด ์ด ๋ช…๋ น์— --conflict=diff3 ์„ ์ฃผ๋ฉด ์ถฉ๋Œ ํ‘œ์‹œ๋œ ํŒŒ์ผ์„ ์žฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

git reset ๋ช…๋ น๊ณผ ๊ด€๋ จ๋œ ๋‚ด์šฉ์€ ch07-git-tools.asc์—์„œ ์„ค๋ช…ํ•œ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ git checkout ์ด ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„๋๋Š”์ง€๋Š” ch10-git-internals.asc๋ฅผ ์ฐธ๊ณ ํ•œ๋‹ค.

git merge

git merge ๋Š” ๋‹ค๋ฅธ ๋ธŒ๋žœ์น˜๋ฅผ ํ˜„์žฌ Checkout๋œ ๋ธŒ๋žœ์น˜์— Merge ํ•˜๋Š” ๋ช…๋ น์ด๋‹ค. Merge ํ•˜๊ณ  ๋‚˜์„œ ํ˜„์žฌ ๋ธŒ๋žœ์น˜๊ฐ€ Merge ๋œ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ์˜ฎ๊ธด๋‹ค.

git merge ๋ช…๋ น์€ ch03-git-branching.asc์—์„œ ์„ค๋ช…ํ•œ๋‹ค. ์ด ์ฑ…์˜ ์—ฌ๋Ÿฌ ๊ณณ์—์„œ merge ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์ง€๋งŒ ch03-git-branching.asc์—์„œ ์„ค๋ช…ํ•œ ๊ฒƒ์—์„œ ํฌ๊ฒŒ ๋ฒ—์–ด๋‚˜์ง€ ์•Š๋Š”๋‹ค. git merge <branch> ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋ฉด ํ•ด๋‹น ๋ธŒ๋žœ์น˜๊ฐ€ Merge ๋œ๋‹ค.

ch05-distributed-git.asc์˜ ๋ ๋ถ€๋ถ„์—์„œ Squash ํ•ด์„œ Merge ํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์„ค๋ช…ํ•œ๋‹ค. Merge ํ•˜๋Š” ๋ธŒ๋žœ์น˜์˜ ํžˆ์Šคํ† ๋ฆฌ๋Š” ๋ฌด์‹œํ•˜๊ณ  ์ƒˆ ์ปค๋ฐ‹์„ ํ•˜๋‚˜ ๋งŒ๋“ค์–ด Merge ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

ch07-git-tools.asc์—์„œ๋Š” -Xignore-space-change ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‚˜ --abort ํ”Œ๋ž˜๊ทธ๋กœ Merge๋ฅผ ์ค‘๋‹จํ•˜๋Š” ๋ฐฉ๋ฒ• ๋“ฑ์„ ์„ค๋ช…ํ•œ๋‹ค.

Merge ํ•˜๊ธฐ ์ „์— ์„œ๋ช…์„ ๊ฒ€์‚ฌํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์„ค๋ช…ํ•œ๋‹ค. GPG ์„œ๋ช…์€ ch07-git-tools.asc์—์„œ ์„ค๋ช…ํ•œ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ Subtree๋ฅผ Merge ํ•˜๋Š” ๊ฒƒ์€ ch07-git-tools.asc์—์„œ ๋ฐฐ์šด๋‹ค.

git mergetool

git mergetool ๋ช…๋ น์€ ์™ธ๋ถ€ Merge Helper๋ฅผ ์‹คํ–‰ํ•ด ์ค€๋‹ค. Merge ํ•˜๋‹ค๊ฐ€ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒผ์„ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

ch03-git-branching.asc์—์„œ ์‚ด์ง ๋ง›์„ ๋ณด์—ฌ์ฃผ๊ณ  ch08-customizing-git.asc์—์„œ ์ž์‹ ์˜ ์™ธ๋ถ€ Merge ๋„๊ตฌ๋ฅผ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•œ๋‹ค.

git log

git log ๋ช…๋ น์€ ํ”„๋กœ์ ํŠธ ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ์‹œ๊ฐ„์˜ ์—ญ์ˆœ์œผ๋กœ ๋ณด์—ฌ์ค€๋‹ค. ๋„˜๊ฒจ์ค€ Ref๋ฅผ ๋”ฐ๋ผ ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š”๋ฐ Ref๋ฅผ ํ•œ ๊ฐœ๊ฐ€ ์•„๋‹ˆ๋ผ ์—ฌ๋Ÿฌ ๊ฐœ ๋„˜๊ธธ ์ˆ˜๋„ ์žˆ๋‹ค. Ref๋ฅผ ๋„˜๊ฒจ ์ฃผ์ง€ ์•Š์œผ๋ฉด HEAD๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ธŒ๋žœ์น˜์˜ ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ๋ณด์—ฌ์ค€๋‹ค. ๋˜ ์ด ๋ช…๋ น์œผ๋กœ ์—ฌ๋Ÿฌ ๋ธŒ๋žœ์น˜๋“ค ์‚ฌ์ด์˜ ์ฐจ์ด๋ฅผ ์ปค๋ฐ‹ ๋‹จ์œ„๋กœ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

์ด ์ฑ…์—์„œ ํ”„๋กœ์ ํŠธ ํžˆ์ŠคํŠธ๋ฆฌ๋ฅผ ๋ณด์—ฌ์ค„ ๋•Œ๋งˆ๋‹ค ์ด ๋ช…๋ น์„ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ๋ด๋„ ๋œ๋‹ค.

ch02-git-basics-chapter.asc์—์„œ ์ด ๋ช…๋ น์„ ๊นŠ๊ฒŒ ๋‹ค๋ค˜๋‹ค. -p ์™€ --stat ์˜ต์…˜์„ ์ฃผ๋ฉด ๊ฐ ์ปค๋ฐ‹ ์‚ฌ์ด์— ์ƒ๊ธด ๋ณ€ํ™”๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. --pretty ์™€ --oneline ์˜ต์…˜์„ ์ฃผ๋ฉด ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ์ข€ ๋” ๊น”๋”ํ•˜๊ฒŒ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์ด ์˜ต์…˜์€ Author๋‚˜ ๋‚ ์งœ๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ๋ณด์—ฌ์ค€๋‹ค.

ch03-git-branching.asc์„ ๋ณด๋ฉด --decorate ์˜ต์…˜์„ ์ฃผ๊ณ  ํžˆ์Šคํ† ๋ฆฌ์— ๋ธŒ๋žœ์น˜ ํฌ์ธํ„ฐ๊ฐ€ ํ•จ๊ป˜ ๋ณด์ด๋„๋ก ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ๋‚˜์˜จ๋‹ค. --graph ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•˜๋ฉด ํžˆ์Šคํ† ๋ฆฌ๊ฐ€ ์–ด๋–ป๊ฒŒ ์ง„ํ–‰๋๋Š”์ง€๋„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

ch05-distributed-git.asc๊ณผ ch07-git-tools.asc์—์„œ branchA..branchB ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•œ๋‹ค. branchB ์—๋งŒ ์žˆ๊ณ  branchA ์—๋Š” ์—†๋Š” ์ปค๋ฐ‹๋งŒ ๊ฑธ๋Ÿฌ์„œ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ch07-git-tools.asc์—์„œ ์ด ๋ฌธ๋ฒ•์„ ๋‹ค์–‘ํ•˜๊ฒŒ ์กฐํ•ฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•œ๋‹ค.

In ch07-git-tools.asc์™€ ch07-git-tools.asc์—์„œ branchAโ€ฆโ€‹branchB ํฌ๋งท์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•œ๋‹ค. ์ด ๋ฌธ๋ฒ•์€ ๋‘˜ ์ค‘ ํ•œ์ชฝ์— ์†ํ•œ ์ปค๋ฐ‹๋งŒ ๋ณด์—ฌ์ค€๋‹ค. --left-right ์˜ต์…˜์„ ์ฃผ๋ฉด ๊ฐ๊ฐ ์–ด๋А ์ชฝ์— ์†ํ•œ ๊ฒƒ์ธ์ง€๋„ ๋ณด์—ฌ์ค€๋‹ค. ch07-git-tools.asc์—์„œ๋Š” ์ถฉ๋Œ์„ ํ•ด๊ฒฐํ•  ๋•Œ ์œ ์šฉํ•œ --merge ์˜ต์…˜๋„ ์„ค๋ช…ํ•œ๋‹ค. --cc ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ์ถฉ๋Œ์„ ํžˆ์Šคํ† ๋ฆฌ์— ๋ณด์—ฌ์ค€๋‹ค.

-g ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ธŒ๋žœ์น˜๋ฅผ ์˜ค๊ฐ„ ๊ธฐ๋ก์ธ Reflog๋„ ํ•จ๊ป˜ ๋ณด์—ฌ์ค€๋‹ค. ์ด๊ฒƒ์€ ch07-git-tools.asc์—์„œ ์„ค๋ช…ํ•œ๋‹ค.

ch07-git-tools.asc์—์„œ๋Š” -S ์™€ -L ์˜ต์…˜์„ ์†Œ๊ฐœํ•œ๋‹ค. ์ด ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ํŠน์ • ์ฝ”๋“œ์— ๋Œ€ํ•œ ํžˆ์Šคํ† ๋ฆฌ๋งŒ ์ฐพ์•„๋ณผ ์ˆ˜ ์žˆ๋‹ค. ํŠน์ • ํ•จ์ˆ˜์˜ ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ๋ณด๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•˜๋ฉด ์œ ์šฉํ•˜๋‹ค.

ch07-git-tools.asc์—์„œ --show-signature ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•œ๋‹ค. git log ๋ช…๋ น์— ์ด ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ์ปค๋ฐ‹์˜ ์„œ๋ช… ์ •๋ณด๊นŒ์ง€๋„ ๋ณด์—ฌ์ค€๋‹ค.

git stash

git stash ๋ช…๋ น์€ ์•„์ง ์ปค๋ฐ‹ํ•˜์ง€ ์•Š์€ ์ผ์„ ์ €์žฅํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค. ์ž‘์—… ์ค‘์ธ ์›Œํ‚น ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ €์žฅํ•œ๋‹ค.

ch07-git-tools.asc์—์„œ ์„ค๋ช…ํ•œ๋‹ค.

git tag

git tag ๋ช…๋ น์€ ํžˆ์Šคํ† ๋ฆฌ์—์„œ ํŠน์ •๋ถ€๋ถ„์„ ๋ถ๋งˆํฌํ•˜๋Š” ๊ธฐ๋Šฅ์ด๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฐฐํฌํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

์ด ๋ช…๋ น์€ ch02-git-basics-chapter.asc์—์„œ ์ž์„ธํžˆ ์„ค๋ช…ํ•˜๊ณ  ch05-distributed-git.asc์— ๋ณด๋ฉด ๊ตฌ์ฒด์ ์ธ ์‚ฌ๋ก€๋„ ๋ณด์—ฌ์ค€๋‹ค.

ํƒœ๊ทธ์— GPG ์„œ๋ช…์„ ํ•˜๋ ค๋ฉด -s ํ”Œ๋ž˜๊ทธ๋ฅผ ์ฃผ๋ฉด ๋˜๊ณ  -v ํ”Œ๋ž˜๊ทธ๋ฅผ ์ฃผ๋ฉด ์„œ๋ช…์„ ๊ฒ€์ฆํ•  ์ˆ˜ ์žˆ๋‹ค. ch07-git-tools.asc์—์„œ ๋‹ค๋ฃฌ๋‹ค.

๊ณต์œ ํ•˜๊ณ  ์—…๋ฐ์ดํŠธํ•˜๊ธฐ

Git์—๋Š” ๋„คํŠธ์›Œํฌ๊ฐ€ ํ•„์š”ํ•œ ๋ช…๋ น์–ด๊ฐ€ ๋งŽ์ง€ ์•Š๋‹ค. ๊ฑฐ์˜ ๋กœ์ปฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋งŒ์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค. ์ฝ”๋“œ๋ฅผ ๊ณต์œ ํ•˜๊ฑฐ๋‚˜ ๊ฐ€์ ธ์˜ฌ ๋•Œ ํ•„์š”ํ•œ ๋ช…๋ น์–ด๊ฐ€ ๋ช‡ ๊ฐœ ์žˆ๋‹ค. ์ด๋Ÿฐ ๋ช…๋ น์–ด๋Š” ๋ชจ๋‘ ๋ฆฌ๋ชจํŠธ ์ €์žฅ์†Œ๋ฅผ ๋‹ค๋ฃจ๋Š” ๋ช…๋ น์–ด๋‹ค.

git fetch

git fetch ๋ช…๋ น์€ ๋กœ์ปฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์žˆ๋Š” ๊ฒƒ์„ ๋บ€ ๋ฆฌ๋ชจํŠธ ์ €์žฅ์†Œ์˜ ๋ชจ๋“  ๊ฒƒ์„ ๊ฐ€์ ธ์˜จ๋‹ค.

ch02-git-basics-chapter.asc์—์„œ ์ด ๋ช…๋ น์„ ์„ค๋ช…ํ•˜๊ณ  ch03-git-branching.asc์— ๋ณด๋ฉด ์ฐธ๊ณ ํ•  ์ˆ˜ ์žˆ๋Š” ์˜ˆ์ œ๊ฐ€ ๋” ์žˆ๋‹ค.

ch05-distributed-git.asc์—๋„ ์ข‹์€ ์˜ˆ์ œ๊ฐ€ ๋งŽ๋‹ค.

Ref๋ฅผ ํ•œ ๊ฐœ๋งŒ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐฉ๋ฒ•์€ ch06-github.asc์—์„œ ์„ค๋ช…ํ•˜๊ณ  ๋ฒˆ๋“ค์—์„œ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐฉ๋ฒ•์€ ch07-git-tools.asc์—์„œ ์„ค๋ช…ํ•œ๋‹ค.

Fetch ํ•˜๋Š” ๊ธฐ๋ณธ Refspec์„ ์ˆ˜์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์€in ch10-git-internals.asc์—์„œ ์„ค๋ช…ํ•œ๋‹ค. ์›ํ•˜๋Š” ๋Œ€๋กœ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

git pull

git pull ๋ช…๋ น์€ git fetch ์™€ git merge ๋ช…๋ น์„ ์ˆœ์„œ๋Œ€๋กœ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ๋ฟ์ด๋‹ค. ๊ทธ๋ž˜์„œ ํ•ด๋‹น ๋ฆฌ๋ชจํŠธ์—์„œ Fetch ํ•˜๊ณ  ์ฆ‰์‹œ ํ˜„ ๋ธŒ๋žœ์น˜๋กœ Merge๋ฅผ ์‹œ๋„ํ•œ๋‹ค.

ch02-git-basics-chapter.asc์—์„œ ์ด ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋‹ค๋ค˜๊ณ  ์ •ํ™•ํžˆ ๋ฌด์—‡์„ Merge ํ•˜๋Š” ์ง€๋Š” ch02-git-basics-chapter.asc์—์„œ ์„ค๋ช…ํ•œ๋‹ค.

ch03-git-branching.asc์—์„œ ๊ทธ ์–ด๋ ต๋‹ค๋Š” Rebase๋ฅผ ๋‹ค๋ฃจ๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•œ๋‹ค.

์ €์žฅ์†Œ URL์„ ์ฃผ๊ณ  ํ•œ ๋ฒˆ๋งŒ Pull ํ•ด ์˜ฌ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ch05-distributed-git.asc์—์„œ ์„ค๋ช…ํ•œ๋‹ค.

--verify-signatures ์˜ต์…˜์„ ์ฃผ๋ฉด Pull ํ•  ๋•Œ ์ปค๋ฐ‹์˜ PGP ์„œ๋ช…์„ ๊ฒ€์ฆํ•œ๋‹ค. PGP ์„œ๋ช…์€ ch07-git-tools.asc์—์„œ ์„ค๋ช…ํ•œ๋‹ค.

git push

git push ๋ช…๋ น์€ ๋ฆฌ๋ชจํŠธ์—๋Š” ์—†์ง€๋งŒ, ๋กœ์ปฌ์—๋Š” ์žˆ๋Š” ์ปค๋ฐ‹์„ ๊ณ„์‚ฐํ•˜๊ณ  ๋‚˜์„œ ๊ทธ ์ฐจ์ด๋งŒํผ๋งŒ Push ํ•œ๋‹ค. Push๋ฅผ ํ•˜๋ ค๋ฉด ์›๊ฒฉ ์ €์žฅ์†Œ์— ๋Œ€ํ•œ ์“ฐ๊ธฐ ๊ถŒํ•œ์ด ํ•„์š”ํ•˜๊ณ  ์ธ์ฆ๋ผ์•ผ ํ•œ๋‹ค.

ch02-git-basics-chapter.asc์—์„œ git push ๋ช…๋ น์œผ๋กœ ๋ธŒ๋žœ์น˜๋ฅผ ์›๊ฒฉ ์ €์žฅ์†Œ์— Push ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•œ๋‹ค. ์กฐ๊ธˆ ๊นŠ๊ฒŒ ๋ธŒ๋žœ์น˜๋ฅผ ํ•˜๋‚˜์”ฉ ๊ณจ๋ผ์„œ Push ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ch03-git-branching.asc์—์„œ ์„ค๋ช…ํ•œ๋‹ค. ์ž๋™์œผ๋กœ Push ํ•˜๋„๋ก ํŠธ๋ž˜ํ‚น ๋ธŒ๋žœ์น˜๋ฅผ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ch03-git-branching.asc์—์„œ ์„ค๋ช…ํ•œ๋‹ค. git push --delete ๋ช…๋ น์œผ๋กœ ์›๊ฒฉ ์„œ๋ฒ„์˜ ๋ธŒ๋žœ์น˜๋ฅผ ์‚ญ์ œํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ch03-git-branching.asc์—์„œ ์„ค๋ช…ํ•œ๋‹ค.

ch05-distributed-git.asc์—์„œ๋Š” git push ๋ฅผ ์ฃผ๊ตฌ์žฅ์ฐฝ ์‚ฌ์šฉํ•œ๋‹ค. ๋ฆฌ๋ชจํŠธ๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ ์‚ฌ์šฉํ•ด์„œ ๋ธŒ๋žœ์น˜์— ์ž‘์—…ํ•œ ๋‚ด์šฉ์„ ๊ณต์œ ํ•˜๋Š” ๊ฒƒ์„ ๋ณด์—ฌ์ค€๋‹ค.

--tags ์˜ต์…˜์„ ์ฃผ๊ณ  ํƒœ๊ทธ๋ฅผ Push ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ch02-git-basics-chapter.asc์—์„œ ์„ค๋ช…ํ•œ๋‹ค.

์„œ๋ธŒ๋ชจ๋“ˆ์˜ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ–ˆ์„ ๋•Œ๋Š” --recurse-submodules ์˜ต์…˜์ด ์ข‹๋‹ค. ํ”„๋กœ์ ํŠธ๋ฅผ Push ํ•  ๋•Œ ์„œ๋ธŒ๋ชจ๋“ˆ์— Push ํ•  ๊ฒŒ ์žˆ์œผ๋ฉด ์„œ๋ธŒ๋ชจ๋“ˆ๋ถ€ํ„ฐ Push ํ•˜๋ฏ€๋กœ ๋งค์šฐ ํŽธ๋ฆฌํ•˜๋‹ค. ์ด ์˜ต์…˜์€ ch07-git-tools.asc์—์„œ ์„ค๋ช…ํ•œ๋‹ค.

ch08-customizing-git.asc์—์„œ pre-push ํ›…์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ–ˆ๋‹ค. ์ด ํ›…์— Push ํ•ด๋„ ๋˜๋Š”์ง€ ๊ฒ€์ฆํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์„ค์ •ํ•˜๋ฉด ๊ทœ์น™์— ๋”ฐ๋ฅด๋„๋ก Push๋ฅผ ๊ฒ€์ฆํ•  ์ˆ˜ ์žˆ๋‹ค.

์ผ๋ฐ˜์ ์ธ ์ด๋ฆ„ ๊ทœ์น™์— ๋”ฐ๋ผ์„œ Push ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ Refspec์„ ์‚ฌ์šฉํ•ด์„œ ์›ํ•˜๋Š” ์ด๋ฆ„์œผ๋กœ Push ํ•˜๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค. ์ด๊ฒƒ์€ ch10-git-internals.asc์—์„œ ์„ค๋ช…ํ•œ๋‹ค.

git remote

git remote ๋ช…๋ น์€ ์›๊ฒฉ ์ €์žฅ์†Œ ์„ค์ •์ธ ๋ฆฌ๋ชจํŠธ์˜ ๊ด€๋ฆฌ ๋„๊ตฌ๋‹ค. ๊ธด URL ๋Œ€์‹  โ€œoriginโ€ ์ฒ˜๋Ÿผ ์ด๋ฆ„์„ ์งง๊ฒŒ ์ง€์„ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  URL๋Œ€์‹  ์งง์€ ๋ฆฌ๋ชจํŠธ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•œ๋‹ค. git remote ๋ช…๋ น์œผ๋กœ ์ด ๋ฆฌ๋ชจํŠธ๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ ๋งŒ๋“ค์–ด ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด ๋ฆฌ๋ชจํŠธ๋ฅผ ์กฐํšŒํ•˜๊ณ  ์ถ”๊ฐ€ํ•˜๊ณ  ์‚ญ์ œํ•˜๊ณ  ์ˆ˜์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ch02-git-basics-chapter.asc์—์„œ ์ž˜ ์„ค๋ช…ํ•œ๋‹ค.

์ด ๋ช…๋ น์€ git remote add <name> <url> ํ˜•์‹์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์ด ์ฑ…์—์„œ ์ž์ฃผ ์‚ฌ์šฉ๋œ๋‹ค.

git archive

git archive ๋ช…๋ น์€ ํ”„๋กœ์ ํŠธ ์Šค๋ƒ…์ƒท์„ ์•„์นด์ด๋ธŒ ํŒŒ์ผ๋กœ ๋งŒ๋“ค์–ด ์ค€๋‹ค.

ch05-distributed-git.asc์—์„œ ์„ค๋ช…ํ•˜๋Š”๋ฐ ํ”„๋กœ์ ํŠธ๋ฅผ Tarball๋กœ ๋งŒ๋“ค์–ด ๊ณต์œ ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

git submodule

git submodule ๋ช…๋ น์€ ์ €์žฅ์†Œ ์•ˆ์—์„œ ๋‹ค๋ฅธ ์ €์žฅ์†Œ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•œ๋‹ค. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋‚˜ ํŠน์ • ํ˜•์‹์˜ ๋ฆฌ์†Œ์Šค ํŒŒ์ผ์„ ์„œ๋ธŒ๋ชจ๋“ˆ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. submodule ๋ช…๋ น์— ์žˆ๋Š” add, update, sync ๋“ฑ์˜ ํ•˜์œ„ ๋ช…๋ น์–ด๋กœ ์„œ๋ธŒ๋ชจ๋“ˆ์„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด ๋ช…๋ น์€ ch07-git-tools.asc์—์„œ ์„ค๋ช…ํ•œ๋‹ค.

๋ณด๊ธฐ์™€ ๋น„๊ต

git show

git show ๋ช…๋ น์€ Git ๊ฐœ์ฒด๋ฅผ ์‚ฌ๋žŒ์ด ์ฝ์„ ์ˆ˜ ์žˆ๋„๋ก ์š”์•ฝํ•ด์„œ ๋ณด์—ฌ์ค€๋‹ค. ํƒœ๊ทธ๋‚˜ ์ปค๋ฐ‹ ์ •๋ณด๋ฅผ ๋ณด๊ณ  ์‹ถ์„ ๋•Œ ์ด ๋ช…๋ น์„ ์‚ฌ์šฉํ•œ๋‹ค.

ch02-git-basics-chapter.asc์„ ๋ณด๋ฉด Annotated ํƒœ๊ทธ์˜ ์ •๋ณด๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ์˜ˆ์ œ๊ฐ€ ๋‚˜์˜จ๋‹ค.

ch07-git-tools.asc์—์„œ ์ด ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๋ณด์—ฌ์ค€๋‹ค.

Merge ํ•˜๋‹ค๊ฐ€ ์ถฉ๋Œ์ด ๋‚ฌ์„ ๋•Œ ํŠน์ • ๋ฒ„์ „์˜ ํŒŒ์ผ ๋‚ด์šฉ์„ git show ๋กœ ๊บผ๋‚ด ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ch07-git-tools.asc์—์„œ ์ด ์ ์„ ์„ค๋ช…ํ•œ๋‹ค.

git shortlog

git shortlog ๋ช…๋ น์€ git log ๋ช…๋ น์˜ ๊ฒฐ๊ณผ๋ฅผ ์š”์•ฝํ•ด์„œ ๋ณด์—ฌ ์ค€๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค. ์˜ต์…˜๋„ git log ๋ช…๋ น์˜ ๊ฒƒ๊ณผ ๋งค์šฐ ๋น„์Šทํ•˜๋‹ค. ์ด ๋ช…๋ น์€ Author ๋ณ„๋กœ ์ปค๋ฐ‹์„ ๋ฌถ์–ด์„œ ๋ณด์—ฌ์ค€๋‹ค.

์ด ๋ช…๋ น์€ Changelog ํŒŒ์ผ์„ ๋งŒ๋“ค ๋•Œ ์œ ์šฉํ•œ ๋ฐ ch05-distributed-git.asc์—์„œ ๋ณด์—ฌ์ค€๋‹ค.

git describe

git describe ๋ช…๋ น์€ ์ปค๋ฐ‹๊ณผ ๊ด€๋ จ๋œ ์ •๋ณด๋ฅผ ์ž˜ ์กฐํ•ฉํ•ด์„œ ์‚ฌ๋žŒ์ด ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ์ŠคํŠธ๋ง์„ ๋งŒ๋“ค์–ด ์ค€๋‹ค. ์ปค๋ฐ‹ SHA-1์ฒ˜๋Ÿผ ์‹๋ณ„ ๊ฐ€๋Šฅํ•˜๊ณ  ์‚ฌ๋žŒ์ด ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ์ •๋ณด๊ฐ€ ํ•„์š”ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

ch05-distributed-git.asc์™€ ch05-distributed-git.asc์—์„œ git describe ๋ช…๋ น์„ ์„ค๋ช…ํ•œ๋‹ค. ์ด ๋ช…๋ น์œผ๋กœ ๋ฐฐํฌ ํŒŒ์ผ์˜ ์ด๋ฆ„์„ ์ง“๋Š”๋‹ค.

Debugging

Git์—๋Š” ๋””๋ฒ„๊น…์šฉ ๋ช…๋ น์–ด๋„ ์žˆ๋‹ค. ๋ˆ„๊ฐ€ ๋ฒ„๊ทธ๋ฅผ ๋งŒ๋“ค์—ˆ๋Š”์ง€ ์–ธ์ œ ์–ด๋””์„œ ์ƒ๊ฒผ๋Š”์ง€ ์ฐพ์•„๋‚ด๋Š” ๋ฐ ๋„์›€์ด ๋œ๋‹ค.

git bisect

git bisect ๋Š” ๊ต‰์žฅํžˆ ์œ ์šฉํ•˜๋‹ค. ์ด์ง„ ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•ด์„œ ๋ฒ„๊ทธ๋‚˜ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธด ์ปค๋ฐ‹์„ ์‰ฝ๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.

์ด ๋ช…๋ น์€ ch07-git-tools.asc์—์„œ ์ž˜ ์„ค๋ช…ํ•œ๋‹ค.

git blame

git blame ์€ ํŒŒ์ผ์˜ ๊ฐ ๋ผ์ธ์„ ๋ˆ„๊ฐ€ ๋งˆ์ง€๋ง‰์œผ๋กœ ์ˆ˜์ •ํ–ˆ๋Š”์ง€ ๋ณด์—ฌ์ค€๋‹ค. ๊ทธ๋ž˜์„œ ํŠน์ • ์ฝ”๋“œ์— ๋Œ€ํ•ด ๊ถ๊ธˆํ•œ ๊ฒŒ ์žˆ์„ ๋•Œ ๋ˆ„๊ตฌ์—๊ฒŒ ๋ฌผ์–ด์•ผ ํ• ์ง€ ๋ฐ”๋กœ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

์ด ๋ช…๋ น์€ ch07-git-tools.asc์—์„œ ๋‹ค๋ฃฌ๋‹ค.

git grep

์†Œ์Šค ์ฝ”๋“œ์—์„œ ์ŠคํŠธ๋ง์ด๋‚˜ ์ •๊ทœํ‘œํ˜„์‹์„ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค. git grep ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜๋ฉด ์˜ˆ์ „ ์†Œ์Šค ์ฝ”๋“œ๊นŒ์ง€ ์ฐพ๋Š”๋‹ค.

ch07-git-tools.asc์—์„œ ์ด ๋ช…๋ น์„ ์„ค๋ช…ํ•œ๋‹ค.

Patch ํ•˜๊ธฐ

์ปค๋ฐ‹ ๋ฌถ์Œ์„ Patch ๋ฌถ์Œ์ฒ˜๋Ÿผ ๋‹ค๋ฃจ๋Š” ๊ฒƒ์ด ํŽธํ•  ๋•Œ๊ฐ€ ์žˆ๋‹ค. ์ด๋Ÿด ๋•Œ๋ฅผ ์œ„ํ•ด์„œ Git์—๋Š” ์ปค๋ฐ‹ ๋ช‡ ๊ฐœ๋งŒ ์ถ”์ถœํ•˜๊ณ  ์ ์šฉํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ๋ช…๋ น์–ด๊ฐ€ ์žˆ๋‹ค. ์ด ๋ช…๋ น์–ด๋Š” ๋ธŒ๋žœ์น˜๋ฅผ ๊ด€๋ฆฌํ•  ๋•Œ ์ข‹๋‹ค.

git cherry-pick

git cherry-pick ๋ช…๋ น์€ ์ปค๋ฐ‹ ํ•˜๋‚˜๋งŒ ๊ฐ€์ ธ์˜ฌ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. ํ˜„ ๋ธŒ๋žœ์น˜์˜ ์ƒˆ ์ปค๋ฐ‹์œผ๋กœ ์ ์šฉ๋œ๋‹ค. ์ด ๋ช…๋ น์€ ๋ธŒ๋žœ์น˜๋ฅผ ํ†ต์งธ๋กœ Merge ํ•˜๊ธฐ ๋ณด๋‹ค ์ปค๋ฐ‹ ํ•œ๋‘ ๊ฐœ ์ •๋„๋งŒ Merge ํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์ข‹๋‹ค.

์ด ๋ช…๋ น์œผ๋กœ ์ปค๋ฐ‹์„ ๊ณ ๋ฅด๋Š” ๊ฒƒ์€ ch05-distributed-git.asc์—์„œ ์„ค๋ช…ํ•œ๋‹ค.

git rebase

git rebase ๋ช…๋ น์€ check-pick ์„ ์—ฌ๋Ÿฌ ๋ฒˆ ์‹คํ–‰ํ•ด ์ฃผ๋Š” ๊ฒƒ๊ณผ ๊ฐ™๋‹ค. ์—ฐ๊ฒฐ๋œ ์ปค๋ฐ‹์„ ๊ทธ ์ˆœ์„œ๋Œ€๋กœ ํ•œ๋ฐฉ์— Cherry-pick ํ•ด์˜จ๋‹ค.

Rebase๋Š” ch03-git-branching.asc์—์„œ ์„ค๋ช…ํ•œ๋‹ค. ์ด๋ฏธ ๊ณต๊ฐœํ•œ ๋ธŒ๋žœ์น˜๋ฅผ Rebase ํ•  ๋•Œ ์ƒ๊ธฐ๋Š” ๋ฌธ์ œ๋„ ๋‹ค๋ฃฌ๋‹ค.

ch07-git-tools.asc์—์„œ๋Š” ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ๋‘ ์ €์žฅ์†Œ๋กœ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ์„ ๋ณด์—ฌ์ฃผ๋Š”๋ฐ ์—ฌ๊ธฐ์„œ --onto ์˜ต์…˜์„ ์‚ฌ์šฉํ•œ๋‹ค.

ch07-git-tools.asc์—์„œ Rebase ํ•˜๋ฉด์„œ ๋ฐœ์ƒํ•œ ์ถฉ๋Œ์„ ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ•˜๋Š”์ง€ ๋ณด์—ฌ์ค€๋‹ค.

-i ์˜ต์…˜์„ ์ฃผ๊ณ  ์ด ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋ฉด ๋Œ€ํ™”ํ˜•์œผ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. ch07-git-tools.asc์—์„œ ์„ค๋ช…ํ•œ๋‹ค.

git revert

git revert ๋ช…๋ น์€ git cherry-pick ๋ช…๋ น์˜ ๋ฐ˜๋Œ€๋กœ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ํ•ด๋‹น ์ปค๋ฐ‹์„ ๋˜๋Œ๋ฆฌ๋Š” ์ปค๋ฐ‹์„ ์ƒˆ๋กœ ์ƒ์„ฑํ•œ๋‹ค.

ch07-git-tools.asc์—์„œ Merge ์ปค๋ฐ‹์„ ๋˜๋Œ๋ฆฌ๋Š” ๊ฒƒ์„ ๋ณด์—ฌ์ค€๋‹ค.

Email

๋ฉ”์ผ๋ง ๋ฆฌ์ŠคํŠธ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ํ”„๋กœ์ ํŠธ๊ฐ€ ๋งŽ์ด ์žˆ๋‹ค. Git ํ”„๋กœ์ ํŠธ ์ž์ฒด๋„ ๊ทธ๋ ‡๋‹ค. Git์—๋Š” ์ด๋ฉ”์ผ๋กœ ์ž‘์—…ํ•˜๊ธฐ ์‰ฝ๊ฒŒ ๋งŒ๋“ค์–ด ์ฃผ๋Š” ๋„๊ตฌ๊ฐ€ ๋“ค์–ด ์žˆ๋‹ค. Patch๋ฅผ ์ƒ์„ฑํ•ด์„œ ์ด๋ฉ”์ผ์„ ๋ณด๋‚ด๊ณ  ๋ฉ”์ผ ๋ฐ•์Šค์—์„œ Patch๋ฅผ ์ ์šฉํ•˜๋Š” ๊ณผ์ •์„ ๋„์™€์ค€๋‹ค.

git apply

git apply ๋ช…๋ น์€ git diff ๋ช…๋ น์œผ๋กœ ์ƒ์„ฑํ•œ Patch๋ฅผ ์ ์šฉํ•˜๋Š” ๋ช…๋ น์ด๋‹ค. GNU diff ๋ช…๋ น์œผ๋กœ ์ƒ์„ฑํ•œ Patch๋„ ๊ฐ€๋Šฅํ•˜๋‹ค. ์•ฝ๊ฐ„์˜ ์ฐจ์ด๋Š” ์žˆ์ง€๋งŒ patch ๋ช…๋ น์–ด๋ž‘ ๋น„์Šทํ•˜๋‹ค.

์ด ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜๋Š” ์ƒํ™ฉ๊ณผ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜๋Š”์ง€ ch05-distributed-git.asc์—์„œ ์„ค๋ช…ํ•œ๋‹ค.

git am

git am ๋ช…๋ น์œผ๋กœ ์ด๋ฉ”์ผ ์ธ๋ฐ•์Šค์— ๋“  mbox ํฌ๋งท์˜ Patch๋ฅผ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฉ”์ผ๋กœ ํŒจ์น˜๋ฅผ ์ฃผ๊ณ ๋ฐ›์„ ๋•Œ ์œ ์šฉํ•˜๋‹ค.

git am ์„ ์–ธ์ œ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜๋Š”์ง€๋Š” ch05-distributed-git.asc์—์„œ ๋‹ค๋ฃฌ๋‹ค. --resolved, -i, -3 ์˜ต์…˜ ์‚ฌ์šฉ๋ฒ•์„ ์„ค๋ช…ํ•œ๋‹ค.

git am ๋ช…๋ น์„ ์‚ฌ์šฉํ•  ๋•Œ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š” ํ›…์€ ch08-customizing-git.asc์—์„œ ๋‹ค๋ฃฌ๋‹ค.

์ด ๋ช…๋ น์œผ๋กœ GitHub Pull Request์˜ Patch๋„ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ch06-github.asc์—์„œ ์„ค๋ช…ํ•œ๋‹ค.

git format-patch

git format-patch ๋ช…๋ น์€ Patch๋ฅผ mbox ํฌ๋งท์œผ๋กœ ์ƒ์„ฑํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•œ๋‹ค. ์ƒ์„ฑ ํ•œ ํŒจ์น˜๋ฅผ ์‰ฝ๊ฒŒ ๋ฉ”์ผ๋ง ๋ฆฌ์ŠคํŠธ๋กœ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

git format-patch ๋กœ ํ”„๋กœ์ ํŠธ์— ๊ธฐ์—ฌํ•˜๋Š” ์˜ˆ์ œ๋ฅผ ch05-distributed-git.asc์—์„œ ๋ณด์—ฌ์ค€๋‹ค.

git imap-send

git imap-send ๋ช…๋ น์€ git format-patch ๋กœ ์ƒ์„ฑํ•œ ๋ฉ”์ผ์„ IMAP drafts ํด๋”์— ๋„ฃ์–ด์ค€๋‹ค.

git imap-send ๋ช…๋ น์œผ๋กœ ์˜ˆ์ œ๋Š” ch05-distributed-git.asc์—์„œ ์‚ดํŽด๋ณธ๋‹ค. ํŒจ์น˜๋ฅผ ๋ณด๋‚ด์„œ ํ”„๋กœ์ ํŠธ์— ๊ธฐ์—ฌํ•ด๋ณด๋Š” ์˜ˆ์ œ๋‹ค.

git send-email

git send-email ๋ช…๋ น์€ git format-patch ๋ช…๋ น์œผ๋กœ ์ƒ์„ฑํ•œ Patch๋ฅผ ์ด๋ฉ”์ผ๋กœ ๋ณด๋‚ด๋Š” ๋ฐ ์‚ฌ์šฉํ•œ๋‹ค.

ch05-distributed-git.asc์—์„œ git send-email ๋ช…๋ น์œผ๋กœ ํŒจ์น˜๋ฅผ ๋ณด๋‚ด์„œ ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ์— ๊ธฐ์—ฌํ•˜๋Š” ๊ฒƒ์„ ๋ณด์—ฌ์ค€๋‹ค.

git request-pull

git request-pull ๋ช…๋ น์€ ๋ฉ”์ผ ๋ฐ”๋””๋ฅผ ์ƒ์„ฑํ•ด์ฃผ๋Š” ๋ช…๋ น์ด๋‹ค. ๊ทธ๋ž˜์„œ ์‰ฝ๊ฒŒ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์—๊ฒŒ ๋ฉ”์ผ์„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋‹ค. ๋ธŒ๋žœ์น˜์— ์ปค๋ฐ‹ํ•˜๊ณ  Push ํ•ด ๋†“์€ ์ƒํƒœ๋ฅผ ๋ˆ„๊ตฐ๊ฐ€์—๊ฒŒ ์•Œ๋ฆด ๋•Œ ์œ ์šฉํ•˜๋‹ค. Patch ์ž์ฒด๋Š” ์ด๋ฉ”์ผ๋กœ ๋ณด๋‚ด์ง€ ์•Š๊ณ  ์ •๋ณด๋งŒ ์š”์•ฝํ•ด ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋‹ค. ์ด ๋ช…๋ น์˜ ๊ฒฐ๊ณผ๋ฅผ ๋ฉ”์ผ๋กœ ๋ณด๋‚ด๋ฉด ๋œ๋‹ค.

ch05-distributed-git.asc์—์„œ git request-pull ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๋ณด์—ฌ์ค€๋‹ค.

๋‹ค๋ฅธ ๋ฒ„์ „ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ

Git์—๋Š” ๋‹ค๋ฅธ ๋ฒ„์ „ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์„ ์ง€์›ํ•˜๋Š” ๋ช…๋ น์–ด๋„ ์žˆ๋‹ค.

git svn

git svn ๋ช…๋ น์€ Git์„ Subversion์˜ ํด๋ผ์ด์–ธํŠธ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ช…๋ น์ด๋‹ค. ๊ทธ๋ž˜์„œ Git์œผ๋กœ Subversion ์„œ๋ฒ„์— ์žˆ๋Š” ์ปค๋ฐ‹์„ Checkout ํ•  ์ˆ˜ ์žˆ๋‹ค.

ch09-git-and-other-systems.asc์—์„œ ์ž์„ธํžˆ ์„ค๋ช…ํ•œ๋‹ค.

git fast-import

๋ฒ„์ „ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์„ ๊ฐ€๋ฆฌ์ง€ ์•Š๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ Git์œผ๋กœ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋Š” ๋‹ค๋ชฉ์  ๋ช…๋ น์–ด๋„ ์žˆ๋‹ค. ๋ฒ„์ „ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋‹ค๋ฅธ ํ˜•์‹์œผ๋กœ ๊ด€๋ฆฌํ•˜๋˜ ๋ฐ์ดํ„ฐ๋„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค. git fast-import ๋ช…๋ น์€ ๋‹ค๋ฅธ ํฌ๋งท์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์‰ฝ๊ฒŒ ๋งคํ•‘ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค.

ch09-git-and-other-systems.asc์—์„œ ์ด ๋ช…๋ น์„ ์„ค๋ช…ํ•œ๋‹ค.

๊ด€๋ฆฌ

๊ด€๋ฆฌ์ž๋Š” Git ์ €์žฅ์†Œ์— ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๋ฉด ํ•ด๊ฒฐํ•ด์•ผ ํ•œ๋‹ค. Git์€ ์ด๋•Œ ํ•„์š”ํ•œ ๋ช…๋ น์–ด๋„ ์ œ๊ณตํ•œ๋‹ค.

git gc

git gc ๋Š” ์ €์žฅ์†Œ์— ํ•„์š”์—†๋Š” ํŒŒ์ผ์„ ์‚ญ์ œํ•˜๊ณ  ๋‚จ์€ ํŒŒ์ผ์„ ์••์ถ•ํ•˜๋Š” โ€œGarbage Collectionโ€ ๋ช…๋ น์ด๋‹ค.

์ง์ ‘ ์‹คํ–‰์‹œ์ผœ๋„ ๋˜์ง€๋งŒ Git์ด ์ž๋™์œผ๋กœ ์‹คํ–‰ํ•ด์ค€๋‹ค. ์ž์„ธํ•œ ์„ค๋ช…์€ ch10-git-internals.asc์—์„œ ํ•œ๋‹ค.

git fsck

git fsck ๋Š” Git ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ฌธ์ œ๊ฐ€ ์—†๋Š”์ง€ ๊ฒ€์‚ฌํ•ด์ค€๋‹ค.

ch10-git-internals.asc์—์„œ Dangling ๊ฐœ์ฒด๋ฅผ ์ฐพ๋Š” ๋ฒ•์„ ์„ค๋ช…ํ•œ๋‹ค.

git reflog

git reflog ๋ช…๋ น์€ HEAD๊ฐ€ ๊ฐ€๋ฆฌ์ผฐ๋˜ ์ปค๋ฐ‹์˜ ๋กœ๊ทธ๋ฅผ ๋ณด์—ฌ์ค€๋‹ค. ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ์žฌ์ž‘์„ฑํ•ด์„œ ์žƒ์–ด๋ฒ„๋ฆฐ ์ปค๋ฐ‹์„ ์ฐพ์„ ๋•Œ ์œ ์šฉํ•˜๋‹ค.

ch07-git-tools.asc์—์„œ ์ด ๋ช…๋ น์„ ์„ค๋ช…ํ•œ๋‹ค. git log ๋ช…๋ น์— -g ์˜ต์…˜์„ ์ฃผ๋ฉด git log ๋ช…๋ น์˜ ๊ฒฐ๊ณผ์ฒ˜๋Ÿผ Reflog๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

์žƒ์–ด๋ฒ„๋ฆฐ ๋ธŒ๋žœ์น˜๋ฅผ ๋ณต๊ตฌํ•˜๋Š” ๋ฒ•์€ ch10-git-internals.asc์—์„œ๋„ ์„ค๋ช…ํ•œ๋‹ค.

git filter-branch

git filter-branch ๋ช…๋ น์€ ์ปค๋ฐ‹ ๋ญ‰์น˜๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•œ๋‹ค. ์ „์ฒด ํžˆ์Šคํ† ๋ฆฌ์—์„œ ํŒŒ์ผ์„ ์‚ญ์ œํ•˜๊ฑฐ๋‚˜ ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•œ๋‹ค.

ch07-git-tools.asc์—์„œ --commit-filter, --subdirectory-filter, --tree-filter ๊ฐ™์€ ์˜ต์…˜ ์‚ฌ์šฉ๋ฒ•์„ ์„ค๋ช…ํ•œ๋‹ค.

ch09-git-and-other-systems.asc, ch09-git-and-other-systems.asc์—์„œ๋Š” ๋‹ค๋ฅธ ๋ฒ„์ „ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์—์„œ ๊ฐ€์ ธ์˜จ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋ฐ”๋กœ ์žก๋Š” ๋ฐ ์‚ฌ์šฉํ•œ๋‹ค.

Plumbing ๋ช…๋ น์–ด

์ด ์ฑ…์—์„œ๋Š” ์ €์ˆ˜์ค€ Plumbing ๋ช…๋ น์–ด๋„ ๋งŽ์ด ์†Œ๊ฐœํ•œ๋‹ค.

ch06-github.asc์—์„œ๋Š” ์„œ๋ฒ„์— ์žˆ๋Š” ์ €์ˆ˜์ค€ Ref๋ฅผ ์กฐํšŒํ•˜๋Š” ls-remote ๋ช…๋ น์„ ์†Œ๊ฐœํ•œ๋‹ค.

ch07-git-tools.asc์™€ ch07-git-tools.asc, ch07-git-tools.asc์—์„œ ์‚ฌ์šฉํ•˜๋Š” ls-files ๋Š” Staging Area์˜ ์ €์ˆ˜์ค€ ๋ชจ์Šต์„ ๋ณด์—ฌ์ค€๋‹ค.

rev-parse ๋ช…๋ น์€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฐœ์ฒด์˜ SHA-1 ๊ฐ’์„ ๋ณด์—ฌ์ค€๋‹ค. ch07-git-tools.asc์—์„œ ๋‹ค๋ฃฌ๋‹ค.

์ €์ˆ˜์ค€ ๋ช…๋ น์ธ Plumbing ๋ช…๋ น์€ ๊ฑฐ์˜ ch10-git-internals.asc์—์„œ ์„ค๋ช…ํ•œ๋‹ค. Plumbing ๋ช…๋ น์—๋Š” ์ด ์žฅ์—์„œ๋งŒ ์„ค๋ช…ํ•˜๋ ค๊ณ  ํ–ˆ๋‹ค. ๋‹ค๋ฅธ ์žฅ์—์„œ๋Š” ์ตœ๋Œ€ํ•œ Plumbing ๋ช…๋ น์–ด๋Š” ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ ค๊ณ  ๋…ธ๋ ฅํ–ˆ๋‹ค.