๋ณธ๋ฌธ์œผ๋กœ ๊ฑด๋„ˆ๋›ฐ๊ธฐ

๐ŸŒˆ Chapter 2: Git์˜ ๊ธฐ์ดˆ

๐Ÿฆ„ Git ์ €์žฅ์†Œ ๋งŒ๋“ค๊ธฐโ€‹

๐Ÿฃ ๊ธฐ์กด ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ Git ์ €์žฅ์†Œ๋กœ ๋งŒ๋“ค๊ธฐโ€‹

> git init
  • ์ด ๋ช…๋ น์€ .git์ด๋ผ๋Š” ํ•˜์œ„ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ๋งŒ๋“ ๋‹ค. ์ด ๋””๋ ‰ํ„ฐ๋ฆฌ๋Š” ์ €์žฅ์†Œ์— ํ•„์š”ํ•œ ๋ผˆ๋Œ€ ํŒŒ์ผ์ด ๋“ค์–ด์žˆ๋‹ค.
  • Git์ด ํŒŒ์ผ์„ ๊ด€๋ฆฌํ•˜๊ฒŒ ํ•˜๋ ค๋ฉด ์ €์žฅ์†Œ์— ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•˜๊ณ  ์ปค๋ฐ‹ํ•ด์•ผ ํ•œ๋‹ค.
> git add *.c // ํŒŒ์ผ์„ ์ถ”๊ฐ€
> git add LICENSE // ํŒŒ์ผ์„ ์ถ”๊ฐ€
> git commit -m 'initial project version' // ์ปค๋ฐ‹

๐Ÿฃ ๊ธฐ์กด ์ €์žฅ์†Œ๋ฅผ Clone ํ•˜๊ธฐโ€‹

  • ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ์— ์ฐธ์—ฌํ•˜๊ฑฐ๋‚˜(contribute) Git ์ €์žฅ์†Œ๋ฅผ ๋ณต์‚ฌํ•˜๊ณ  ์‹ถ์„ ๋•Œ git clone ๋ช…๋ น์„ ์‚ฌ์šฉํ•œ๋‹ค.
  • Git์ด SVN๊ณผ ๊ฐ€์žฅ ํฐ ์ฐจ์ด์ ์€ ์„œ๋ฒ„์— ์žˆ๋Š” ๊ฑฐ์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต์‚ฌํ•œ๋‹ค.
  • git clone์„ ์‹คํ–‰ํ•˜๋ฉด ํ”„๋กœ์ ํŠธ ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ์ „๋ถ€ ๋ฐ›์•„์˜จ๋‹ค.
> git clone [url]
  • ์ €์žฅ์†Œ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋‘ ๊ฐ€์ ธ์™€์„œ ์ž๋™์œผ๋กœ ๊ฐ€์žฅ ์ตœ์‹  ๋ฒ„์ „์„ checkout ํ•ด ๋†“๋Š”๋‹ค.
> git clone [url] [๋””๋ ‰ํ„ฐ๋ฆฌ ๋ช…] // ๋””๋ ‰ํ„ฐ๋ฆฌ ๋ช…์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿฆ„ ์ˆ˜์ •ํ•˜๊ณ  ์ €์žฅ์†Œ์— ์ €์žฅํ•˜๊ธฐโ€‹

  • ํŒŒ์ผ์„ ์ˆ˜์ •ํ•˜๋‹ค๊ฐ€ ์ €์žฅํ•˜๊ณ  ์‹ถ์œผ๋ฉด ์Šค๋ƒ…์ƒท์„ ์ปค๋ฐ‹ํ•œ๋‹ค.
  • ์›Œํ‚น ๋””๋ ‰ํ„ฐ๋ฆฌ์˜ ๋ชจ๋“  ํŒŒ์ผ์€ ํฌ๊ฒŒ Tracked(๊ด€๋ฆฌ๋Œ€์ƒ์ž„)์™€ Untracked(๊ด€๋ฆฌ๋Œ€์ƒ์ด ์•„๋‹˜)๋กœ ๋‚˜๋ˆˆ๋‹ค.
  • Tracked ํŒŒ์ผ์€ ์ด๋ฏธ ์Šค๋ƒ…์ƒท์— ํฌํ•จ๋ผ ์žˆ๋˜ ํŒŒ์ผ์ด๊ณ  Tracked ํŒŒ์ผ์€ ๋˜ Unmodified(์ˆ˜์ •ํ•˜์ง€ ์•Š์Œ)์™€ Modified(์ˆ˜์ •ํ•จ) ๊ทธ๋ฆฌ๊ณ  Staged(์ปค๋ฐ‹์œผ๋กœ ์ €์žฅ์†Œ์— ๊ธฐ๋กํ• ) ์ƒํƒœ ์ค‘ ํ•˜๋‚˜์ด๋‹ค.
  • ์ฒ˜์Œ์— ์ €์žฅ์†Œ๋ฅผ Cloneํ•˜๋ฉด ๋ชจ๋“  ํŒŒ์ผ์€ Tracked์ด๋ฉด์„œ Unmodified ์ƒํƒœ์ด๋‹ค. ์ดํ›„ ์–ด๋–ค ํŒŒ์ผ์„ ์ˆ˜์ •ํ•˜๋ฉด Git์€ ๊ทธ ํŒŒ์ผ์„ Modified ์ƒํƒœ๋กœ ์ธ์‹ํ•œ๋‹ค.
  • ์‹ค์ œ๋กœ ์ˆ˜์ •ํ•œ ํŒŒ์ผ์„ Staged ์ƒํƒœ๋กœ ๋งŒ๋“ค๊ณ , Staged ์ƒํƒœ์˜ ํŒŒ์ผ์„ ์ปค๋ฐ‹ํ•œ๋‹ค. (์‚ฌ์ดํด ๋ฐ˜๋ณต)

๐Ÿฃ ํŒŒ์ผ์˜ ์ƒํƒœ ํ™•์ธํ•˜๊ธฐโ€‹

  • ํŒŒ์ผ ์ƒํƒœ๋ฅผ ํ™•์ธํ•˜๋ ค๋ฉด git status ๋ช…๋ น์„ ์‚ฌ์šฉํ•œ๋‹ค.
> git status
  • ํ”„๋กœ์ ํŠธ์— README ํŒŒ์ผ์„ ๋งŒ๋“ค๋ฉด README ํŒŒ์ผ์€ ์ƒˆ๋กœ ๋งŒ๋“  ํŒŒ์ผ์ด๊ธฐ ๋•Œ๋ฌธ์— git status๋ฃฐ ์‹คํ–‰ํ•˜๋ฉด Untracked files์— ๋“ค์–ด ์žˆ๋‹ค.
  • Untracked ์ƒํƒœ๋Š” ์•„์ง ์Šค๋ƒ…์ƒท(์ปค๋ฐ‹)์— ๋„ฃ์–ด์ง€์ง€ ์•Š๋Š” ํŒŒ์ผ์ด๋‹ค.

๐Ÿฃ ํŒŒ์ผ ์ƒˆ๋กœ ์ถ”์ ํ•˜๊ธฐโ€‹

  • git add ๋ช…๋ น์œผ๋กœ ํŒŒ์ผ์„ ์ƒˆ๋กœ ์ถ”์ ํ•  ์ˆ˜ ์žˆ๋‹ค.
> git add README
  • ๊ทธ ํ›„ git status ๋ช…๋ น์„ ๋‹ค์‹œ ์‹คํ–‰ํ•˜๋ฉด Tracked ์ƒํƒœ์ด๋ฉด์„œ ์ปค๋ฐ‹์— ์ถ”๊ฐ€๋  Staged ์ƒํƒœ๋ผ๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ปค๋ฐ‹ํ•˜๋ฉด git add๋ฅผ ์‹คํ–‰ํ•œ ์‹œ์ ์˜ ํŒŒ์ผ์ด ์ปค๋ฐ‹๋˜์–ด ์ €์žฅ์†Œ ํžˆ์Šคํ† ๋ฆฌ์— ๋‚จ๋Š”๋‹ค.

๐Ÿฃ Modified ์ƒํƒœ์˜ ํŒŒ์ผ์„ Stageํ•˜๊ธฐโ€‹

  • ์ด๋ฏธ Tracked ์ƒํƒœ์ธ ํŒŒ์ผ์„ ์ˆ˜์ •ํ•˜๋ฉด Changes not staged for commit์— ์žˆ๋‹ค.
โฏ git status
ํ˜„์žฌ ๋ธŒ๋žœ์น˜ pro-git-chapter-2 ๋ธŒ๋žœ์น˜๊ฐ€ 'origin/master'์— ๋งž๊ฒŒ ์—…๋ฐ์ดํŠธ๋œ ์ƒํƒœ์ž…๋‹ˆ๋‹ค.

์ปค๋ฐ‹ํ•˜๋„๋ก ์ •ํ•˜์ง€ ์•Š์€ ๋ณ€๊ฒฝ ์‚ฌํ•ญ:
(๋ฌด์—‡์„ ์ปค๋ฐ‹ํ• ์ง€ ๋ฐ”๊พธ๋ ค๋ฉด "git add <ํŒŒ์ผ>..."์„ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค)
(use "git restore <file>..." to discard changes in working directory)
์ˆ˜์ •ํ•จ: "Pro Git 2\355\214\220/Chapter 1/README.md"
  • ์ด ์ƒํƒœ๋Š” ์ˆ˜์ •ํ•œ ํŒŒ์ผ์ด Tracked ์ƒํƒœ์ด์ง€๋งŒ ์•„์ง Staged ์ƒํƒœ๋Š” ์•„๋‹ˆ๋ผ๋Š” ์ ์ด๋‹ค.
  • Staged ์ƒํƒœ๋กœ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ๋Š” git add ๋ช…๋ น์„ ์‹คํ–‰ํ•ด์•ผ ํ•œ๋‹ค.
  • git addํ›„ ํ•ด๋‹น ํŒŒ์ผ์„ ๋‹ค์‹œ ์ˆ˜์ •ํ•˜๋ฉด ๊ทธ ํŒŒ์ผ์˜ ์ƒํƒœ๋Š” Staged ์ƒํƒœ์ด๋ฉด์„œ ๋™์‹œ์— Unstaged ์ƒํƒœ๋กœ ๋‚˜์˜ค๊ฒŒ ๋œ๋‹ค. ์ด๋ ‡๊ฒŒ ๋˜๋Š” ์ด์œ ๋Š” git commit์€ ์‹คํ–‰ํ•˜๋Š” ์‹œ์ ์˜ ๋ฒ„์ „์ด ์ปค๋ฐ‹๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋งˆ์ง€๋ง‰์œผ๋กœ git add ๋ช…๋ น์„ ์‹คํ–‰ํ–ˆ์„ ๋•Œ์˜ ๋ฒ„์ „์ด ์ปค๋ฐ‹๋œ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์ตœ์‹  ์ƒํƒœ๋กœ ๋ฐ˜์˜ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋‹ค์‹œ git add ๋ช…๋ น์„ ์‹คํ–‰ํ•ด์„œ ์ตœ์‹  ๋ฒ„์ „์„ Staged ์ƒํƒœ๋กœ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค.

๐Ÿฃ ํŒŒ์ผ ์ƒํƒœ๋ฅผ ์งค๋ง‰ํ•˜๊ฒŒ ํ™•์ธํ•˜๊ธฐโ€‹

  • git status -s ๋˜๋Š” git status --short ์ฒ˜๋Ÿผ ์˜ต์…˜์„ ์ฃผ๋ฉด ํ˜„์žฌ ๋ณ€๊ฒฝํ•œ ์ƒํƒœ๋ฅผ ์งค๋ง‰ํ•˜๊ฒŒ ๋ณด์—ฌ์ค€๋‹ค.
> git status -s
M "Pro Git 2\355\214\220/Chapter 1/README.md"
?? "Pro Git 2\355\214\220/Chapter 2/"
  • ์•„์ง ์ถ”์ ํ•˜์ง€ ์•Š๋Š” ์ƒˆ ํŒŒ์ผ ์•ž์—๋Š” ??ํ‘œ์‹œ๊ฐ€ ๋ถ™๋Š”๋‹ค.
  • Staged ์ƒํƒœ๋กœ ์ถ”๊ฐ€ํ•œ ํŒŒ์ผ ์ค‘ ์ƒˆ๋กœ ์ƒ์„ฑํ•œ ํŒŒ์ผ ์•ž์—๋Š” A ํ‘œ์‹œ๊ฐ€, ์ˆ˜์ •ํ•œ ํŒŒ์ผ ์•ž์—๋Š” Mํ‘œ์‹œ๊ฐ€ ๋ถ™๋Š”๋‹ค.
  • MM์ด ๋ถ™๋Š” ๊ฒฝ์šฐ๋Š” ํ•ด๋‹น ํŒŒ์ผ์„ ๋ณ€๊ฒฝํ•˜๊ณ  Staged ์ƒํƒœ๋กœ ์ถ”๊ฐ€ํ•œ ํ›„ ๋˜ ๋‚ด์šฉ์„ ๋ณ€๊ฒฝํ•ด์„œ Staged์ด๋ฉด์„œ Unstaged ์ƒํƒœ์ธ ํŒŒ์ผ์ด๋‹ค.

๐Ÿฃ ํŒŒ์ผ ๋ฌด์‹œํ•˜๊ธฐโ€‹

  • ๋กœ๊ทธ ํŒŒ์ผ์ด๋‚˜ ๋นŒ๋“œ ์‹œ์Šคํ…œ์ด ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•˜๋Š” ํŒŒ์ผ ๊ฐ™์€ ๊ฒฝ์šฐ์—๋Š” Git์ด ๊ด€๋ฆฌํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.
  • ์ด๋Ÿฌํ•œ ํŒŒ์ผ์„ ๋ฌด์‹œํ•˜๋ ค๋ฉด .gitignore ํŒŒ์ผ์„ ๋งŒ๋“ค๊ณ  ๊ทธ ์•ˆ์— ๋ฌด์‹œํ•  ํŒŒ์ผ ํŒจํ„ด์„ ์ ๋Š”๋‹ค.
  • .gitignoreํŒŒ์ผ์€ ๋ณดํ†ต ์ฒ˜์Œ์— ๋งŒ๋“ค์–ด ๋‘๋Š” ๊ฒƒ์ด ํŽธ๋ฆฌํ•˜๋‹ค. ๊ทธ๋ž˜์•ผ Git ์ €์žฅ์†Œ์— ์ปค๋ฐ‹ํ•˜๊ณ  ์‹ถ์ง€ ์•Š์€ ํŒŒ์ผ์„ ์‹ค์ˆ˜๋กœ ์ปค๋ฐ‹ํ•˜๋Š” ์ผ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • .gitignore ํŒŒ์ผ์— ์ž…๋ ฅํ•˜๋Š” ํŒจํ„ด์€ ์•„๋ž˜ ๊ทœ์น™์„ ๋”ฐ๋ฅธ๋‹ค.
  1. ์•„๋ฌด๊ฒƒ๋„ ์—†๋Š” ๋ผ์ธ์ด๋‚˜, #๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ผ์ธ์€ ๋ฌด์‹œํ•œ๋‹ค.
  2. ํ‘œ์ค€ Glob ํŒจํ„ด์„ ์‚ฌ์šฉํ•œ๋‹ค.
  3. ์Šฌ๋ž˜์‹œ(/)๋กœ ์‹œ์ž‘ํ•˜๋ฉด ํ•˜์œ„ ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์ ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค.
  4. ๋””๋ ‰ํ„ฐ๋ฆฌ๋Š” ์Šฌ๋ž˜์‹œ(/)๋ฅผ ๋์— ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์œผ๋กœ ํ‘œํ˜„ํ•œ๋‹ค.
  5. ๋Š๋‚Œํ‘œ(!)๋กœ ์‹œ์ž‘ํ•˜๋Š” ํŒจํ„ด์˜ ํŒŒ์ผ์€ ๋ฌด์‹œํ•˜์ง€ ์•Š๋Š”๋‹ค.

๐Ÿฃ Staged์™€ Unstaged ์ƒํƒœ์˜ ๋ณ€๊ฒฝ ๋‚ด์šฉ์„ ๋ณด๊ธฐโ€‹

  • ์–ด๋–ค ๋‚ด์šฉ์ด ๋ณ€๊ฒฝ๋๋Š”์ง€ ์‚ดํŽด๋ณด๋ ค๋ฉด git status ๋ช…๋ น์ด ์•„๋‹ˆ๋ผ git diff ๋ช…๋ น์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.
> git diff
  • ์ด ๋ช…๋ น์€ ์›Œํ‚น ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์žˆ๋Š” ๊ฒƒ๊ณผ Staging Area์— ์žˆ๋Š” ๊ฒƒ์„ ๋น„๊ตํ•œ๋‹ค.
  • ๋งŒ์•ฝ ์ปค๋ฐ‹ํ•˜๋ ค๊ณ  Staging Area์— ๋„ฃ์€ ํŒŒ์ผ์˜ ๋ณ€๊ฒฝ ๋ถ€๋ถ„์„ ๋ณด๊ณ  ์‹ถ์œผ๋ฉด git diff --staged ์˜ต์…˜์„ ์‚ฌ์šฉํ•œ๋‹ค.
  • git diff ๋ช…๋ น์€ ๋งˆ์ง€๋ง‰์œผ๋กœ ์ปค๋ฐ‹ํ•œ ํ›„์— ์ˆ˜์ •ํ•œ ๊ฒƒ๋“ค ์ „๋ถ€๋ฅผ ๋ณด์—ฌ์ฃผ์ง€ ์•Š๋Š”๋‹ค. git diff๋Š” Unstaged ์ƒํƒœ์ธ ๊ฒƒ๋“ค๋งŒ ๋ณด์—ฌ์ค€๋‹ค. ์ฆ‰, ์ˆ˜์ •ํ•œ ํŒŒ์ผ์„ ๋ชจ๋‘ Staging Area์— ๋„ฃ์—ˆ๋‹ค๋ฉด git diff ๋ช…๋ น์€ ์•„๋ฌด๊ฒƒ๋„ ์ถœ๋ ฅํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • Staged ์ƒํƒœ์ธ ํŒŒ์ผ์€ git diff --cached ์˜ต์…˜์œผ๋กœ ํ™•์ธํ•œ๋‹ค. --staged์™€ --cached๋Š” ๊ฐ™์€ ์˜ต์…˜์ด๋‹ค.

๐Ÿฃ ๋ณ€๊ฒฝ์‚ฌํ•ญ ์ปค๋ฐ‹ํ•˜๊ธฐโ€‹

  • Git์€ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•˜๊ณ  ๋‚˜์„œ git add ๋ช…๋ น์œผ๋กœ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์€ ํŒŒ์ผ์€ ์ปค๋ฐ‹ํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • git commit์„ ์‹คํ–‰ํ•˜์—ฌ ์ปค๋ฐ‹ํ•œ๋‹ค.
> git commit
  • ์ปค๋ฐ‹์„ ํ•˜๊ฒŒ ๋˜๋ฉด Git ์„ค์ •์—์„œ ์ง€์ •๋œ ํŽธ์ง‘๊ธฐ(Vim, Emacs)๊ฐ€ ์‹คํ–‰๋˜๊ณ , ์ž๋™์œผ๋กœ ํ…์ŠคํŠธ๊ฐ€ ์ž๋™์œผ๋กœ ํฌํ•จ๋œ๋‹ค.
  • ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋˜๋Š” ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€์˜ ์ฒซ ๋ผ์ธ์€ ๋น„์–ด ์žˆ๊ณ  ๋‘˜์งธ ๋ผ์ธ๋ถ€ํ„ฐ git status ๋ช…๋ น์ด ๊ฒฐ๊ณผ๊ฐ€ ์ฑ„์›Œ์ง„๋‹ค. (์ด ๋ฉ”์‹œ์ง€๋Š” ์‚ญ์ œํ•˜๊ฑฐ๋‚˜ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค. git commit -v์„ ใ…Ž๊ฒŒ ๋˜๋ฉด ํŽธ์ง‘๊ธฐ์— diff ๋ฉ”์‹œ์ง€๊ฐ€ ์ถ”๊ฐ€๋œ๋‹ค.)
  • ์ด๋ ‡๊ฒŒ ์ปค๋ฐ‹์„ ํ•˜๊ฒŒ ๋˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ถœ๋ ฅ๋˜๋Š”๋ฐ ์•„๋ž˜ ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” object-oriented-chapter-7 ๋ธŒ๋žœ์น˜์— ์ปค๋ฐ‹ํ–ˆ๊ณ  ์ฒดํฌ์„ฌ์€ a742431๋ผ๊ณ  ์•Œ๋ ค์ค€๋‹ค.
โฏ git commit
[object-oriented-chapter-7 a742431] [Update] object oriented chapter 7 link
1 file changed, 7 insertions(+), 1 deletion(-)

๐Ÿฃ Staging Area ์ƒ๋žตํ•˜๊ธฐโ€‹

  • Staging Area๋ฅผ ์ƒ๋žตํ•˜๋ ค๋ฉด git commit ๋ช…๋ น์„ ์‹คํ–‰ํ•  ๋•Œ -a ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•˜๋ฉด Git์€ Tracked ์ƒํƒœ์˜ ํŒŒ์ผ์„ ์ž๋™์œผ๋กœ Staging Area์— ๋„ฃ๋Š”๋‹ค.
> git commit -a

๐Ÿฃ ํŒŒ์ผ ์‚ญ์ œํ•˜๊ธฐโ€‹

  • Git์—์„œ ํŒŒ์ผ์„ ์ œ๊ฑฐํ•˜๋ ค๋ฉด git rm ๋ช…๋ น์œผ๋กœ Tracked ์ƒํƒœ์˜ ํŒŒ์ผ์„ ์‚ญ์ œํ•œ ํ›„์— ์ปค๋ฐ‹ํ•ด์•ผ ํ•œ๋‹ค. ์ด ๋ช…๋ น์€ ์›Œํ‚น ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์žˆ๋Š” ํŒŒ์ผ๋„ ์‚ญ์ œํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‹ค์ œ๋กœ ํŒŒ์ผ๋„ ์ง€์›Œ์ง„๋‹ค.
  • ์ปค๋ฐ‹ํ•˜๋ฉด ํŒŒ์ผ์€ ์‚ญ์ œ๋˜๊ณ  Git์€ ์ด ํŒŒ์ผ์€ ๋”๋Š” ์ถ”์ ํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ์ด๋ฏธ ํŒŒ์ผ์„ ์ˆ˜์ •ํ–ˆ๊ฑฐ๋‚˜, ์ˆ˜์ •ํ•œ ํŒŒ์ผ์„ Index์— ์ถ”๊ฐ€ํ–ˆ๋‹ค๋ฉด -f ์˜ต์…˜์„ ์ฃผ์–ด ๊ฐ•์ œ๋กœ ์‚ญ์ œํ•ด์•ผ ํ•œ๋‹ค.
  • ๋˜ํ•œ, Staging Area์—์„œ๋งŒ ์ œ๊ฑฐํ•˜๊ณ  ์›Œํ‚น ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์žˆ๋Š” ํŒŒ์ผ์€ ์ง€์šฐ์ง€ ์•Š๊ณ  ๋‚จ๊ฒจ๋‘๋ ค๋ฉด --cached ์˜ต์…˜์„ ์‚ฌ์šฉํ•œ๋‹ค.
> git rm --cached README
  • ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์‚ญ์ œํ•  ์ˆ˜๋„ ์žˆ๋‹ค. (log/ ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์žˆ๋Š” .log ํŒŒ์ผ์„ ๋ชจ๋‘ ์‚ญ์ œํ•œ๋‹ค.)
> git rm log\/*.log 

๐Ÿฃ ํŒŒ์ผ ์ด๋ฆ„ ๋ณ€๊ฒฝํ•˜๊ธฐโ€‹

  • Git์€ ํŒŒ์ผ ์ด๋ฆ„์˜ ๋ณ€๊ฒฝ์ด๋‚˜ ํŒŒ์ผ์˜ ์ด๋™์„ ๋ช…์‹œ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜์ง€ ์•Š๋Š”๋‹ค. ์ฆ‰, ํŒŒ์ผ ์ด๋ฆ„์ด ๋ณ€๊ฒฝ๋๋‹ค๋Š” ๋ณ„๋„์˜ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ์•„๋ž˜์™€ ๊ฐ™์ด ํŒŒ์ผ ์ด๋ฆ„์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.
> git mv file_from file_to
  • ์œ„ mv ๋ช…๋ น์–ด๋Š” ์•„๋ž˜ ๋ช…๋ น์„ ์ˆ˜ํ–‰ํ•œ ๊ฒƒ๊ณผ ์™„์ „ํžˆ ๋™์ผํ•˜๋‹ค.
> mv file_from file_to
> git rm file_from
> git add file_to
  • git mv๋Š” ์ผ์ข…์˜ ๋‹จ์ถ• ๋ช…๋ น์–ด์ด๋‹ค. Git์˜ mv ๋ช…๋ น์€ ํŽธ๋ฆฌํ•˜๊ฒŒ ๋ช…๋ น์„ ์„ธ ๋ฒˆ ์‹คํ–‰ํ•ด์ฃผ๋Š” ๊ฒƒ๋ฟ์ด๋‹ค.

๐Ÿฆ„ ์ปค๋ฐ‹ ํžˆ์Šคํ† ๋ฆฌ ์กฐํšŒํ•˜๊ธฐโ€‹

  • Git์—๋Š” ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ์กฐํšŒํ•˜๋Š” ๋ช…๋ น์–ด์ธ git log๊ฐ€ ์žˆ๋‹ค.
> git log
  • ํŠน๋ณ„ํ•œ ์•„๊ทœ๋จผํŠธ ์—†์ด git log ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋ฉด ์ €์žฅ์†Œ์˜ ์ปค๋ฐ‹ ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ์‹œ๊ฐ„์ˆœ์œผ๋กœ ๋ณด์—ฌ์ค€๋‹ค. ์ฆ‰, ๊ฐ€์žฅ ์ตœ๊ทผ์˜ ์ปค๋ฐ‹์ด ๊ฐ€์žฅ ๋จผ์ € ๋‚˜์˜จ๋‹ค.
  • ๊ทธ๋ฆฌ๊ณ  SHA-1 ์ฒดํฌ์„ฌ, ์ €์ž ์ด๋ฆ„, ์ €์ž ์ด๋ฉ”์ผ, ์ปค๋ฐ‹ํ•œ ๋‚ ์งœ, ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด์—ฌ์ค€๋‹ค.
commit 5de160e0d1edd5eafe5c6061b07fce8532a5416b (HEAD -> pro-git-chapter-2, origin/pro-git-chapter-2)
Author: saseungmin <dbd02169@naver.com>
Date: Tue Jan 19 23:00:00 2021 +0900

[Update] pro git Chapter 2.2

commit 2ef879e3d68d233db116e1e9d4ffce92b35d7de4
Merge: d1644d2 de4b5af
Author: saseungmin <dbd02169@naver.com>
Date: Tue Jan 19 22:04:21 2021 +0900

Merge branch 'master' of https://github.com/saseungmin/summary_of_technical_books into pro-git-chapter-2
  • git log์˜ -p ์˜ต์…˜์€ ๊ฐ ์ปค๋ฐ‹์˜ diff ๊ฒฐ๊ณผ๋ฅผ ๋ณด์—ฌ์ค€๋‹ค.
  • -2 ์˜ต์…˜์€ ์ตœ๊ทผ ๋‘ ๊ฐœ์˜ ๊ฒฐ๊ณผ๋งŒ ๋ณด์—ฌ์ฃผ๋Š” ์˜ต์…˜์ด๋‹ค.
> git log -p -2
  • --stat ์˜ต์…˜์€ ํžˆ์Šคํ† ๋ฆฌ์˜ ํ†ต๊ณ„๋ฅผ ๋ณด์—ฌ์ค€๋‹ค. ๊ฐ ์ปค๋ฐ‹์˜ ํ†ต๊ณ„ ์ •๋ณด๋ฅผ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ด ๊ฒฐ๊ณผ์—์„œ ์–ด๋–ค ํŒŒ์ผ์ด ์ˆ˜์ •๋๋Š”์ง€, ์–ผ๋งˆ๋‚˜ ๋งŽ์€ ํŒŒ์ผ์ด ๋ณ€๊ฒฝ๋๋Š”์ง€, ๋˜ ์–ผ๋งˆ๋‚˜ ๋งŽ์€ ๋ผ์ธ์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ–ˆ๋Š”์ง€ ๋ณด์—ฌ์ค€๋‹ค.
> git log --stat
  • --pretty ์˜ต์…˜์€ ํžˆ์Šคํ† ๋ฆฌ ๋‚ด์šฉ์„ ๋ณด์—ฌ์ค„ ๋•Œ ๊ธฐ๋ณธ ํ˜•์‹ ์ด์™ธ์— ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์ค‘ ํ•˜๋‚˜๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋‹ค.
// ๊ฐ ์ปค๋ฐ‹์„ ํ•œ ๋ผ์ธ์œผ๋กœ ๋ณด์—ฌ์ค€๋‹ค.
> git log --pretty=oneline

// short, full, fuller ์˜ต์…˜์€ ์ •๋ณด๋ฅผ ์กฐ๊ธˆ์”ฉ ๊ฐ€๊ฐํ•ด์„œ ๋ณด์—ฌ์ค€๋‹ค.
> git log --pretty=short

// format ์˜ต์…˜์€ ๋‚˜๋งŒ์˜ ํฌ๋งท์œผ๋กœ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. (๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ํŒŒ์‹ฑํ•˜๊ณ ์ž ํ•  ๋•Œ ์œ ์šฉํ•˜๋‹ค)
> git log --pretty=format:"%h - %an, %ar : %s"
5de160e - saseungmin, 25์‹œ๊ฐ„ ์ „ : [Update] pro git Chapter 2.2
2ef879e - saseungmin, 25์‹œ๊ฐ„ ์ „ : Merge branch 'master' of https://github.com/saseungmin/summary_of_technical_books into pro-git-chapter-2
de4b5af - SeungMin, 26์‹œ๊ฐ„ ์ „ : Merge pull request #24 from saseungmin/object-oriented-chapter-7
  • oneline๊ณผ format ์˜ต์…˜์€ --graph ์˜ต์…˜๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋ฉด ๋ธŒ๋žœ์น˜์™€ ๋จธ์ง€ ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ์•„์Šคํ‚ค ๊ทธ๋ž˜ํ”„๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

chapter2-1

๐Ÿฃ ์กฐํšŒ ์ œํ•œ์กฐ๊ฑดโ€‹

  • git log ๋ช…๋ น์—” ์กฐํšŒ ๋ฒ”์œ„๋ฅผ ์ œํ•œํ•˜๋Š” ์˜ต์…˜๋“ค์ด ์žˆ๋‹ค.
  • -<n>์ด๊ณ  n์€ ์ตœ๊ทผ n๊ฐœ์˜ ์ปค๋ฐ‹์„ ์˜๋ฏธํ•œ๋‹ค.
  • --since๋‚˜ --until ๊ฐ™์€ ์‹œ๊ฐ„์„ ๊ธฐ์ค€์œผ๋กœ ์กฐํšŒํ•˜๋Š” ์˜ต์…˜๋„ ์žˆ๋‹ค.
// ์ง€๋‚œ 2์ฃผ ๋™์•ˆ ๋งŒ๋“ค์–ด์ง„ ์ปค๋ฐ‹๋“ค๋งŒ ์กฐํšŒ
> git log --since=2.weeks
  • --author ์˜ต์…˜์œผ๋กœ ์ €์ž๋ฅผ ์ง€์ •ํ•˜์—ฌ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ๊ณ  --grep ์˜ต์…˜์œผ๋กœ ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€์—์„œ ํ‚ค์›Œ๋“œ๋ฅผ ๊ฒ€์ƒ‰ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
  • ๋‘ ์˜ต์…˜์„ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋‘ ๋งŒ์กฑํ•˜๋Š” ์ปค๋ฐ‹์„ ์ฐพ์œผ๋ ค๋ฉด --all-match ์˜ต์…˜๋„ ํ•จ๊ป˜ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.
> git log --author="saseungmin" --grep="pro" --all-match
  • -S๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ฝ”๋“œ์—์„œ ์ถ”๊ฐ€๋˜๊ฑฐ๋‚˜ ์ œ๊ฑฐ๋œ ๋‚ด์šฉ ์ค‘์— ํŠน์ • ํ…์ŠคํŠธ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€๋ฅผ ๊ฒ€์ƒ‰ํ•œ๋‹ค.
> git log -S function_name

๐Ÿฆ„ ๋˜๋Œ๋ฆฌ๊ธฐโ€‹

  • ํ•œ ๋ฒˆ ๋˜๋Œ๋ฆฌ๋ฉด ๋ณต๊ตฌํ•  ์ˆ˜ ์—†๊ธฐ์— ์ฃผ์˜ํ•ด์•ผ ํ•œ๋‹ค.
  • ์˜ˆ๋ฅผ ๋“ค์–ด ๋ฉ”์‹œ์ง€๋ฅผ ์ž˜๋ชป ์ ์—ˆ์„ ๋•Œ ์ปค๋ฐ‹์„ ์ˆ˜์ •ํ•ด์•ผ ํ•  ๋•Œ๊ฐ€ ์žˆ๋Š”๋ฐ ์ด๋•Œ --amend ์˜ต์…˜์„ ์‚ฌ์šฉํ•œ๋‹ค.
> git commit --amend
  • ์ด ๋ช…๋ น์€ Staging Area๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ปค๋ฐ‹ํ•œ๋‹ค. ๋งŒ์•ฝ ๋งˆ์ง€๋ง‰์œผ๋กœ ์ปค๋ฐ‹ํ•˜๊ณ  ๋‚˜์„œ ์ˆ˜์ •ํ•œ ๊ฒƒ์ด ์—†๋‹ค๋ฉด ์กฐ๊ธˆ ์ „์— ํ•œ ์ปค๋ฐ‹๊ณผ ๋ชจ๋“  ๊ฒƒ์ด ๊ฐ™๊ณ , ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€๋งŒ ์ˆ˜์ •ํ•œ๋‹ค.
  • ์ปค๋ฐ‹์„ ํ–ˆ๋Š”๋ฐ Stageํ•˜๋Š” ๊ฒƒ์„ ๊นœ๋นกํ•˜๊ณ  ๋น ํŠธ๋ฆฐ ํŒŒ์ผ์ด ์žˆ์œผ๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ๊ณ ์น  ์ˆ˜ ์žˆ๋‹ค.
> git commit -m 'initial commit'
> git add forgotten_file
> git commit --amend
  • ์—ฌ๊ธฐ์„œ ์‹คํ–‰ํ•œ ๋ช…๋ น์–ด 3๊ฐœ๋Š” ๋ชจ๋‘ ํ•˜๋‚˜์˜ ์ปค๋ฐ‹์œผ๋กœ ๊ธฐ๋ก๋œ๋‹ค. ๋‘ ๋ฒˆ์งธ ์ปค๋ฐ‹์€ ์ฒซ ๋ฒˆ์งธ ์ปค๋ฐ‹์„ ๋ฎ์–ด์“ด๋‹ค.

๐Ÿฃ ํŒŒ์ผ ์ƒํƒœ๋ฅผ Unstaged๋กœ ๋ณ€๊ฒฝํ•˜๊ธฐโ€‹

  • git reset HEAD <file>... ๋ฉ”์‹œ์ง€๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด Unstaged ์ƒํƒœ๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.
  • git reset ๋ช…๋ น์„ --hard ์˜ต์…˜๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋ฉด ์›Œํ‚น ๋””๋ ‰ํ„ฐ๋ฆฌ ํŒŒ์ผ๊นŒ์ง€ ์ˆ˜์ •๋˜๊ธฐ ๋•Œ๋ฌธ์— ์กฐ์‹ฌํ•ด์•ผ ํ•œ๋‹ค. hard ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด Staging Area์˜ ํŒŒ์ผ๋งŒ ์กฐ์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์œ„ํ—˜ํ•˜์ง€ ์•Š๋‹ค.

๐Ÿฃ Modified ํŒŒ์ผ ๋˜๋Œ๋ฆฌ๊ธฐโ€‹

  • ํŒŒ์ผ์„ ์ˆ˜์ •ํ•˜๊ณ  ๋‚˜์„œ ๋‹ค์‹œ ๋˜๋Œ๋ฆฌ๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ฆ‰, ์ตœ๊ทผ ์ปค๋ฐ‹๋œ ๋ฒ„์ „์œผ๋กœ ๋˜๋Œ๋ฆฌ๋Š” ๋ฐฉ๋ฒ•์€ git status์˜ ๋ฉ”์‹œ์ง€๊ฐ€ ์นœ์ ˆํ•˜๊ฒŒ ์•Œ๋ ค์ค€๋‹ค.
> git checkout -- README.md
  • ์ด ๋ช…๋ น์€ ๊ฝค ์œ„ํ—˜ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ์›๋ž˜ ํŒŒ์ผ๋กœ ๋ฎ์–ด์ผ๊ธฐ ๋•Œ๋ฌธ์— ์ˆ˜์ •ํ•œ ๋‚ด์šฉ์€ ์ „๋ถ€ ์‚ฌ๋ผ์ง„๋‹ค.
  • ๋งŒ์•ฝ ๋ณ€๊ฒฝํ•œ ๋‚ด์šฉ์„ ์‰ฝ๊ฒŒ ๋ฒ„๋ฆด ์ˆ˜๋Š” ์—†๊ณ  ๋‹น์žฅ์€ ๋˜๋Œ๋ ค์•ผ๋งŒ ํ•˜๋Š” ์ƒํ™ฉ์ด๋ผ๋ฉด Stash์™€ Branch๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

๐Ÿฆ„ ๋ฆฌ๋ชจํŠธ ์ €์žฅ์†Œโ€‹

  • ๋ฆฌ๋ชจํŠธ ์ €์žฅ์†Œ๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค๋Š” ๊ฒƒ์€ ์ €์žฅ์†Œ๋ฅผ ์ถ”๊ฐ€, ์‚ญ์ œํ•˜๋Š” ๊ฒƒ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋ธŒ๋žœ์น˜๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ์ถ”์ ํ• ์ง€ ๋ง์ง€ ๋“ฑ์„ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค.

๐Ÿฃ ๋ฆฌ๋ชจํŠธ ์ €์žฅ์†Œ ํ™•์ธํ•˜๊ธฐโ€‹

  • git remote ๋ช…๋ น์œผ๋กœ ํ˜„์žฌ ํ”„๋กœ์ ํŠธ์— ๋“ฑ๋ก๋œ ๋ฆฌ๋ชจํŠธ ์ €์žฅ์†Œ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ €์žฅ์†Œ๋ฅผ cloneํ•˜๋ฉด origin์ด๋ผ๋Š” ๋ฆฌ๋ชจํŠธ ์ €์žฅ์†Œ๊ฐ€ ์ž๋™์œผ๋กœ ๋“ฑ๋ก๋˜๊ธฐ ๋•Œ๋ฌธ์— origin์ด๋ผ๋Š” ์ด๋ฆ„์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
> git remote
origin
  • -v ์˜ต์…˜์„ ์ฃผ๋ฉด ๋‹จ์ถ• ์ด๋ฆ„๊ณผ URL์„ ํ•จ๊ป˜ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
  • ๋ฆฌ๋ชจํŠธ ์ €์žฅ์†Œ๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ ์žˆ๋‹ค๋ฉด ์ด ๋ช…๋ น์€ ๋“ฑ๋ก๋œ ์ €๋ถ€๋ฅผ ๋ณด์—ฌ์ค€๋‹ค.
โฏ git remote -v
origin https://github.com/saseungmin/summary_of_technical_books.git (fetch)
origin https://github.com/saseungmin/summary_of_technical_books.git (push)

๐Ÿฃ ๋ฆฌ๋ชจํŠธ ์ €์žฅ์†Œ ์ถ”๊ฐ€ํ•˜๊ธฐโ€‹

  • ์ƒˆ ๋ฆฌ๋ชจํŠธ ์ €์žฅ์†Œ๋Š” git remote add [๋‹จ์ถ• ์ด๋ฆ„] [URL] ๋ช…๋ น์œผ๋กœ ์‹คํ–‰ํ•œ๋‹ค.
> git remote add seung https://github.com/saseungmin/summary_of_technical_books.git
  • ๋‹จ์ถ• ์ด๋ฆ„์„ ๋“ฑ๋กํ•˜๋ฉด URL ๋Œ€์‹ ์— seung๋ผ๋Š” ์ด๋ฆ„์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿฃ ๋ฆฌ๋ชจํŠธ ์ €์žฅ์†Œ๋ฅผ Pullํ•˜๊ฑฐ๋‚˜ Fetchํ•˜๊ธฐโ€‹

  • ๋ฆฌ๋ชจํŠธ ์ €์žฅ์†Œ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋ ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ์‹คํ–‰ํ•œ๋‹ค.
> git fetch [remote-name]
  • ์ด ๋ช…๋ น์€ ๋กœ์ปฌ์—๋Š” ์—†์ง€๋งŒ, ๋ฆฌ๋ชจํŠธ ์ €์žฅ์†Œ์—๋Š” ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋‘ ๊ฐ€์ ธ์˜จ๋‹ค.
  • git fetch ๋ช…๋ น์€ ๋ฆฌ๋ชจํŠธ ์ €์žฅ์†Œ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋‘ ๋กœ์ปฌ๋กœ ๊ฐ€์ ธ์˜ค์ง€๋งŒ, ์ž๋™์œผ๋กœ Mergeํ•˜์ง€๋Š” ์•Š๋Š”๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์ˆ˜๋™์œผ๋กœ Merge๋ฅผ ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.
  • git pull ๋ช…๋ น์€ ๋ฆฌ๋ชจํŠธ ์ €์žฅ์†Œ์˜ ๋ธŒ๋žœ์น˜์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ฌ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ž๋™์œผ๋กœ ๋กœ์ปฌ ๋ธŒ๋žœ์น˜์™€ Merge ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

๐Ÿฃ ๋ฆฌ๋ชจํŠธ ์ €์žฅ์†Œ์— Push ํ•˜๊ธฐโ€‹

  • ํ”„๋กœ์ ํŠธ๋ฅผ ๊ณต์œ ํ•˜๊ณ  ์‹ถ์„ ๋•Œ Upstream ์ €์žฅ์†Œ์— Pushํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ด ๋ช…๋ น์€ git push [๋ฆฌ๋ชจํŠธ ์ €์žฅ์†Œ ์ด๋ฆ„] [๋ธŒ๋žœ์น˜ ์ด๋ฆ„] ์œผ๋กœ ์ˆ˜ํ–‰ํ•œ๋‹ค.
> git push origin main
  • ์ด ๋ช…๋ น์€ Cloneํ•œ ๋ฆฌ๋ชจํŠธ ์ €์žฅ์†Œ์— ์“ฐ๊ธฐ ๊ถŒํ•œ์ด ์žˆ๊ณ , Cloneํ•˜๊ณ  ๋‚œ ์ดํ›„ ์•„๋ฌด๋„ Upstream ์ €์žฅ์†Œ์— Pushํ•˜์ง€ ์•Š์•˜์„ ๋•Œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๋‹ค์‹œ ๋งํ•ด ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด Pushํ•œ ํ›„์— Pushํ•˜๋ ค๊ณ  ํ•˜๋ฉด Pushํ•  ์ˆ˜ ์—†๋‹ค. (Merge ํ›„ ๊ฐ€๋Šฅ)

๐Ÿฃ ๋ฆฌ๋ชจํŠธ ์ €์žฅ์†Œ ์‚ดํŽด๋ณด๊ธฐโ€‹

  • git remote [๋ฆฌ๋ชจํŠธ ์ €์žฅ์†Œ ์ด๋ฆ„] ๋ช…๋ น์œผ๋กœ ๋ฆฌ๋ชจํŠธ ์ €์žฅ์†Œ์˜ ๊ตฌ์ฒด์ ์ธ ์ •๋ณด๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

chapter2-2

  • ๋ฆฌ๋ชจํŠธ ์ €์žฅ์†Œ์˜ URL๊ณผ ์ถ”์ ํ•˜๋Š” ๋ธŒ๋žœ์น˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ๋˜ํ•œ ๊ฐ€์ ธ์˜จ ๋ชจ๋“  ๋ฆฌ๋ชจํŠธ ์ €์žฅ์†Œ ์ •๋ณด๋„ ์ถœ๋ ฅํ•œ๋‹ค.
  • ๋ธŒ๋žœ์น˜๋ช…์„ ์ƒ๋žตํ•˜๊ณ  git push ๋ช…๋ น์„ ์‹คํ–‰ํ•  ๋•Œ ์–ด๋–ค ๋ธŒ๋žœ์น˜๊ฐ€ ์–ด๋–ค ๋ธŒ๋žœ์น˜๋กœ Push๋˜๋Š”์ง€ ๋ณด์—ฌ์ค€๋‹ค.

๐Ÿฃ ๋ฆฌ๋ชจํŠธ ์ €์žฅ์†Œ ์ด๋ฆ„์„ ๋ฐ”๊พธ๊ฑฐ๋‚˜ ๋ฆฌ๋ชจํŠธ ์ €์žฅ์†Œ๋ฅผ ์‚ญ์ œํ•˜๊ธฐโ€‹

  • git remote rename ๋ช…๋ น์œผ๋กœ ๋ฆฌ๋ชจํŠธ ์ €์žฅ์†Œ์˜ ์ด๋ฆ„์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.
> git remote rename seung sing
> git remote
origin
sing
  • ๋ฆฌ๋ชจํŠธ ์ €์žฅ์†Œ์˜ ๋ธŒ๋žœ์น˜ ์ด๋ฆ„๋„ ๋ฐ”๋€๋‹ค. (seung/main => sing/main)
  • ๋ผ๋ชจํŠธ ์ €์žฅ์†Œ๋ฅผ ์‚ญ์ œํ•ด์•ผ ํ•œ๋‹ค๋ฉด git remote rm ๋ช…๋ น์„ ์‚ฌ์šฉํ•œ๋‹ค. ์„œ๋ฒ„ ์ •๋ณด๊ฐ€ ๋ฐ”๋€Œ์—ˆ์„ ๋•Œ, ๋”๋Š” ๋ณ„๋„์˜ ๋ฏธ๋Ÿฌ๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์„ ๋•Œ, ๋”๋Š” ๊ธฐ์—ฌ์ž ํ™œ๋™ํ•˜์ง€ ์•Š์„ ๋•Œ ํ•„์š”ํ•˜๋‹ค.
> git remote rm sing
> git remote
origin

๐Ÿฆ„ ํƒœ๊ทธโ€‹

  • ๋ณดํ†ต ํƒœ๊ทธ๋Š” ๋ฆด๋ฆฌ์Šคํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

๐Ÿฃ ํƒœ๊ทธ ์กฐํšŒํ•˜๊ธฐโ€‹

  • ๋‹ค์Œ ๋ช…๋ น์œผ๋กœ ๋งŒ๋“ค์–ด์ง„ ํƒœ๊ทธ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
> git tag
  • ์ด ๋ช…๋ น์€ ์•ŒํŒŒ๋ฒณ ์ˆœ์„œ๋กœ ํƒœ๊ทธ๋ฅผ ๋ณด์—ฌ์ค€๋‹ค. ๊ฒ€์ƒ‰ ํŒจํ„ด์„ ์‚ฌ์šฉํ•ด์„œ ํƒœ๊ทธ๋ฅผ ๊ฒ€์ƒ‰ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
> git tag -l 'v1.8.5*'

๐Ÿฃ ํƒœ๊ทธ ๋ถ™์ด๊ธฐโ€‹

  • Git ํƒœ๊ทธ๋Š” Lightweight ํƒœ๊ทธ์™€ Annotated ํƒœ๊ทธ๋กœ ๋‘ ์ข…๋ฅ˜๊ฐ€ ์žˆ๋‹ค.
  • Lightweight ํƒœ๊ทธ๋Š” ๋ธŒ๋žœ์น˜์™€ ๋น„์Šทํ•œ๋ฐ ๋ธŒ๋žœ์น˜์ฒ˜๋Ÿผ ๊ฐ€๋ฆฌํ‚ค๋Š” ์ง€์ ์„ ์ตœ์‹  ์ปค๋ฐ‹์œผ๋กœ ์ด๋™์‹œํ‚ค์ง€ ์•Š๋Š”๋‹ค. ๋‹จ์ˆœํžˆ ํŠน์ • ์ปค๋ฐ‹์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ์ผ ๋ฟ์ด๋‹ค.
  • Annotated ํƒœ๊ทธ๋Š” Git ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ํƒœ๊ทธ๋ฅผ ๋งŒ๋“  ์‚ฌ๋žŒ์ด ์ด๋ฆ„, ์ด๋ฉ”์ผ๊ณผ ํƒœ๊ทธ๋ฅผ ๋งŒ๋“  ๋‚ ์งœ, ๊ทธ๋ฆฌ๊ณ  ํƒœ๊ทธ ๋ฉ”์‹œ์ง€๋„ ์ €์žฅํ•œ๋‹ค. GPG๋กœ ์„œ๋ช…๋„ ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ชจ๋“  ์ •๋ณด๋ฅผ ์ €์žฅํ•  ๋•Œ๋งŒ ์ด ํƒœ๊ทธ๋ฅผ ์ถ”์ฒœํ•œ๋‹ค.

๐Ÿฃ Annotated ํƒœ๊ทธโ€‹

  • tag ๋ช…๋ น์„ ์‹คํ–‰ํ•  ๋•Œ -a ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•œ๋‹ค.
  • -m์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ”์‹œ์ง€๋ฅผ ํ•จ๊ป˜ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.
> git tag -a v1.4 -m 'my version 1.4'
  • git show ๋ช…๋ น์œผ๋กœ ํƒœ๊ทธ ์ •๋ณด์™€ ์ปค๋ฐ‹ ์ •๋ณด๋ฅผ ๋ชจ๋‘ ํ™•์ธ ๊ฐ€๋Šฅํ•˜๋‹ค.
> git show v1.4

๐Ÿฃ Lightweight ํƒœ๊ทธโ€‹

  • ํŒŒ์ผ์— ์ปค๋ฐ‹ ์ฒดํฌ์„ฌ์„ ์ €์žฅํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๋‹ค๋ฅธ ์ •๋ณด๋Š” ์ €์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • Lightwieght ํƒœ๊ทธ๋ฅผ ๋งŒ๋“ค ๋•Œ๋Š” -a, -s, -m ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ์ด ๋ช…๋ น์€ ๋‹จ์ˆœํžˆ ์ปค๋ฐ‹ ์ •๋ณด๋งŒ์„ ๋ณด์—ฌ์ค€๋‹ค.

๐Ÿฃ ๋‚˜์ค‘์— ํƒœ๊ทธํ•˜๊ธฐโ€‹

  • ์˜ˆ์ „ ์ปค๋ฐ‹์— ๋Œ€ํ•ด์„œ๋„ ํƒœ๊ทธํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ํŠน์ • ์ปค๋ฐ‹์— ํƒœ๊ทธํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋ช…๋ น์˜ ๋์— ์ปค๋ฐ‹ ์ฒดํฌ์„ฌ์„ ๋ช…์‹œํ•œ๋‹ค.
> git tag -a v1.2 9fceb02

๐Ÿฃ ํƒœ๊ทธ ๊ณต์œ ํ•˜๊ธฐโ€‹

  • git push ๋ช…๋ น์€ ์ž๋™์œผ๋กœ ๋ฆฌ๋ชจํŠธ ์„œ๋ฒ„์— ํƒœ๊ทธ๋ฅผ ์ „์†กํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ํƒœ๊ทธ๋ฅผ ๋งŒ๋“ค์—ˆ์œผ๋ฉด ์„œ๋ฒ„์— ๋ณ„๋„๋กœ Pushํ•ด์•ผ ํ•œ๋‹ค.
  • ๋ธŒ๋žœ์น˜๋ฅผ ๊ณต์œ ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • git push origin [ํƒœ๊ทธ ์ด๋ฆ„]์„ ์‹คํ–‰ํ•œ๋‹ค.
> git push origin v1.5
  • ๋งŒ์•ฝ ํ•œ ๋ฒˆ์— ์—ฌ๋Ÿฌ ๊ฐœ Pushํ•˜๊ณ  ์‹ถ์œผ๋ฉด --tags ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•˜์—ฌ git push ๋ช…๋ น์„ ์‹คํ–‰ํ•œ๋‹ค.
  • ์ด ๋ช…๋ น์œผ๋กœ ๋ฆฌ๋ชจํŠธ ์„œ๋ฒ„์— ์—†๋Š” ํƒœ๊ทธ๋ฅผ ๋ชจ๋‘ ์ „์†กํ•  ์ˆ˜ ์žˆ๋‹ค.
> git push origin --tags

๐Ÿฃ ํƒœ๊ทธ๋ฅผ Checkout ํ•˜๊ธฐโ€‹

  • ํƒœ๊ทธ๋ฅผ ๋ธŒ๋žœ์น˜์™€ ๋‹ฌ๋ฆฌ ๊ฐ€๋ฆฌํ‚ค๋Š” ์ปค๋ฐ‹์„ ๋ฐ”๊ฟ€ ์ˆ˜ ์—†๋Š” ์ด๋ฆ„์ด๊ธฐ ๋•Œ๋ฌธ์— Checkoutํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.
  • ํƒœ๊ทธ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ํŠน์ • ์ปค๋ฐ‹ ๊ธฐ๋ฐ˜์˜ ๋ธŒ๋žœ์น˜๋ฅผ ๋งŒ๋“ค์–ด ์ž‘์—…ํ•˜๋ ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ์ƒˆ๋กœ ๋ธŒ๋žœ์น˜๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
> git checkout -b version2 v2.0.0
  • ์ด๋ ‡๊ฒŒ ๋ธŒ๋žœ์น˜๋ฅผ ๋งŒ๋“  ํ›„์— version2 ๋ธŒ๋žœ์น˜์— ์ปค๋ฐ‹ํ•˜๋ฉด ๋ธŒ๋žœ์น˜๋Š” ์—…๋ฐ์ดํŠธ๋œ๋‹ค. ํ•˜์ง€๋งŒ, v2.0.0 ํƒœ๊ทธ๋Š” ๊ฐ€๋ฆฌํ‚ค๋Š” ์ปค๋ฐ‹์ด ๋ณ€ํ•˜์ง€ ์•Š์•˜์œผ๋ฏ€๋กœ ๋‘ ๋‚ด์šฉ์ด ๊ฐ€๋ฆฌํ‚ค๋Š” ์ปค๋ฐ‹์ด ๋‹ค๋ฅด๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

๐Ÿฆ„ Git Aliasโ€‹

  • ๋ช…๋ น์„ ์™„๋ฒฝํ•˜๊ฒŒ ์ž…๋ ฅํ•˜์ง€ ์•Š์œผ๋ฉด Git์€ ์•Œ์•„๋“ฃ์ง€ ๋ชปํ•œ๋‹ค. Git์˜ ๋ช…๋ น์„ ์ „๋ถ€ ์ž…๋ ฅํ•˜๋Š” ๊ฒƒ์ด ๊ท€์ฐฎ๋‹ค๋ฉด git config๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ ๋ช…๋ น์˜ Alias์„ ์‰ฝ๊ฒŒ ๋งŒ๋“ค์–ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
> git config --global alias.co checkout
> git config --global alias.br branch
> git config --global alias.ci commit
> git config --global alias.st status
  • ์ด๋ ‡๊ฒŒ ์„ค์ •ํ•˜๋ฉด ci ๋งŒ ์ž…๋ ฅํ•ด๋„ ์ปค๋ฐ‹์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํŒŒ์ผ์„ Unstaged ์ƒํƒœ๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ๋ช…๋ น์„ ๋งŒ๋“ค์–ด์„œ ๋ถˆํŽธํ•จ์„ ๋œ ์ˆ˜ ์žˆ๋‹ค.
> git config --global alias.unstage 'reset HEAD --'
  • ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋‹ค์Œ ๋‘ ๋ช…๋ น์€ ๋™์ผํ•œ ๋ช…๋ น์ด๋‹ค.
> git unstage fileA
> git reset HEAD -- fileA
  • !๋ฅผ ์ œ์ผ ์•ž์— ์ถ”๊ฐ€ํ•˜๋ฉด ์™ธ๋ถ€ ๋ช…๋ น์„ ์‹คํ–‰ํ•œ๋‹ค.
> git config --global alias.visual '!gitk'