๐Ÿ•ต๐Ÿปโ€โ™‚๏ธ git

์„œ์žฌํ™˜ยท2021๋…„ 9์›” 18์ผ
0

git

๋ชฉ๋ก ๋ณด๊ธฐ
1/1

โœ๏ธ git์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž


๐Ÿค” git์„ ์“ฐ๋Š” ์ด์œ 

 ๊นƒ์„ ์“ฐ๋Š” ์ด์œ ๋Š” ์—ฌ๋Ÿฌ๊ฐ€์ง€๊ฐ€ ์žˆ๊ฒ ์ง€๋งŒ ยน๊ฐœ์ธ์ด ๊นƒ์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ์— ๋Œ€ํ•ด ๋จผ์ € ๋‹ค๋ฃจ์–ด๋ณด๊ณ ์žํ•œ๋‹ค. 
๊นƒ์„ ์“ธ ๊ฒฝ์šฐ ํŒŒ์ผ์˜ ๊ด€๋ฆฌ๊ฐ€ ์šฉ์ดํ•ด์ง„๋‹ค. ํŒŒ์ผ ๊ด€๋ฆฌ์— ์žˆ์–ด ๋ณดํ†ต์˜ ์‚ฌ๋žŒ์ด ๊ฒช๋Š” ์˜ˆ์‹œ๋กœ ๊ณผ์ œ์ œ์ถœ์„ 
์œ„ํ•œ ์ตœ์ข…๋ณธ์˜ ๊ฑฐ๋“ญ๋œ ์ˆ˜์ •์œผ๋กœ '์ตœ์ข…๋ณธ_1' '์ตœ์ข…๋ณธ_2' '์ตœ์ข…๋ณธ_3'์œผ๋กœ ์ €์žฅํ•˜๋Š” ์ผ์ด ์žˆ์—ˆ์„ ๊ฒƒ์ด๋‹ค. 
  
 ๋‹ค๋ฅธ์ด๋ฆ„์œผ๋กœ ์ €์žฅ์„ ํ•˜๋Š” ์ด์œ ๋Š” ํ˜น์‹œ ๋ชจ๋ฅผ ๋ฐฑ์—…ํŒŒ์ผ์„ ๋‘๊ธฐ ์œ„ํ•จ๊ณผ ๋™์‹œ์— ๊ฐ™์€ ์ž‘์—…๋‚ด์—ญ์—์„œ ์ˆ˜์ • 
ํ›„ ๊ฐ™์€ ์ด๋ฆ„์˜ ํŒŒ์ผ์„ ์ƒ์„ฑํ–ˆ์„ ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ๋ฎ์–ด์“ฐ๊ธฐ๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•จ์ด๋‹ค. 
  
  ์ผ๊ด€๋œ ์ด๋ฆ„์œผ๋กœ ์ž‘์„ฑ ํ•  ๊ฒฝ์šฐ๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด ํŒŒ์ผ ์ด๋ฆ„์€ ๋ถˆ๊ทœ์น™์ ์œผ๋กœ ํ•˜๋‚˜ ๋‘˜ ์”ฉ ๋Š˜์–ด๋‚˜๊ฒŒ ๋  ๊ฒƒ์ด๋‹ค.
๊ฐœ๋ฐœ์ž๊ฐ€ ์ž‘์„ฑํ•œ ํŒŒ์ผ์˜ ๊ฒฝ์šฐ ์ž‘์€ ์ˆ˜์ •์—๋„ ํŒŒ์ผ์— ํฐ ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐœ์ธ์ฐจ์›์—์„œ 
ํŒŒ์ผ๊ด€๋ฆฌ๋Š” ์ค‘์š”ํ•œ ์ด์Šˆ๊ฐ€ ์•„๋‹ ์ˆ˜ ์—†๋‹ค. ์œ„์™€ ๊ฐ™์€ ๋ถˆํŽธํ•จ, ์ˆ˜์ •๋œ ๋‚ด์šฉ์— ๋Œ€ํ•œ ๊ด€๋ฆฌ๋ฅผ ์šฉ์ดํ•˜๊ฒŒ ํ•˜๊ธฐ
์œ„ํ•ด git์„ ์‚ฌ์šฉํ•œ๋‹ค.

๐Ÿ’โ€โ™‚๏ธ git ๋ช…๋ น์–ด

 --- ๊นƒ ํ”„๋กœ๊ทธ๋žจ์„ ๋‹ค์šด ๋ฐ›๊ณ  git-bash ๋˜๋Š” ๋ฆฌ๋ˆ…์Šค ํ™˜๊ฒฝ์—์„œ ์ง„ํ–‰ํ•œ๋‹ค๋Š” ๊ฐ€์ •ํ•˜์—์„œ ---

1. git init

 ๊นƒ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„  ์ž‘์—… ํ•  ํด๋”(Working Directory)๋ฅผ ๋งŒ๋“ค์–ด ์ฃผ๊ณ  CLI ํ™˜๊ฒฝ์—์„œ ํ•ด๋‹น ์ž‘์—… 
 ํด๋”๋กœ ๋“ค์–ด๊ฐ€ git init ๋ช…๋ น์–ด๋ฅผ ์นœ๋‹ค. ๊ทธ๋žฌ์„ ๋•Œ ํ•ด๋‹น ์ž‘์—… ํด๋” ๋‚ด์—๋Š” .git ์ด๋ผ๋Š” ํด๋”๊ฐ€ 
 ๋งŒ๋“ค์ง„๋‹ค. 
 
 (์š”์•ฝ1) git์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„  ๊ด€๋ฆฌํ•˜๊ณ ์ž ํ•˜๋Š” ํด๋” ์ตœ์ƒ์œ„ ๊ฒฝ๋กœ์—์„œ 'git init' ๋ช…๋ น์–ด๋ฅผ ์นœ๋‹ค.
 
 (Tip) git init dir_name ์„ ํ•˜๋ฉด ํด๋” ์ƒ์„ฑ๊ณผ ๋™์‹œ์— init ์ž‘์—…์ด ์ด๋ฃจ์–ด์ง„๋‹ค.
  • git ์˜ ์ธ์‹
 ๊นƒ์ด ํŒŒ์ผ์„ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์€ ์ด์ „ ์ž‘์—…๊ณผ์˜ ๋ณ€ํ™”๋ฅผ ์ธ์‹ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค.
 
 ์˜ˆ๋ฅผ ๋“ค์–ด ์ž‘์—… ๋””๋ ‰ํ† ๋ฆฌ์— ํด๋”1, ํด๋”2, ํด๋”3์„ ์ƒ์„ฑํ–ˆ๋‹ค๊ฐ€ ๋‹ค์‹œ ํด๋”3์„ ์ง€์› ๋‹ค๊ณ  ํ•˜์ž. 
 ๊ทธ๋Ÿฌ๋ฉด git์€ ํด๋”1๊ณผ ํด๋”2๊ฐ€ ์ƒ๊ฒผ๋‹ค๋Š” ์ „๊ณผ์˜ ์ฐจ์ด๋ฅผ ์ธ์‹ํ•˜๋Š”๋ฐ ์ด๋ฅผ .git/indexํŒŒ์ผ์„ ๊ธฐ๋ฐ˜์œผ๋กœ
 ๊ทธ ์ฐจ์ด๋ฅผ ์ธ์‹ํ•œ๋‹ค๊ณ  ํ•˜๋Š”๋ฐ ์›๋ฆฌ๋Š” ๋‚˜์ค‘์— ๋‹ค๋ฃจ์–ด๋ณด๋„๋ก ํ•˜์ž.

2. git add ํŒŒ์ผ์ด๋ฆ„

 ์ดํ›„ ์ž‘์—…ํ•œ ํŒŒ์ผ ๋˜๋Š” ํด๋”๊ฐ€ ๊นƒ์Šค๋Ÿฝ๊ฒŒ ๊ด€๋ฆฌ๋˜๊ธฐ ์œ„ํ•ด์„  'git add ํŒŒ์ผ์ด๋ฆ„' ๋ช…๋ น์–ด๋ฅผ 
 (์ž‘์—…ํด๋” ์œ„์น˜)์—์„œ ์ž…๋ ฅํ•ด์ฃผ์–ด์•ผ ํ•˜๊ณ  ์ด๋•Œ๋ถ€ํ„ฐ addํ•œ file๋“ค์€ stage ์˜์—ญ์— ์˜ฌ๋ ค์กŒ๋‹ค๊ณ ํ•œ๋‹ค. 
 ์ •ํ™•ํ•˜๊ฒŒ ์–˜๊ธฐํ•˜๋ฉด .git/index ํด๋”์•ˆ์— ๊ฐ๊ฐ์˜ (ํด๋”-ํŒŒ์ผ) ๊ตฌ์กฐ๋กœ ์ €์žฅ์ด ๋œ๋‹ค.
 
 ์‚ฌ์šฉ์ž ์ž…์žฅ์—์„œ ์ปค๋ฐ‹ํŒŒ์ผ๋กœ ๋งŒ๋“ค ๋‹จ๊ณ„์— ์œ„์น˜ํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ํ•ด์„œ stage ์˜์—ญ์— ์˜ฌ๋ž๋‹ค๋ผ๊ณ  ํ‘œํ˜„ํ•˜
 ๊ธฐ๋„ ํ•œ๋‹ค.
 
 ์ด๋ ‡๊ฒŒ addํ•˜๋Š” ๊ณผ์ •์ด ์ค‘์š”ํ•œ ์ด์œ ๋Š” ์ „ ๋ฒ„์ „๊ด€๋ฆฌ์—์„œ๋Š” ์„ ํƒ์ ์œผ๋กœ add ํ•  ์ˆ˜ ์—†์—ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. 
 git์—์„œ๋Š” add๋ผ๋Š” ๊ณผ์ •์ด ์žˆ์Œ์œผ๋กœ ์„ ํƒ์ ์œผ๋กœ ์ˆ˜์ •์‚ฌํ•ญ์„ ๋ฐ˜์˜ํ•  ์ˆ˜ ์žˆ๊ณ  ํ›„์— addํ•œ ํŒŒ์ผ๋“ค์„ 
 ๊ทธ๋ฃนํ™” ํ•ด์„œ ๋ฒ„์ „๋‹จ์œ„๋กœ ์ €์žฅ์†Œ์— ์ €์žฅํ•  ์ค€๋น„๋ฅผ ๋งˆ์น˜๊ฒŒ ๋œ ๊ฒƒ์ด๋‹ค.
                        ๐Ÿš€ I'm ready to be saved ๐Ÿง‘๐Ÿปโ€๐Ÿš€

3. git commit -m "๋ฉ”์‹œ์ง€"

 add์˜ ๊ณผ์ •์ด ์ €์žฅ์†Œ์— ์˜ฌ๋ฆด ๋ฒ„์ „์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ์ค‘๊ฐ„์ค€๋น„ ๊ณผ์ •์ด์—ˆ๋‹ค๋ฉด ์ปค๋ฐ‹์˜ ๊ณผ์ •์€ ์ค€๋น„ํ•œ  
 ์นœ๊ตฌ๋“ค์„ ์ €์žฅ์†Œ ๋ฐ๋ท”์‹œํ‚ค๋Š” ๊ณผ์ •์ด๋‹ค.
 
 ์˜ˆ๋ฅผ ๋“ค์–ด ํ˜„์žฌ stage์— file_1, file_2, dir_1์ด ์žˆ๋‹ค๊ณ  ํ–ˆ์„ ๋•Œ (add ํ•œ ํŒŒ์ผ๋“ค์ด file_1, 
 file_2 dir_1) ์ผ ๋•Œ '์ปค๋ฐ‹'์„ ํ•ด์ฃผ๋ฉด stage์— ์˜ฌ๋ผ๊ฐ„ ํŒŒ์ผ๋“ค์ด ํ•˜๋‚˜์˜ ๋ฒ„์ „์œผ๋กœ ์ €์žฅ์†Œ์— ์ €์žฅ์ด 
 ๋œ๋‹ค. ์ปค๋ฐ‹์˜ ๋ฒ„์ „ ํ˜•ํƒœ๋Š” ๊นƒ์˜ ์›๋ฆฌ์—์„œ ํ™•์ธํ•ด๋ณด๋„๋ก ํ•˜์ž.

4. git status

 ๋กœ์ปฌ์˜ ๋‚ด์šฉ๊ณผ ์ธ๋ฑ์Šค์˜ ๋‚ด์šฉ์„ ๋น„๊ตํ•˜์—ฌ add ๋ช…๋ น์˜ ๋Œ€์ƒ์ด ๋˜๋Š” ํŒŒ์ผ๋“ค์˜ ๋ชฉ๋ก์„ ํ‘œ์‹œํ•ด์ฃผ๊ณ , 
 ์ธ๋ฑ์Šค์˜ ๋‚ด์šฉ๊ณผ ์ตœ์‹  ์ปค๋ฐ‹์˜ Tree ํŒŒ์ผ ๋‚ด์šฉ์„ ๋น„๊ตํ•˜์—ฌ commit ๋ช…๋ น์˜ ๋Œ€์ƒ์ด ๋˜๋Š” ํŒŒ์ผ๋“ค์˜ 
 ๋ชฉ๋ก์„ ํ‘œ์‹œํ•ด์ฃผ๋Š” ๋ช…๋ น์–ด์ด๋‹ค.
 
 ๋กœ์ปฌ์˜ ๋‚ด์šฉ, ์ธ๋ฑ์Šค์˜ ๋‚ด์šฉ, ์ตœ์‹  ์ปค๋ฐ‹์˜ Tree ํŒŒ์ผ ๋‚ด์šฉ์ด ๋ชจ๋‘ ๊ฐ™๋‹ค๋ฉด "nothing to commit"
 ์„ ์ถœ๋ ฅํ•ด์ค€๋‹ค.

5. git add remote origin ๊นƒ์ฃผ์†Œ

  ์›๊ฒฉ์ €์žฅ์†Œ(remote repository)
  local ํ™˜๊ฒฝ์—์˜ ์ €์žฅ์†Œ์— ์ €์žฅํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋„คํŠธ์›Œํฌ ์ƒ์˜ ๋‹ค๋ฅธ ์ €์žฅ์†Œ๋ฅผ ์ผ์ปซ๋Š”๋‹ค.
  
  --- ๊นƒํ—ˆ๋ธŒ์—์„œ ์›๊ฒฉ์ €์žฅ์†Œ์˜ ์ฃผ์†Œ๊ฐ€ ๋งŒ๋“ค์–ด์กŒ๋‹ค๋Š” ๊ฐ€์ •ํ•˜์—---
  
  ๋กœ์ปฌ ํ™˜๊ฒฝ์—์„œ ์œ„์˜ ํ™˜๊ฒฝ๋Œ€๋กœ ์ €์žฅ์†Œ๋ฅผ ๊ตฌ์ถ•ํ–ˆ๋‹ค๋ฉด ํ•ด๋‹น ์ €์žฅ์†Œ๋ฅผ ์›๊ฒฉ ํ™˜๊ฒฝ์—์„œ ๊ตฌ์ถ•ํ•˜๊ธฐ ์œ„ํ•ด์„ 
  ์ž‘์—…์ด ํ•„์š”ํ•˜๋‹ค.
  
  git add remote origin ์›๊ฒฉ์ฃผ์†Œ
  
  ์œ„์˜ ๋ช…๋ น์–ด๊ฐ€ ๊ทธ ์˜ˆ์‹œ์ธ๋ฐ ํ’€๋ฉด ์›๊ฒฉ์ €์žฅ์†Œ ์ด๋ฆ„์„ origin(๊ด€์Šต)์œผ๋กœ ํ•ด์„œ ์›๊ฒฉ์ฃผ์†Œ๋ฅผ 
  ๋กœ์ปฌ ์ €์žฅ์†Œ์— ์—ฐ๊ฒฐํ•œ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.

6. git log -p

  ์œ„์˜ ๋ช…๋ น์–ด๋Š” git log ์ค‘ ์ปค๋ฐ‹๋‹จ์œ„ ๋ผ๋ฆฌ ์„œ๋กœ ๋น„๊ตํ•˜์—ฌ ์ˆ˜์ •์‚ฌํ•ญ์„ ์•Œ๋ ค์ฃผ๋Š” ๋ช…๋ น์–ด์ด๋‹ค.
  ์•„๋ž˜ ๊ทธ๋ฆผ์ด commit ๋‹จ์œ„์ด๊ณ  ๋ณด์—ฌ์ฃผ๋Š” ๋‚ด์šฉ์œผ๋กœ ์ปค๋ฐ‹ํŒŒ์ผ์˜ ๋ฒˆํ˜ธ, ์ž‘์„ฑ์ž, ์ž‘์„ฑ์‹œ๊ฐ„์„ ๋ณด
  ์—ฌ์ค€๋‹ค. ์ปค๋ฐ‹์‹œ commit -m "1"๋กœ ๋ฉ”์„ธ์ง€๋ฅผ ์ ์–ด์ฃผ์—ˆ๋Š”๋ฐ 1์€ ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค. 
  
  ์„ธ์ค„์€ ๊ฑด๋„ˆ ๋›ฐ๊ณ  ---/dev/null ์ด๋ผ๋Š” ๋ถ€๋ถ„์€ dir_1์ด๋ผ๋Š” ํŒŒ์ผ์ด ์—†์—ˆ๋Š”๋ฐ +++ b/dir_1
  ์ด๋ผ๋Š” ํŒŒ์ผ์ด ์ƒ๊ฒผ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค. ํ•œ์ค„ ๊ฑด๋„ˆ ๋›ฐ๊ณ  +apple is delicious๋Š” ํ•ด๋‹น ํŒŒ์ผ ๋‚ด์šฉ์—
  apple is delicious๋ผ๋Š” ๋‚ด์šฉ์ด ์ถ”๊ฐ€๋˜์—ˆ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.

์ข€๋” ๋ณต์žกํ•œ ์˜ˆ์‹œ๋ฅผ ์‚ดํŽด๋ณด์ž

commit ad0148362cdf18dc34fd67d133c893f70d4ace5b (HEAD -> master)
Author: woodstock1993 <diqkqkqk@gmail.com>
Date:   Sun Sep 19 10:42:08 2021 +0900

์ปค๋ฐ‹ ํŒŒ์ผ๋ช…: ad0148362cdf18dc34fd67d133c893f70d4ace5b
์ž‘์„ฑ์ž:      woodstock1993 <diqkqkqk@gmail.com>
์ž‘์„ฑ์ผ์ž:    Sun Sep 19 10:42:08 2021 +0900

--- a/dir_2
+++ b/dir_2
@@ -1,3 +1,3 @@
 banana is delicious

-kiwi is delicious
+kiwi is sour
dir_2๋ผ๋Š” ํŒŒ์ผ์ด ์žˆ๋Š”๋ฐ ๋ณ€๊ฒฝ๋˜์—ˆ๋‹ค. &nsp;banana is delicious\n ๋ฌธ์žฅ์ด ์ถ”๊ฐ€๋˜์—ˆ๊ณ 
kiwi is delicious ๋ผ๋Š” ๋ฌธ์žฅ์ด kiwi is sour๋กœ ๋ฐ”๋€Œ์—ˆ๋‹ค.

--- /dev/null
+++ b/dir_3
@@ -0,0 +1 @@
+grape is delicious

dir_3 ํŒŒ์ผ์ด ์ƒ์„ฑ๋˜์—ˆ๊ณ  
ํ•ด๋‹น ํŒŒ์ผ์— grape is delicious ๋ฌธ์žฅ์ด ์ถ”๊ฐ€๋˜์—ˆ๋‹ค.

7. add ๋ฐ ์ปค๋ฐ‹ ์ทจ์†Œํ•˜๊ธฐ

7-1) add ์ทจ์†Œํ•˜๊ธฐ
ํŠน์ •ํŒŒ์ผ์„ addํ•ด์„œ ์˜ฌ๋ ธ๋Š”๋ฐ stage ์˜์—ญ์— ์˜ฌ๋ผ๊ฐ„ ํŒŒ์ผ๋“ค์„ stage ์˜์—ญ์—์„œ ๋‹ค์‹œ ๋‚ด๋ ค์ฃผ๊ณ  ์‹ถ์„ ๋•Œ๊ฐ€
์žˆ์„ ๊ฒƒ์ด๋‹ค.
ย ย ย ย git reset HEAD ํŒŒ์ผ์ด๋ฆ„
์œ„ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด stage ์˜์—ญ์œผ๋กœ addํ•œ ํŒŒ์ผ๋“ค์„ ๋‚ด๋ ค ์ค„ ์ˆ˜ ์žˆ๋‹ค. ํŒŒ์ผ์ด๋ฆ„ ์—†์ด ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด
stage์— ์˜ฌ๋ผ๊ฐ„ ๋ชจ๋“  ํŒŒ์ผ๋“ค์„ ๋‚ด๋ฆฌ๊ฒŒ ๋œ๋‹ค.


7-2) ์ปค๋ฐ‹ ์ทจ์†Œํ•˜๊ธฐ
๋ฒ„์ „๋ณ„ ์ปค๋ฐ‹์„ ํ–ˆ๋Š”๋ฐ ๋ฒ„์ „์„ ์ง€์›Œ์ฃผ๊ณ  ์‹ถ์„ ๋•Œ๊ฐ€ ์žˆ์„ ๊ฒƒ์ด๋‹ค. ์ด๋Ÿด ๋•Œ ์ง€์šธ ์ˆ˜ ์žˆ๋Š” ๋ช…๋ น์–ด๊ฐ€ ์žˆ๋‹ค.
์•„๋ž˜์™€ ๊ฐ™์ด 5๋ฒˆ์˜ ์ปค๋ฐ‹์„ ํ–ˆ๊ณ  ๋ฉ”์„ธ์ง€ 3 ์ดํ›„์˜ ์ปค๋ฐ‹ ๋ฒ„์ „์„ ์ง€์šฐ๊ณ  ์‹ถ๋‹ค๊ณ  ํ–ˆ์„ ๋•Œ์˜ ๋ช…๋ น์–ด๋กœ
ย ย ย ย git reset ์ปค๋ฐ‹๋ฒ„์ „์˜ ์ด๋ฆ„ --hard
git reset e47396458513e067c455169b9507d49ea22ee453 --hard์„ ํ•ด์ฃผ๋ฉด ์ปค๋ฐ‹ '4'์™€ '5' ๋ฒ„์ „
์ด ์ง€์›Œ์ง€๊ฒŒ ๋œ๋‹ค. ์ปค๋ฐ‹ ๋ฉ”์„ธ์ง€ 3์˜ ์ปค๋ฐ‹ ํŒŒ์ผ ์ด๋ฆ„์„ ๋„ฃ์–ด์•ผ ํ•ด๋‹น ์ปค๋ฐ‹ ํŒŒ์ผ์„ ์ œ์™ธํ•œ ์ดํ›„์˜ ์ปค๋ฐ‹
ํŒŒ์ผ๋“ค์ด ์ง€์›Œ์ง€๊ฒŒ๋œ๋‹ค.

์ฃผ์˜ ์‚ฌํ•ญ์œผ๋กœ ์›๊ฒฉ์ €์žฅ์†Œ๋กœ pushํ•˜๊ธฐ ์ „ commit์— ๋Œ€ํ•ด  git reset์„ ํ•  ์ˆ˜ ์žˆ๊ณ  ์›๊ฒฉ ์ €์žฅ์†Œ๋กœ 
pushํ•œ ํŒŒ์ผ์€ ์ ์šฉ ๋Œ€์ƒ์ด ์•„๋‹ˆ๋‹ค.

7.2 checkout ๊ณผ reset ๊ฐœ๋…์žก๊ธฐ

checkout

checkout์€ ์ตœ์ดˆ์˜ commit ํŒŒ์ผ ์ƒ์„ฑ ์ดํ›„ HEAD๊ฐ€ ๋ฌด์—‡์„ ๋ธŒ๋žœ์น˜๋ฅผ ๊ฐ€๋ฆฌํ‚ฌ์ง€ ๋˜๋Š” ์ปค๋ฐ‹ํŒŒ์ผ์„ ๊ฐ€๋ฆฌํ‚ฌ
์ง€ ์„ค์ •ํ•ด ์ฃผ๋Š” ๊ฐœ๋…์ด๋‹ค. 

reset

reset์˜ ๊ฐœ๋…์€ branch๋กœ ํ•˜์—ฌ๊ธˆ ์–ด๋–ค ์ปค๋ฐ‹ํŒŒ์ผ์„ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ํ• ์ง€ ์„ค์ •ํ•˜๋Š” ๊ฐœ๋…์ด๋‹ค.
์–ด๋–ค ๋ธŒ๋žœ์น˜๊ฐ€ ๋งŒ์ผ ์ด์ „ ๋ฒ„์ „์˜ ์ปค๋ฐ‹ํŒŒ์ผ์„ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ๋  ๊ฒฝ์šฐ ํ˜„์žฌ ๋งํฌ๋˜์–ด ์žˆ๋Š” ์ปค๋ฐ‹ํŒŒ์ผ๊ณผ๋Š” ์—ฐ๊ฒฐ์ด 
๋Š์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์— ์‚ญ์ œ๋œ ๊ฒƒ ๊ฐ™์ด ๋Š๋ผ๊ฒŒ ๋œ๋‹ค.

8. add์™€ commit์„ ๋™์‹œ์— (์กฐ๊ฑด ์žˆ์Œ)

์ƒํ™ฉ: git add ํ•œ ํŒŒ์ผ ์ค‘์—์„œ ํŒŒ์ผ์˜ ๋‚ด์šฉ์ด ์ˆ˜์ •๋˜์—ˆ์„ ๋•Œ 

<git add ํŒŒ์ผ์ด๋ฆ„, git commit -m "๋ฉ”์„ธ์ง€"> ์˜ ๊ณผ์ •์„ ๊ฑฐ์ณ์•ผ ์ปค๋ฐ‹์„
ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฅผ ํ•˜๋‚˜์˜ ๋ช…๋ น์–ด๋กœ ๋‹จ์ถ•ํ•  ์ˆ˜ ๊ฐ€ ์žˆ๋Š”๋ฐ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

git commit -am "๋ฉ”์„ธ์ง€"
ย ย ย ย git commit -am "๋ฉ”์„ธ์ง€"
์œ„ ๋ช…๋ น์–ด๋กœ ์ž…๋ ฅํ•˜๋ฉด ์ถ”์ ํ•œ ํŒŒ์ผ์˜ ์ˆ˜์ •์ด ๋ฐœ์ƒํ–ˆ์„ ๋•Œ add์™€ commit์„ ๋™์‹œ์— ํ•  ์ˆ˜ ์žˆ๋‹ค.
add + commit => git commit -am "message" => makes typying happy ๐Ÿ˜Š

๐Ÿ” git์˜ ์›๋ฆฌ

1. git add์˜ ์›๋ฆฌ

git์€ ํŒŒ์ผ์ด๋ฆ„์ด ๋‹ฌ๋ผ๋„ ํŒŒ์ผ ๋‚ด์šฉ์ด ๊ฐ™์œผ๋ฉด ๊ฐ™์€ ํŒŒ์ผ์„ ๊ฐ€๋ฆฌํ‚จ๋‹ค. ์•„๋ž˜ ์ฐฝ์€ gistory
ํ”„๋กœ๊ทธ๋žจ์„ ํ†ตํ•ด git์œผ๋กœ ๊ด€๋ฆฌ๋˜๊ณ  ์žˆ๋Š” ํŒŒ์ผ๋“ค์„ ๋ณด์—ฌ์ค€๋‹ค.

ํ˜„์žฌ git init์ด ๋˜์–ด์žˆ๋Š” local์— f1.txt, f2.txt, f3.txt ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜์˜€๊ณ  f1.txt
์™€ f3.txt์˜ ๋‚ด์šฉ์ด ๋™์ผํ•˜๋‹ค. ๊ทธ๋žฌ์„ ๋•Œ f1.txt์™€ f3.txt๊ฐ€ ๊ฐ–๋Š” ๋ฒˆํ˜ธ๋Š” ๋™์ผํ•œ ๊ฒƒ์„ ๋ณผ
์ˆ˜ ์žˆ๋Š”๋ฐ ์ด์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ณ ์ž ํ•œ๋‹ค.

๊นƒ์€ (๋‚ด์šฉ+ฮฑ)๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ SHA1 ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ ์šฉํ•ด 
2e65efe2a145dda7ee51d1741299f848e5bf75e ์ด๋ฆ„์˜ blob ํŒŒ์ผ์„ ์ƒ์„ฑํ•œ๋‹ค.
ํŒŒ์ผ ์ œ๋ชฉ์ด ๋‹ค๋ฅด๋”๋ผ๋„ ๋‚ด์šฉ์ด ๊ฐ™๋‹ค๋ฉด ๊ฐ™์€ ํ•ด์‰ฌ ๊ฐ’์„ ๊ฐ–๊ธฐ ๋•Œ๋ฌธ์— ์œ„์™€ ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ๋‚ณ๋Š”๋‹ค.

objectsํด๋” ์•ˆ 2e ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ƒ์„ฑ 2e์•ˆ์— 
65efe2a145dda7ee51d1741299f848e5bf752e ์ด๋ฆ„์˜ ํŒŒ์ผ์„ ์ƒ์„ฑํ•œ๋‹ค.

ํ•ด์‰ฌ ๊ฐ’ ์ƒ์„ฑํ•˜๊ธฐ (์‹ค์Šต)

2. git commit์˜ ์›๋ฆฌ

์œ„ ๊ทธ๋ฆผ์€ gistory๋ฅผ .git/objects ํด๋” ์•ˆ์— ์žˆ๋Š” commit ๋ฒ„์ „์˜ ํŒŒ์ผ์ด๋ฆ„์ด๋‹ค.
commit ๋ฒ„์ „๋„ git add์‹œ ์ƒ์„ฑ๋˜๋Š” ํŒŒ์ผ๊ณผ ๋™์ผํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ์ƒ์„ฑ๋œ๋‹ค.
ํ•ด๋‹น ์ปค๋ฐ‹ ํŒŒ์ผ ์•ˆ์—๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ๋‚ด์šฉ์„ ๋‹ด๊ณ  ์žˆ๋‹ค.

commit ๋‚ด tree ํŒŒ์ผ์ด๋ฆ„
์ด์ „ ์ปค๋ฐ‹์˜ commit ํŒŒ์ผ์ด๋ฆ„
์ž‘์„ฑ์ž
์ปค๋ฐ‹ ๋ฉ”์„ธ์ง€

2.1) ์Šค๋ƒ…์ˆ ์šฉ์–ด์˜ ์œ ๋ž˜
     ์ปค๋ฐ‹ ํŒŒ์ผ์€ tree ๊ตฌ์กฐ๋กœ ํŒŒ์ผ๋“ค์„ ํ•˜๋‚˜์˜ ๋ฒ„์ „์œผ๋กœ '์ฐฐ์นต'์‚ฌ์ง„์„ ์ฐ์€ ๊ฒƒ ๊ฐ™์ด ๊ด€๋ฆฌํ•˜๊ธฐ
     ๋•Œ๋ฌธ์— ์Šค๋ƒ…์ˆ์ฒ˜๋Ÿผ ๊ด€๋ฆฌํ•œ๋‹ค๋ผ๊ณ  ๋ถˆ๋ฆฐ๋‹ค.

2.2) .git/objects ํŒŒ์ผ์˜ ๊ตฌ์„ฑ

      ์œ„์—์„œ ์•Œ ์ˆ˜ ์žˆ๋“ฏ์ด .git/objects ํด๋” ์•ˆ์—๋Š” ์„ธ์ข…๋ฅ˜์˜ ํŒŒ์ผ์ด ๋“ค์–ด์žˆ๋‹ค.
      commit, tree, blob ํŒŒ์ผ
      
      commit ํŒŒ์ผ ์•ˆ์— tree ํŒŒ์ผ์ด tree ํŒŒ์ผ ์•ˆ์— tree or blob ํŒŒ์ผ์ด ๋“ค์–ด์žˆ๊ณ  
      tree ๊ตฌ์กฐ๋กœ ๊ด€๋ฆฌ๋˜๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

3. git status ์˜ ์›๋ฆฌ

3.1) ์ถ”์ ๋œ ํŒŒ์ผ์˜ ๋‚ด์šฉ๋งŒ ๋ณ€๊ฒฝ๋˜์—ˆ์„ ๋•Œ

     index ํด๋”์—์„œ ํ˜„์žฌ ๊ด€๋ฆฌ๋˜์–ด์ง€๊ณ  ์žˆ๋Š” ํŒŒ์ผ์˜ ํ•ด์‰ฌ๊ฐ’๊ณผ ์ˆ˜์ •๋œ ํŒŒ์ผ์ด ๊ฐ–๊ณ  ์žˆ๋Š” ํ•ด์‰ฌ๊ฐ’
     ์€ ์„œ๋กœ ๋‹ค๋ฅธ ๋‚ด์šฉ์ด๊ธฐ์— ์„œ๋กœ ๋‹ค๋ฅธ ํ•ด์‰ฌ ๊ฐ’์„ ๊ฐ–๋Š”๋‹ค. ์ด์— ๊ทผ๊ฑฐํ•ด์„œ ์ถ”์ ๋œ ํŒŒ์ผ์˜ ๋‚ด์šฉ์ด 
     ๋ณ€๊ฒฝ๋˜์—ˆ์„ ๋•Œ git status ๋ช…๋ น์–ด๋ฅผ ์น˜๋ฉด ํŒŒ์ผ ๋‚ด์šฉ์ด ๋ณ€๊ฒฝ๋˜์—ˆ๋‹ค๊ณ  ์•Œ๋ ค์ค„ ๊ฒƒ์ด๋ผ ์ƒ๊ฐ๋œ
     ๋‹ค.
     
     ์žฌ๋ฏธ์žˆ๋Š” ์‚ฌ์‹ค์€ ํŒŒ์ผ์˜ ์ด๋ฆ„๋งŒ์„ ๋ณ€๊ฒฝํ–ˆ์„ ๋•Œ ๊นƒ์€ ํŒŒ์ผ์ด ์ˆ˜์ •๋˜์—ˆ๋‹ค๊ณ  ์ธ์‹ํ•˜์ง€ ์•Š๊ณ  ๊ธฐ์กด
     ํŒŒ์ผ์„ ์ง€์› ๋‹ค๊ณ  ์ธ์‹ํ•˜๊ณ  ๋ฐ”๊พผ ์ด๋ฆ„์œผ๋กœ ์ƒˆ๋กœ์šด ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜์˜€๋‹ค๊ณ  ์ธ์‹ํ•œ๋‹ค.
     
3.2) ์ปค๋ฐ‹ ํ•  ๊ฒƒ์ด ์—†์„ ๋•Œ
     local, index, ์ตœ์‹  commit์•ˆ์—์„œ์˜ ํŒŒ์ผ์ด ๋ชจ๋‘ ๊ฐ™์œผ๋ฉด git status๋ผ๋Š” ๋ช…๋ น์–ด๋ฅผ ์ณค์„ ๋•Œ 
     git์€ commit ํ•  ๊ฒƒ์ด ์—†๋‹ค๊ณ  ์ธ์‹ํ•œ๋‹ค.

๐ŸŒฑ git branch

1. ๋ธŒ๋žœ์น˜์˜ ๊ฐœ๋…

git์—์„œ ๋ธŒ๋žœ์น˜ ๊ฐœ๋…์€ '๋ถ„๊ธฐ'๋ผ๋Š” ๋‹จ์–ด์—์„œ ๋น„๋กฏ๋œ๋‹ค. ๋ถ„๊ธฐ๋ฅผ ํ•˜๋Š” ์ด์œ ๋Š” ์—ฌ๋Ÿฌ๊ฐ€์ง€๊ฐ€ ์žˆ๊ฒ ์ง€๋งŒ ๋ฐฑ์—…
์„ ํ•ด๋‘๊ณ  ๋ณต์‚ฌํ•œ ํŒŒ์ผ์— ๋Œ€ํ•ด์„œ ์ž‘์—…์„ ํ•˜๊ธฐ ์œ„ํ•จ์ด๋‹ค.

2. git branch ๋ช…๋ น์–ด

git branch ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ ํ•„์š”ํ•œ ์กฐ๊ฑด์ด ์žˆ๋‹ค.

์ปค๋ฐ‹ํŒŒ์ผ์˜ ์ƒ์„ฑ์ด ๊ทธ ์กฐ๊ฑด์ธ๋ฐ ์ปค๋ฐ‹ํŒŒ์ผ์ด ์ ์–ด๋„ ํ•œ๊ฐœ๋ผ๋„ ์กด์žฌํ•ด์•ผ์ง€ ์ƒˆ๋กœ์šด ๊ฐ€์ง€๋ฅผ ๋งŒ๋“ค ์ˆ˜๊ฐ€ ์žˆ๋‹ค.
ย ย ย ย git branch sub_master
์ปค๋ฐ‹ํŒŒ์ผ์ด ์žˆ๋‹ค๋Š” ๊ฐ€์ •ํ•˜์— ์œ„ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜๋ฉด sub_master ์ด๋ผ๋Š” ์ด๋ฆ„์˜ branch๊ฐ€ ์ƒ์„ฑ์ด 
๋œ๋‹ค. 
ย ย git branch sub_master
๊ทธ๋ฆฌ๊ณ  ๋‚˜์„œ ์œ„ ๋ช…๋ น์–ด ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด branch์˜ ๋ชฉ๋ก์ด ๋œฌ๋‹ค. ํ˜„์žฌ master๊ณผ sub_master
์ด๋ผ๋Š” ์ด๋ฆ„์˜ ๋ธŒ๋žœ์น˜๊ฐ€ ๋œฐ ๊ฒƒ์ด๋‹ค.
sub_master ๋ธŒ๋žœ์น˜๋Š” master์˜ ๋‚ด์šฉ์„ ๋ชจ๋‘ ๋ณต์‚ฌํ•ด์„œ ๊ฐ–๊ณ  ์žˆ๋‹ค. 

master branch์—์„œ sub_master ๋ธŒ๋žœ์น˜๋กœ ์ด๋™์„ ํ•˜๊ณ  ์‹ถ์„ ๋•Œ์—๋Š” ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•œ๋‹ค.
ย ย git checkout sub_master
์ดํ›„ addํ•œ ํŒŒ์ผ์— ์ˆ˜์ •์„ ํ•˜๊ณ  commit์„ ํ•œํ›„ git log -all์„ ๋ณด๋ฉด sub_master ๋ธŒ๋žœ์น˜ ์ƒํƒœ์—์„ 
์ถ”๊ฐ€๋œ ์ปค๋ฐ‹ ๋ฉ”์„ธ์ง€๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๊ณ  master ๋ธŒ๋žœ์น˜์—์„  ๋งˆ์ง€๋ง‰์œผ๋กœ ์ปค๋ฐ‹ํ•œ ๋ฉ”์„ธ์ง€๋ฅผ ํ™•์ธํ•  ์ˆ˜ 
์—†๋‹ค๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
ย ย checkout ์‹ฌ์ธต์ดํ•ด
์‚ฌ์‹ค checkout์€ branch์—๋งŒ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ช…๋ น์–ด๋Š” ์•„๋‹ˆ๋‹ค. ์ €์žฅ์†Œ๋ฅผ ์ƒ์„ฑํ•œ ํ›„ ์ฒซ ๋ฒˆ์งธ ์ปค๋ฐ‹ํŒŒ์ผ
์ด ๋งŒ๋“ค์–ด์กŒ์„ ๋•Œ HEAD๋Š” master๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ณ  master๋Š” commit ํŒŒ์ผ์„ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ์–ด์„œ HEAD๋Š” ๋ธŒ๋žœ
์น˜๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

git checkout ์ปค๋ฐ‹ํŒŒ์ผ์ด๋ฆ„

์œ„ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ด๋ณด๋ฉด HEAD๋Š” ์ปค๋ฐ‹ํŒŒ์ผ ์ด๋ฆ„์„ ๊ฐ€๋ฆฌํ‚ฌ ์ˆ˜ ์žˆ๊ณ (๋ฒ„์ „์„ ๋˜๋Œ๋ฆด ์ˆ˜ ์žˆ๊ณ ) ์ด๋•Œ HEAD๊ฐ€ 
๋ธŒ๋žœ์น˜์—์„œ ๋–จ์–ด์กŒ๋‹ค๊ณ  ํ•ด์„œ 'detached HEAD'๋ผ๊ณ  ๋ถˆ๋ฆฐ๋‹ค. 
ย ย  git log --branches --graph --decorate --oneline
ํ•ด๋‹น ๋ช…๋ น์–ด๋Š” ์ „์ฒด branch์˜ ๋ชจ์–‘์„ ๋ณด์—ฌ์ฃผ๋Š” ๋ช…๋ น์–ด์ด๋‹ค. ์œ„์˜ ๋ช…๋ น์–ด๊ฐ€ ํšจ๊ณผ์ ์ด๊ธฐ ์œ„ํ•ด์„  ์ƒˆ๋กœ
์šด branch๊ฐ€ ๋ถ„๊ธฐ๋˜๊ณ  ๊ฐ branch๊ฐ€ commit ํ•œ ๋‚ด์šฉ์ด ํ•œ๊ฐœ ์ด์ƒ์ด ์žˆ์„ ๋•Œ ๊ฐ€์‹œ์ ์œผ๋กœ ๋ธŒ๋žœ์น˜์˜
๋ชจ์–‘์„ ๋„์‹ํ™” ํ•ด์„œ ๋ณด์—ฌ์ค€๋‹ค.

์•„๋ž˜ ๊ทธ๋ฆผ์„ ๋ณด๋ฉด 2๊ฐœ์˜ ์ปค๋ฐ‹์ด ์žˆ์€ ๋’ค sub_master๋ผ๋Š” ๋ธŒ๋žœ์น˜ ์ด๋ฆ„์œผ๋กœ ๋ธŒ๋žœ์น˜๊ฐ€ ์ƒˆ๋กœ ์ƒ์„ฑ๋˜์—ˆ๊ณ 
๋ธŒ๋žœ์น˜๊ฐ€ sub_master์ธ ์ƒํ™ฉ์—์„œ 2๋ฒˆ์˜ ์ปค๋ฐ‹์ด ์žˆ์—ˆ๊ณ  master ๋ธŒ๋žœ์น˜์—์„œ๋Š” ํ•œ๋ฒˆ์˜ ์ปค๋ฐ‹์ด ์žˆ์—ˆ๋‹ค.
์•„๋ž˜์™€ ๊ฐ™์ด ์ƒˆ๋กœ์šด ๋ธŒ๋žœ์น˜๊ฐ€ ์ƒ์„ฑ๋œ ์ดํ›„ ๊ฐ ๋ธŒ๋žœ์น˜์—์„œ ์ ์–ด๋„ ํ•œ๊ฐœ ์ด์ƒ์˜ ์ปค๋ฐ‹์ด ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์•„
๋ž˜์™€ ๊ฐ™์€ ๋‚˜๋ญ‡๊ฐ€์ง€ ํ˜•ํƒœ์˜ ๋„์‹์„ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.

3. merge

์•„๋ž˜ ๊ทธ๋ฆผ์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋“ฏ์ด merge๋ž€ ํŠน์ • ์‹œ์ (base)์—์„œ ๋‚˜๋ˆ„์–ด์ ธ ๊ฐ์ž์˜ ๊ฐ€์ง€๋กœ ์ž‘์—…์„ ์ง„ํ–‰
์„ ํ•œ ํ›„ ํŠน์ • ์‹œ์ ์— ๋‚˜๋ˆ„์–ด์ง„ ๊ฐ€์ง€๋ฅผ ํ•˜๋‚˜๋กœ ํ•ฉ์น˜๋Š” ๊ฒƒ์„ ์ผ์ปซ๋Š”๋‹ค.

ย ย  base
 base๋ž€ ๋ถ„๊ธฐ๊ฐ€ ์ผ์–ด๋‚ฌ์„ ๋•Œ ๊ทธ ์ „๊นŒ์ง€ ๊ณตํ†ต์œผ๋กœ ๊ฐ–๊ณ  ์žˆ๋˜ ๋ถ€๋ชจ branch๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

3.1 merge

๊ฐ™์€ ์ด๋ฆ„์˜ ํŒŒ์ผ์—์„œ ๋ถ„๊ธฐ๋˜์–ด ์„œ๋กœ ๊ฒน์น˜์ง€ ์•Š์€ ๋ถ€๋ถ„ ์ˆ˜์ •ํ›„ merge

    ์œ„์˜ ๊ทธ๋ฆผ์€ ํ˜„์žฌ ํ•œ๋ฒˆ์˜ ์ปค๋ฐ‹ ์ดํ›„ o2๋ผ๋Š” ๋ธŒ๋žœ์น˜๋ฅผ ์ƒˆ๋กœ ์ƒ์„ฑํ•œ ํ›„ master ๋ธŒ๋žœ์น˜์—์„œ ์ž‘์—… 
    ๋ฐ ์ปค๋ฐ‹์„ ํ•œ ํ›„ o2 ๋ธŒ๋žœ์น˜๋กœ ์˜ฎ๊ฒจ ์ž‘์—… ๋ฐ ์ปค๋ฐ‹์„ ํ•œ ํ›„ master ๋ธŒ๋žœ์น˜๋กœ checkout์„ ํ•œ ์ƒ
    ํ™ฉ์ด๋‹ค.
    
    ๋ถ„๊ธฐ๊ฐ€ ์ด๋ฃจ์–ด ์ง€๊ธฐ ์ „ work.txt ๋ผ๋Š” ๋™์ผํ•œ ์ด๋ฆ„์˜ ํŒŒ์ผ์„ ๊ฐ–๊ณ  ์žˆ์—ˆ๊ณ  ๋ถ„๊ธฐ ์ดํ›„ ์ด๋ฃจ์–ด์ง„
    ์ž‘์—…๊ณผ ๊ด€๋ จํ•ด์„  ์„œ๋กœ์˜ ๋‚ด์šฉ์ด ๊ฒน์น˜์ง€ ์•Š์€ ์ƒํƒœ์—์„œ ์ž‘์—…์ด ์ด๋ฃจ์–ด์กŒ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด ํ•ด๋‹นํŒŒ์ผ
    ์— apple banana ๋ผ๋Š” ๋‚ด์šฉ์ด ์žˆ์—ˆ๋‹ค๋ฉด master์—์„  apple์„ apples๋กœ o2(๋ธŒ๋žœ์น˜)์—์„  bananas
    ๋กœ ํŒŒ์ผ ๋‚ด์šฉ์„ ๋ณ€๊ฒฝํ•œ ๊ฒƒ์ด๋‹ค.
    
    ๊ทธ๋žฌ์„ ๋•Œ merge๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด์„  ๋ธŒ๋žœ์น˜๊ฐ€ master์ธ ์ƒํƒœ์—์„œ merge๋ฅผ ํ•ด์•ผํ•˜๋Š”๋ฐ ๊ทธ ๋•Œ ๋ช…๋ น์–ด๋Š”
    ์•„๋ž˜์™€ ๊ฐ™๋‹ค.
ย ย ย ย ย  git merge merge_๋Œ€์ƒ -> git merge o2

     ์œ„ ๊ทธ๋ฆผ์€ merge ์ดํ›„์˜ ์ƒํ™ฉ์„ ๋„์‹ํ™”๋กœ ๋‚˜ํƒ€๋‚ธ ์ž๋ฃŒ์ด๋‹ค.
     ๊ทธ๋ฆผ์„ ์ž์„ธํžˆ ๋ณด๋ฉด o2์˜ ๋งˆ์ง€๋ง‰ ์ปค๋ฐ‹์ดํ›„ ์ƒˆ๋กœ์šด ์ปค๋ฐ‹ํŒŒ์ผ์ด ์ƒ์„ฑ๋œ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
     
     ์—ฌ๊ธฐ์„œ ์ฃผ๋ชฉํ•ด์„œ ๋ณด์•„์•ผ ํ•  ๊ฒƒ์€ ๋ถ„๊ธฐ ์ดํ›„ ์ด๋ฆ„์ด ๊ฐ™์€ ํŒŒ์ผ์˜ ์„œ๋กœ ๋‹ค๋ฅธ ๋ถ€๋ถ„์„ ์ˆ˜์ •ํ•œ ํ›„
     (์ˆ˜์ •ํ•œ ๋ถ€๋ถ„์ด ์„œ๋กœ ๊ฒน์น˜์ง€ ์•Š์•˜์„ ๋•Œ) merge ํ–ˆ์„ ๋•Œ git์ด ์•Œ์•„์„œ ๋ณ€๊ฒฝ๋œ ๋ถ€๋ถ„์„ ์ฐพ์•„๋‚ด
     ๊ธฐ์กด ๋‚ด์šฉ์—์„œ ๋ณ€๊ฒฝํ•œ ๋ถ€๋ถ„์„ ๋ฐ”๊พธ์–ด ํ•˜๋‚˜์˜ ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด ๋‚ธ๋‹ค๋Š” ๋ถ€๋ถ„์ด๋‹ค.

3.2 merge conflict

๊ฐ™์€ ์ด๋ฆ„์˜ ํŒŒ์ผ์—์„œ ๋ถ„๊ธฐ๋˜์–ด ์ˆ˜์ •ํ•œ ๋ถ€๋ถ„์ด ์„œ๋กœ ๊ฒน์น  ๋•Œ
์ƒํ™ฉ
ํ˜„์žฌ local์— work.txt ํŒŒ์ผ์ด ์žˆ๊ณ  ํ•ด๋‹น ํŒŒ์ผ ์•ˆ์—๋Š” ๋‚ด์šฉ์ด ๋‹ด๊ฒจ ์žˆ๋‹ค.
ํŒŒ์ผ์„ ๋งŒ๋“  ํ›„ o2๋ผ๋Š” ๋ธŒ๋žœ์น˜๋ฅผ ์ƒˆ๋กœ ์ƒ์„ฑํ•˜์˜€๊ณ  o2 ๋ธŒ๋žœ์น˜์—์„œ work.txt์˜ ์„ธ๋ฒˆ์งธ ์ค„์„ ์ˆ˜์ •
master ๋ธŒ๋žœ์น˜๋กœ checkout ํ›„ work.txt์—์„œ ์„ธ๋ฒˆ์งธ ์ค„์„ ์œ„์™€ ๋‹ค๋ฅธ ๋‚ด์šฉ์œผ๋กœ ์ˆ˜์ •ํ•˜์˜€์„ ๋•Œ

git merge o2

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

์•„๋ž˜ ๊ทธ๋ฆผ์€ ======= ๋ฅผ ๋ถ„๊ธฐ์ ์œผ๋กœ ํ•ด์„œ <<<<<<< ์•„๋ž˜ ๋ถ€๋ถ„๊ณผ >>>>>>> ์œ„๋ถ€๋ถ„์˜ ๋‚ด์šฉ์ด ์„œ๋กœ
๋‹ฌ๋ผ ํ•ด๋‹น ๋ถ€๋ถ„์ด ์ถฉ๋Œํ•˜๊ณ  ์žˆ์Œ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค. ๋”ฐ๋ผ์„œ ํ•ด๋‹น ์–ด๋–ค ๋‚ด์šฉ์œผ๋กœ ๊ณ ์น ์ง€ ์ •ํ•œ ํ›„ merge
๋ฅผ ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

'<<<<<<<','>>>>>>>','======='์ด ์žˆ๋Š” ์ค„์€ ์ง€์›Œ์ค˜์•ผ ํ•˜๊ณ  <<<<<<<๊ณผ >>>>>>> ์‚ฌ์ด์— ์ตœ์ข… 
์ˆ˜์ • ํ•  ๋‚ด์šฉ์„ ์ ์–ด์•ผํ•œ๋‹ค.

์œ„ ์ž‘์—…์„ ๋งˆ์น˜๊ณ  ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ–ˆ์„ ๋•Œ ์ž‘์—…์ด ๋‹ค์‹œ ์ •์ƒ์ ์œผ๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค.
ย ย ย ย ย  git add

ย ย ย ย ย  git commit

3.3 2way Merge

์ƒํ™ฉ: here branch์™€ there branch 2๊ฐœ๊ฐ€ ์žˆ๋‹ค. ๋‘๊ฐœ์˜ branch๋ฅผ merge ํ•  ๋•Œ ์„œ๋กœ ๊ฒน์น˜๋Š” ๋ถ€๋ถ„์˜
     ๋‚ด์šฉ์ด ๋ฐœ์ƒ ํ•  ๊ฒฝ์šฐ ์„œ๋กœ ๋‹ค๋ฅธ ๊ฐ’์„ ๊ฐ–๋Š”๋‹ค๊ณ  ํ•˜์ž. ๊ทธ๋žฌ์„ ๋•Œ merge conflict๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ
     ์šฐ here: A, there: A๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  ๊ฒฝ์šฐ์—์„œ merge conflict ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

3.4 3way Merge

์ด์ œ๋Š” 2way Merge ์™€๋Š” ๋‹ค๋ฅธ 3way Merge๋ฅผ ์‚ดํŽด๋ณด์ž.

์ƒํ™ฉ: base๋Š” ๋ถ„๊ธฐ์ ์„ ์˜๋ฏธํ•˜๊ณ  base๋ฅผ ๊ธฐ์ค€์œผ๋กœ here ๋ธŒ๋žœ์น˜์™€ there branch์˜ ๋‚ด์šฉ์„ ์‚ดํŽด
     ๋ณด๋ฉด (H, D, T)์ธ ์ƒํ™ฉ์„ ์ œ์™ธํ•˜๋ฉด Merge ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค. ์™œ๋ƒํ•˜๋ฉด base ๋ผ๋Š”
     ๊ธฐ์ค€์ ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
     
     base๋Š” branch๊ฐ€ ์•„๋‹Œ ๋ถ„๊ธฐ์ ์œผ๋กœ ๊ฐˆ๋ผ์ ธ ๋‚˜๊ฐ€๊ธฐ ์ „์˜ here์™€ there์˜ ๊ณตํ†ต ์กฐ์ƒ์„ ๊ฐ€๋ฆฌ
     ํ‚จ๋‹ค. ๋”ฐ๋ผ์„œ base๋Š” ๋ณ€๊ฒฝ์ „ ์‚ฌํ•ญ์— ๋Œ€ํ•œ ๋‚ด์šฉ์„ ๊ฐ–๊ณ  ์žˆ๋Š” ๊ฒƒ์ธ๋ฐ ๊ธฐ์กด ํŒŒ์ผ ๋‚ด์šฉ์— there
     ์™€ here์—์„œ here์—๋งŒ ์ˆ˜์ •์ด ์ผ์–ด๋‚œ ๊ฒฝ์šฐ merge๊ฐ€ ๊ฐ€๋Šฅํ•˜๊ณ  there์—๋งŒ ์ˆ˜์ •์ด ์ผ์–ด๋‚œ ๊ฒฝ์šฐ
     merge๊ฐ€ ๊ฐ€๋Šฅํ•˜๊ณ  ๋™์ผํ•œ ๋ถ€๋ถ„์—์„œ ์„œ๋กœ ๋‹ค๋ฅธ ์ˆ˜์ •์ด ์ผ์–ด๋‚ฌ์„ ๋•Œ (H, D, T)์ธ ์ƒํ™ฉ์—์„œ
     ๋งŒ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•œ๋‹ค.
     
(์ •๋ฆฌ) 2 way Merge์™€ ๋น„๊ตํ–ˆ์„ ๋•Œ 3 way Merge๊ฐ€ ์‹œ์‚ฌํ•˜๋Š” ๋ฐ”๋Š” base์—์„œ ์‹œ์ž‘ํ•ด ๋ถ„๊ธฐ์ ์—์„œ ๋‚˜
      ๋ˆ„์–ด ์ ธ์„œ ์ˆ˜์ •ํ•œ ๊ฐ๊ฐ์˜ ํŒŒ์ผ์„ merge ํ–ˆ์„ ๋•Œ ์ฆ‰ 3 way Merge ๋ฐฉ์‹์—์„œ Merge๋ฅผ ํ–ˆ์„ ๋•Œ
      ๋ณด๋‹ค ๋งŽ์€ ์ƒํ™ฉ์„ coverํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด๋‹ค.

๐Ÿ’พ Back up

hosting
์ธํ„ฐ๋„ท์— ์—ฐ๊ฒฐ๋˜์–ด์„œ ์›๊ฒฉ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์„œ๋ฒ„๋ฅผ ์ œ๊ณตํ•˜๋Š” ์„œ๋น„์Šค๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
git hosting
๋กœ์ปฌ ์ €์žฅ์†Œ์˜ ๋ฒ„์ „์„ ์—…๋กœ๋“œ ํ•  ์›๊ฒฉ์ €์žฅ์†Œ๋ฅผ ์ž„๋Œ€ํ•ด์ฃผ๋Š” ์„œ๋น„์Šค๋ฅผ ์˜๋ฏธํ•œ๋‹ค. 
git push
์ง€์—ญ ์ €์žฅ์†Œ์— ์žˆ๋Š” ๋ฒ„์ „์„ ์›๊ฒฉ์ €์žฅ์†Œ์— ์˜ฌ๋ฆฌ๋Š” ํ–‰์œ„

์ƒํ™ฉ: ๊นƒํ—™์— ์˜จ๋ผ์ธ ์ €์žฅ์†Œ๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ž. ์›๊ฒฉ์ €์žฅ์†Œ์˜ ์ฃผ์†Œ๋ฅผ ๋กœ์ปฌ ์ €์žฅ์†Œ์— ์—ฐ๊ฒฐํ•œ ํ›„
     ๋กœ์ปฌ ํ™˜๊ฒฝ์—์„œ ์ž‘์—…ํ•œ ๋‚ด์—ญ์„ pushํ•˜๋ ค๊ณ  ํ•  ๋•Œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
     
 -b <new_branch>
           Create a new branch named <new_branch> and start it at <start_point>; see git-branch(1) for
           details.
git clone
์›๊ฒฉ ์ €์žฅ์†Œ์— ์žˆ๋Š” ํŒŒ์ผ์„ ์ง€์—ญ ์ €์žฅ์†Œ๋กœ ๋ณต์‚ฌํ•˜๋Š” ํ–‰์œ„
git pull
์›๊ฒฉ ์ €์žฅ์†Œ์— ์žˆ๋Š” ํŒŒ์ผ์„ ๋กœ์ปฌํ™˜๊ฒฝ์œผ๋กœ ๊ฐ€์ ธ์™€ ๊ธฐ์กด ๋ฒ„์ „์„ ์›๊ฒฉ ์ €์žฅ์†Œ์— ์žˆ๋Š” ๋ฒ„์ „์œผ๋กœ ์—…๋ฐ์ด
ํ•˜๋Š” ํ–‰์œ„

0๊ฐœ์˜ ๋Œ“๊ธ€