๐Ÿ“š Study/DevOps

Git ์‚ฌ์šฉ ๋ฐฉ๋ฒ• ์ •๋ฆฌ(commit, push, pull request, merge ๋“ฑ)

kkh1902 2022. 5. 28. 23:44
728x90
๋ฐ˜์‘ํ˜•

Git

git ๊ฐœ๋… ๋ฐ ๋ช…๋ น์–ด ์ •๋ฆฌ

๊ฐœ์ธ ๊ฐœ๋ฐœ์„ ๋„˜์–ด, ๊ณต๋™ ๊ฐœ๋ฐœ์—์„œ ํšจ์œจ์ ์ธ ์ฝ”๋“œ ํ˜•์ƒ ๊ด€๋ฆฌ๋ฅผ ํ•˜๊ธฐ ์œ„ํ•จ.

 

Git ์˜์—ญ

(1) Working Directory (Local)

    : ๊ฐœ์ธ ์ฝ”๋“œ ์ž‘์„ฑ

(2) Staging ์˜์—ญ

    :โ€‹ git add ๋ฅผ ํ†ตํ•ด์„œ ์ˆ˜์ •๋œ ์ฝ”๋“œ๋ฅผ ์˜ฌ๋ฆฌ๋Š” ์˜์—ญ

(3) Repository

    : โ€‹ git commit ์„ ํ†ตํ•ด์„œ ์ตœ์ข… ์ˆ˜์ •๋ณธ์„ ์ œ์ถœ

 


Git ์ž‘์—… ํ”Œ๋กœ์šฐ

๋จผ์ € ํ„ฐ๋ฏธ๋„์— git์„ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

linux (Ubuntu) ๊ธฐ์ค€

$ sudo apt install git-all

 

(1) ์ €์žฅ์†Œ(Repository) ์ƒ์„ฑ

์›ํ•˜๋Š” ํด๋” ๋“ค์–ด๊ฐ„ ํ›„

$ git init

 

๋˜๋Š” ๊ธฐ์กด github์— ์žˆ๋Š” ์ €์žฅ์†Œ๋ฅผ ๋‚ด ๋กœ์ปฌ๋กœ ๋ณต์ œํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

$ git clone (git ์ €์žฅ์†Œ์˜ URL)

 

(2) ์ฝ”๋“œ ์ƒ์„ฑ (in Working directory)

์ด ์˜ˆ์ œ์—์„œ๋Š” README.md ๋ผ๋Š” ํŒŒ์ผ์— ์ŠคํŠธ๋ง ๋ฌธ์ž๋ฅผ ์“ฐ๋Š” ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค๊ฒ ์Šต๋‹ˆ๋‹ค.

$ echo "Hello, Git!" > README.md

 

ํ™•์ธ >>

 
$ cat README.md
 
Hello, Git!

 

(3) Staging ์˜์—ญ์— ์ถ”๊ฐ€

์ฝ”๋“œ ์ˆ˜์ •์ด ์™„๋ฃŒ๋˜๋ฉด staging ์˜์—ญ์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

$ git add .

ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ์— ์žˆ๋Š” ์—…๋ฐ์ดํŠธ ๋œ ํŒŒ์ผ์„ ์ „๋ถ€ ์Šคํ…Œ์ด์ง• ์˜์—ญ์œผ๋กœ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

 

๋˜๋Š”,

$ git add -A

์ˆ˜์ •๋œ ํŒŒ์ผ ์ „๋ถ€๋ฅผ ์Šคํ…Œ์ด์ง• ์˜์—ญ์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

 

$ git status

๋กœ ํ˜„์žฌ add ๋‚ด์—ญ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

(4) Repository์— commit

$ git commit -m "feat: README.md update"

-m ์€ ๋ฉ”์„ธ์ง€์˜ ์•ฝ์ž์ด๊ณ , ๋’ค์— ""์•ˆ์— ๊ณต์œ ํ•  ๋ฉ”์‹œ์ง€ ๋‚ด์šฉ์„ ์ ์–ด์ฃผ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

(5) ์›๊ฒฉ ์ €์žฅ์†Œ์— push, ์—…๋ฐ์ดํŠธ ๋œ ๋‚ด์šฉ์€ pull

๋‚ด local ๋””๋ ‰ํ† ๋ฆฌ๋กœ ๋ถ€ํ„ฐ ์›๊ฒฉ์ €์žฅ์†Œ(Remote repository)๋กœ ๋ณด๋‚ด๊ธฐ ์œ„ํ•ด์„œ๋Š” push ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๊ทธ ์ „์— ์›๊ฒฉ ์ €์žฅ์†Œ์™€ ๋‚ด ๋กœ์ปฌ์„ ์—ฐ๊ฒฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์›๊ฒฉ ์ €์žฅ์†Œ ์—ฐ๊ฒฐ (github)

$ git remote add origin (์›๊ฒฉ ์ €์žฅ์†Œ github URL)

origin์€ remote repository์˜ ์ด๋ฆ„์ด๋ฉฐ, ๋‹ค๋ฅธ ์ด๋ฆ„์œผ๋กœ ์„ค์ •ํ•ด๋„ ๋ฌด๋ฐฉํ•ฉ๋‹ˆ๋‹ค.

 

push

$ git push origin master

origin์ด๋ผ๋Š” ์›๊ฒฉ์ €์žฅ์†Œ์˜ master ๋ธŒ๋žœ์น˜ (๋ธŒ๋žœ์น˜๋Š” ๋’ค์—์„œ ์„ค๋ช…)์— ํ‘ธ์‰ฌํ•ฉ๋‹ˆ๋‹ค.  

 

์ตœ๊ทผ์—๋Š” ๊นƒํ—™์—์„œ ๋ฉ”์ธ ๋ธŒ๋žœ์น˜์ด๋ฆ„์„ master๊ฐ€ ์•„๋‹Œ ๊ธฐ๋ณธ์œผ๋กœ main ์œผ๋กœ ํ•ด๋†“์•˜์Šต๋‹ˆ๋‹ค. (ํ•„์ž์˜ ์ˆ˜์ •๋‚ ์งœ๋Š” 2021-05-11)

๋”ฐ๋ผ์„œ ๋ธŒ๋žœ์น˜๋ฅผ ๋ฐ”๊พธ๊ณ , ๋ฐ”๊พผ ๋ธŒ๋žœ์น˜๋กœ push ํ•ด์ฃผ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค. (๋ธŒ๋žœ์น˜ ๊ด€๋ จ ๋ช…๋ น์–ด๋Š” ๋ฐ‘์— ๋” ๋‚˜์˜ต๋‹ˆ๋‹ค.)

 
$ git branch -M main
 
$ git push origin main

 

 

pull

๋˜ํ•œ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ์›๊ฒฉ ์ €์žฅ์†Œ(Remote repository)์— ์—…๋ฐ์ดํŠธํ•œ ํŒŒ์ผ์ด ์žˆ์„ ๋•Œ, ์›๊ฒฉ์ €์žฅ์†Œ์™€ ๋‚ด ๋กœ์ปฌ์ €์žฅ์†Œ์˜ ์ƒํƒœ๋ฅผ ๋™์ผํ•˜๊ฒŒ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด pull์„ ์ด์šฉํ•ฉ๋‹ˆ๋‹ค.

$ git pull

 

 


๊ทธ ์™ธ ์•Œ์•„๋‘๋ฉด ์ข‹์€ git ๋ช…๋ น์–ด

 

(6) ์ปค๋ฐ‹ ์ด๋ ฅ ํ™•์ธ

$ git log

 

๋˜๋Š”

ํ•œ ์ค„๋กœ ์š”์•ฝํ•ด์„œ ๋ณด๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ

$ git log --oneline

 

(7) ํŒŒ์ผ๋ณ€๊ฒฝ์‹œ (Working drectory → Staging) ๋‚ด์—ญ ํ™•์ธ ๋ฐ ์ทจ์†Œ

ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ์— README.md ๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฐ€์ •ํ•˜์—,

์ด ํŒŒ์ผ์— ๋‹ค๋ฅธ ๋‚ด์šฉ์„ ์ ์–ด ์—…๋ฐ์ดํŠธํ•˜๊ณ , ๋ฌด์—‡์ด ๋ฐ”๋€Œ์—ˆ๋Š”์ง€ ํ™•์ธํ•ด๋ด…๋‹ˆ๋‹ค.

ํŒŒ์ผ ๋‚ด์šฉ ๋ณ€๊ฒฝ

$ echo "update test" >> README.md

 

๋‚ด์šฉ ๋ณ€๊ฒฝ ํ™•์ธ

 
$ cat README.md
 
Hello, Git!
 
update test

 

๋ณ€๊ฒฝ ๋‚ด์šฉ ํ™•์ธ

$ git diff

 

staging ์ทจ์†Œ (unstage)

$ git reset

๋˜๋Š”

$ git reset --hard

working directory ๊นŒ์ง€๋„ ๋ณ€๊ฒฝ์ „ ์ƒํƒœ๋กœ ๋˜๋Œ๋ฆผ ์ฆ‰, ๋ณ€๊ฒฝํ•œ ๋‚ด์šฉ์ด ์†Œ๋ฉธ๋˜๋ฏ€๋กœ ์ฃผ์˜

 

(8) commit ์ •๋ฆฌ

์—ฌ๋Ÿฌ๊ฐœ์˜ commit์„ ํ•˜๋‚˜์˜ commit์œผ๋กœ ์ •๋ฆฌ

$ git rebase -i

์ง์ „๊ณผ ๊ธˆ๋ฒˆ ์ปค๋ฐ‹์„ ํ•˜๋‚˜๋กœ ์ •๋ฆฌ

git commit --amend

 

 

 


Git Branch

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

๋”ฐ๋ผ์„œ master (๊ธฐ๋ณธ ๋ธŒ๋žœ์น˜) ์™ธ์— ๋‹ค๋ฅธ ๋ธŒ๋žœ์น˜๊ฐ€ ํ•˜๋‚˜๋” ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

 

(9) branch ํ™•์ธ

$ git branch

ํ˜„์žฌ ์„ค์ •๋œ ๋ธŒ๋žœ์น˜ ์•ž์— * ๊ฐ€ ๋ถ™์Šต๋‹ˆ๋‹ค.

 

(10) branch ์ƒ์„ฑ ๋ฐ ๋ณ€๊ฒฝ

$ git branch mybranch

์ƒˆ๋กœ์šด ๋ธŒ๋žœ์น˜ mybranch๋ฅผ ์ƒ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

$ git checkout mybranch

๊ธฐ์กด ๋ธŒ๋žœ์น˜(master)์—์„œ ์ƒˆ๋กœ์šด ๋ธŒ๋žœ์น˜(mybranch)๋กœ ์ „ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ๋ฐ”๋€ ๋ธŒ๋žœ์น˜์—์„œ commit์„ ํ•˜๋ฉด, ์›๋ž˜ ๋ธŒ๋žœ์น˜์—๋Š” ์—…๋ฐ์ดํŠธ๊ฐ€ ์•ˆ๋˜๊ณ , ์ƒˆ๋กœ์šด ๋ธŒ๋žœ์น˜์—์„œ๋งŒ ์—…๋ฐ์ดํŠธ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

push๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ง„ํ–‰ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

$ git push origin mybranch

origin์ด๋ผ๋Š” ์›๊ฒฉ์ €์žฅ์†Œ์˜ mybranch๋กœ pushํ•ฉ๋‹ˆ๋‹ค.

 


Pull Request์™€ Merge

commit์„ ํ•œ๋‹ค๊ณ  ์ตœ์ข… ์ฝ”๋“œ๊ฐ€ ์ˆ˜์ •๋˜๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค.

๊ฐœ์ธ์ด commit์„ ํ–ˆ์œผ๋ฉด, ๊ด€๋ฆฌ์ž๊ฐ€ ์ด ์ฝ”๋“œ๋ฅผ ๋ฆฌ๋ทฐํ•˜๊ณ  ๋ฐ”๊ฟ€๊ฒƒ์ด ์žˆ์œผ๋ฉด ์ˆ˜์ •ํ•ด๋‹ฌ๋ผ๊ณ  ๋‹ค์‹œ ์š”์ฒญํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ทธ ๊ณผ์ •์„ ์•Œ์•„๋ด…๋‹ˆ๋‹ค.

 

1) Pull Request ๋ฐœํ–‰ (Review ์˜๋ขฐ์ž)

github์— ์ ‘์† ํ›„, ์›๊ฒฉ์ €์žฅ์†Œ์— ๋“ค์–ด๊ฐ€์„œ ํ•ด๋‹น commit์˜ pull request ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด Reviewer์—๊ฒŒ ํ’€๋ฆฌํ€˜์ŠคํŠธ ๋ฉ”์‹œ์ง€ ์ „์†ก

 

2) Review & Comment (Review ์ˆ˜ํ–‰์ž)

๋ฆฌ๋ทฐ ํ›„ comment ํ•  ๊ฒƒ์ด ์žˆ์œผ๋ฉด comment ๋ฒ„ํŠผ ํด๋ฆญ

 

3) Comment ๋Œ€์‘ (Review ์ˆ˜ํ–‰์ž)

local์—์„œ ์ฝ”๋“œ ์ˆ˜์ • ํ›„ ์›๋ž˜์™€ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ commit ์ˆ˜ํ–‰

 
$ git add .
 
$ git commit -m "์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€"
 
$ git push

 

4) Review ๋ฐ ๋ณ‘ํ•ฉ (Review ์ˆ˜ํ–‰์ž)

๋ฆฌ๋ทฐ ํ›„ ์ตœ์ข… ๊ฒฐ๊ณผ ๋งŒ์กฑ ์‹œ ๋ณ‘ํ•ฉ(merge) → github์—์„œ pull request merge ๋ฒ„ํŠผ ํด๋ฆญ

728x90
๋ฐ˜์‘ํ˜•