Python/Git & GitHub

[Do it! Git&Git hub ์ž…๋ฌธ] 02 ๊นƒ์œผ๋กœ ๋ฒ„์ „ ๊ด€๋ฆฌํ•˜๊ธฐ

kyra 2022. 7. 16. 12:27

๐ŸŽ†๊นƒ์—์„œ ๋ฒ„์ „์ด๋ž€?

๋ฌธ์„œ๋ฅผ ์ˆ˜์ •ํ•˜๊ณ  ์ €์žฅํ•  ๋•Œ๋งˆ๋‹ค ์ƒ๊ธฐ๋Š” ๊ฒƒ

 

* ์ž‘์—…ํŠธ๋ฆฌ : ํŒŒ์ผ ์ˆ˜์ •, ์ €์žฅ ๋“ฑ์˜ ์ž‘์—…์„ ํ•˜๋Š” ๋””๋ ‰ํ„ฐ๋ฆฌ๋กœ '์ž‘์—… ๋””๋ ‰ํ„ฐ๋ฆฌ(working directory)'๋ผ๊ณ ๋„ ํ•œ๋‹ค.

๋งŒ๋“  hello-git ๋””๋ ‰ํ„ฐ๋ฆฌ๊ฐ€ ์ž‘์—… ํŠธ๋ฆฌ๊ฐ€ ๋œ๋‹ค. ์ฆ‰ ์šฐ๋ฆฌ ๋ˆˆ์— ๋ณด์ด๋Š” ๋””๋ ‰ํ„ฐ๋ฆฌ๊ฐ€ ๋ฐ”๋กœ ์ž‘์—…ํŠธ๋ฆฌ์ด๋‹ค.

 

* ์Šคํ…Œ์ด์ง€ : ๋ฒ„์ „์œผ๋กœ ๋งŒ๋“ค ํŒŒ์ผ์ด ๋Œ€๊ธฐํ•˜๋Š” ๊ณณ, ์Šคํ…Œ์ด์ง• ์˜์—ญ(staging area)๋ผ๊ณ  ๋ถ€๋ฅด๊ธฐ๋„ ํ•œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ์ž‘์—… ํŠธ๋ฆฌ์—์„œ 10๊ฐœ์˜ ํŒŒ์ผ์„ ์ˆ˜์ •ํ–ˆ๋Š”๋ฐ 4๊ฐœ์˜ ํŒŒ์ผ๋งŒ ๋ฒ„์ „์œผ๋กœ ๋งŒ๋“ ๋‹ค๋ฉด 4๊ฐœ์˜ ํŒŒ์ผ๋งŒ ์Šคํ…Œ์ด์ง€๋กœ ๋„˜๊ฒจ์ฃผ๋ฉด ๋œ๋‹ค.

 

* ์ €์žฅ์†Œ(repository) : ์Šคํ…Œ์ด์ง€์—์„œ ๋Œ€๊ธฐํ•˜๋˜ ํŒŒ์ผ์„ ๋ฒ„์ „์œผ๋กœ ๋งŒ๋“ค์–ด ์ €์žฅํ•˜๋Š” ๊ณณ

 

* ์Šคํ…Œ์ด์ง€์™€ ์ €์žฅ์†Œ๋Š” ๋ˆˆ์— ๋ณด์ด์ง€ ์•Š์Œ. ์ด๊ณณ์€ ๊นƒ์„ ์ดˆ๊ธฐํ™” ํ–ˆ์„ ๋•Œ ๋งŒ๋“ค์–ด์ง€๋Š” .git ๋””๋ ‰ํ„ฐ๋ฆฌ ์•ˆ์— ์ˆจ์€ ํŒŒ์ผ ํ˜•ํƒœ๋กœ ์กด์žฌํ•˜๋Š” ์˜์—ญ

 


 

๐ŸŽ‡๊นƒ์— ์ปค๋ฐ‹ํ•˜๊ธฐ

1) hello.txt ํŒŒ์ผ ๋ฌธ์„œ๋ฅผ ์ˆ˜์ •ํ•˜๊ณ  ์ €์žฅํ•˜๋ฉด ๊ทธ ํŒŒ์ผ์€ [์ž‘์—… ํŠธ๋ฆฌ]์— ์žˆ๊ฒŒ ๋œ๋‹ค.

2) ๊ทธ๋ฆฌ๊ณ  ์ˆ˜์ •ํ•œ hello.txt ํŒŒ์ผ์„ ๋ฒ„์ „์œผ๋กœ ๋งŒ๋“ค๊ณ  ์‹ถ์„ ๋•Œ [์Šคํ…Œ์ด์ง€]์— ๋„ฃ๋Š”๋‹ค.

3) ํŒŒ์ผ ์ˆ˜์ •์„ ๋๋‚ด๊ณ  ์Šคํ…Œ์ด์ง€์— ๋‹ค ๋„ฃ์—ˆ๋‹ค๋ฉด ๋ฒ„์ „์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ๊นƒ์—๊ฒŒ '์ปค๋ฐ‹(commit)' ๋ช…๋ น์„ ๋‚ด๋ฆฐ๋‹ค.

4) ์ปค๋ฐ‹ ๋ช…๋ น์„ ๋‚ด๋ฆฌ๋ฉด ์ƒˆ๋กœ์šด ๋ฒ„์ „์ด ์ƒ์„ฑ๋˜๋ฉฐ ์Šคํ…Œ์ด์ง€์— ๋Œ€๊ธฐํ•˜๋˜ ํŒŒ์ผ์ด ์ €์žฅ์†Œ์— ์ €์žฅ๋œ๋‹ค.


๐ŸŽ‡ ์ˆ˜์ •ํ•œ ํŒŒ์ผ์„ ์Šคํ…Œ์ด์ง€์— ์ถ”๊ฐ€ํ•˜๊ธฐ(์Šคํ…Œ์ด์ง•) - git add ์‚ฌ์šฉ

 

add๋กœ ํŒŒ์ผ์„ ์Šคํ…Œ์ด์ง• ํ•˜๊ณ  ๋‚˜๋ฉด changes to be committed : ์ฆ‰ ๊ณง ์ปค๋ฐ‹ํ•  ํŒŒ์ผ์ž„์„ ์•Œ๋ ค์ค€๋‹ค.

 

๐ŸŽ‡ ์Šคํ…Œ์ด์ง€์— ์žˆ๋Š” ํŒŒ์ผ ์ปค๋ฐ‹ํ•˜๊ธฐ - git commit -m"๋ฉ”์„ธ์ง€"

  • ์ปค๋ฐ‹์„ ํ•  ๋•Œ๋Š” ๊ทธ ๋ฒ„์ „์— ์–ด๋–ค ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์žˆ์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ๋ฉ”์‹œ์ง€๋ฅผ ํ•จ๊ป˜ ๊ธฐ๋ก
  • ๋ฉ”์„ธ์ง€ : -m์˜ต์…˜์„ ๋ถ™์—ฌ ๋ฉ”์„ธ์ง€๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.
  • ๋ฐฉ๊ธˆ ์ปค๋ฐ‹ํ•œ ๋ฉ”์„ธ์ง€ ์ˆ˜์ •ํ•˜๊ธฐ - git commit --amend

 

๐ŸŽ‡ ๋ฒ„์ „์ด ์ œ๋Œ€๋กœ ๋งŒ๋“ค์–ด ์กŒ๋Š”์ง€ ํ™•์ธ - git log

  • ์ปค๋ฐ‹ํ•œ ๋ฒ„์ „์— ๋Œ€ํ•œ ์„ค๋ช…์ด ๋‚˜์˜ด(์ปค๋ฐ‹์„ ๋งŒ๋“  ์‚ฌ๋žŒ, ๋งŒ๋“  ์‹œ๊ฐ„, ์ปค๋ฐ‹ ๋ฉ”์„ธ์ง€)

 

๐ŸŽ‡ ์Šคํ…Œ์ด์ง•๊ณผ ์ปค๋ฐ‹ ํ•œ๊บผ๋ฒˆ์— ์ฒ˜๋ฆฌํ•˜๊ธฐ - git commit -am "๋ฉ”์„ธ์ง€"

  • ํ•œ๋ฒˆ์ด๋ผ๋„ ์ปค๋ฐ‹ํ•œ ์ ์ด ์žˆ๋Š” ํŒŒ์ผ์„ ๋‹ค์‹œ ์ปค๋ฐ‹ํ•  ๋•Œ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  • ์ˆ˜์ •๋œ ํŒŒ์ผ์„ ์ €์žฅ ํ›„ ๋‹ค์‹œ ์Šคํ…Œ์ด์ง•+์ปค๋ฐ‹ ์ฒ˜๋ฆฌ
 

๐ŸŽ‡ git log ๋‚ด ์ปค๋ฐ‹ ๋กœ๊ทธ ์‚ดํŽด๋ณด๊ธฐ

  • HEAD -> master : ์ตœ์‹  ๋ฒ„์ „
  • commit ์˜† ์˜๋ฌธ๊ณผ ์ˆซ์ž ๊ธด ๋ฌธ์ž์—ด : ์ปค๋ฐ‹์„ ๊ตฌ๋ณ„ํ•˜๋Š” ์•„์ด๋”” (์ปค๋ฐ‹ ํ•ด์‹œ, ๊นƒ ํ•ด์‹œ)

 

๐ŸŽ‡ ๋ณ€๊ฒฝ ์‚ฌํ•ญ ํ™•์ธํ•˜๊ธฐ - git diff

  • ์ž‘์—…ํŠธ๋ฆฌ <-> ์Šคํ…Œ์ด์ง€, ์Šคํ…Œ์ด์ง€<->repository ๋น„๊ต

 

๐ŸŽ†๋ฒ„์ „์˜ ํŒŒ์ผ ์ƒํƒœ ์•Œ์•„๋ณด๊ธฐ

  • tracked : ๊นƒ์ด ์ถ”์ ํ•˜๊ณ  ์žˆ๋Š” ํŒŒ์ผ, ํ•œ ๋ฒˆ ์ปค๋ฐ‹๋œ ํŒŒ์ผ์€ ๊นƒ์ด ๊ณ„์† ํŒŒ์ผ ์ˆ˜์ • ์—ฌ๋ถ€๋ฅผ ํ‘ธ์ 
  • untracked : ํ•œ๋ฒˆ๋„ ๊นƒ์—์„œ ๋ฒ„์ „ ๊ด€๋ฆฌ๋ฅผ ํ•˜์ง€ ์•Š์•„ ์ˆ˜์ • ๋‚ด์—ญ ์ถ”์ ์ด ๋˜์ง€ ์•Š๋Š” ํŒŒ์ผ

 

๐ŸŽ†๋ฒ„์ „ ๊ด€๋ฆฌ์—์„œ ํŒŒ์ผ ์ œ์™ธํ•˜๊ธฐ

๋ฒ„์ „ ๊ด€๋ฆฌ์ค‘์ธ ๋””๋ ‰ํ„ฐ๋ฆฌ ์•ˆ์—์„œ ๊ด€๋ฆฌํ•˜์ง€ ์•Š์„ ํŠน์ • ํŒŒ์ผ ๋˜๋Š” ๋””๋ ‰ํ„ฐ๋ฆฌ๊ฐ€ ์žˆ๋‹ค๋ฉด .gitignore ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด ๋ชฉ๋ก์„ ์ง€์ •ํ•œ๋‹ค.

ex) ๊ฐœ์ธ์ ์œผ๋กœ ๋ฉ”๋ชจํ•œ ํŒŒ์ผ, ํ”„๋กœ๊ทธ๋žจ ์‚ฌ์šฉ ์ค‘ ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋œ swp ํŒŒ์ผ, ๋ฐฑ์—… ํŒŒ์ผ ๋“ฑ

 

.gitignore ํŒŒ์ผ ์•ˆ์— ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํŒŒ์ผ, ๋””๋ ‰ํ„ฐ๋ฆฌ, ํŠน์ • ํ™•์žฅ์ž์˜ ํŒŒ์ผ์„ ์ ์–ด๋‘๋ฉด ํ•ด๋‹น๋งŒ ๋ฒ„์ „ ๊ด€๋ฆฌ์—์„œ ์ œ์™ธ์‹œํ‚จ๋‹ค.

 

mynote.txt

temp/

.swp

 

-> mynote๋ผ๋Š” ํ…์ŠคํŠธํŒŒ์ผ, temp๋ผ๋Š” ๋””๋ ‰ํ„ฐ๋ฆฌ, swp๋ฅผ ํ™•์žฅ์ž๋กœ ๊ฐ€์ง€๋Š” ๋ชจ๋“  ํŒŒ์ผ์„ ์ œ์™ธ

 

 

๐ŸŽ†๋ฒ„์ „ ๋งŒ๋“œ๋Š” ๋‹จ๊ณ„๋งˆ๋‹ค ํŒŒ์ผ ์ƒํƒœ ์•Œ์•„๋ณด๊ธฐ

- ํ•œ ์ปค๋ฐ‹์— ๋‘๊ฐ€์ง€ ํŒŒ์ผ์„ ์ปค๋ฐ‹ํ•˜๋ฉด์„œ ๋ฉ”์„ธ์ง€๋ฅผ ์ ์—ˆ๋‹ค๋ฉด ๊ทธ ๋ฉ”์„ธ์ง€๋Š” ๋‘ ํŒŒ์ผ ๋ชจ๋‘์— ์ ์šฉ๋œ๋‹ค.

- git log --stat์„ ์ด์šฉํ•˜๋ฉด ์ปค๋ฐ‹ ๋ฉ”์„ธ์ง€์™€ ๊ด€๋ จ๋œ ํŒŒ์ผ์ด ๋‚˜์—ด๋œ๋‹ค.

 

๐ŸŽ†unmodified, modified, staged ์ƒํƒœ

- unmodified : ์ˆ˜์ •๋˜์ง€ ์•Š์€ ์ƒํƒœ (working tree clean)

- modified : ์ˆ˜์ •๋งŒ ๋˜์–ด์žˆ๋Š” ์ƒํƒœ, ์Šคํ…Œ์ด์ง€์— ์˜ฌ๋ผ๊ฐ€์ง€ ์•Š์€ ์ƒํƒœ

- staged : gid add๋กœ ์Šคํ…Œ์ด์ง€์— ์˜ฌ๋ ค์ ธ์žˆ๊ณ , ์ปค๋ฐ‹์ด ๋˜์ง€ ์•Š์€ ์ƒํƒœ (Changes to be committed)

* ์ปค๋ฐ‹์ด ๋๋‚œ ํŒŒ์ผ์€ ๋‹ค์‹œ unmodified๋กœ ๋Œ์•„๊ฐ„๋‹ค.

 

๐ŸŽ†์ž‘์—…ํŠธ๋ฆฌ์—์„œ ์ˆ˜์ •ํ•œ ํŒŒ์ผ ๋˜๋Œ๋ฆฌ๊ธฐ - git checkout/ git restore

hello.txt์˜ ๋‚ด์šฉ์„ ์ˆ˜์ • ํ›„ git status๋ฅผ ํ™•์ธํ•ด๋ณด๋ฉด modified : hello.txt๊ฐ€ ๋‚˜์˜จ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๊ทธ ์œ„์— use "git store <file>..."to discard changes in working directory๋ผ๊ณ  ๋‚˜์™€์žˆ๋‹ค.

git restore hello.txt๋ผ๊ณ  ์ž…๋ ฅํ•˜๋ฉด ๋งˆ์ง€๋ง‰์œผ๋กœ ์ˆ˜์ •ํ–ˆ๋˜ ์‚ฌํ•ญ์ด ์‚ฌ๋ผ์ง„๋‹ค.

 

๐ŸŽ†์Šคํ…Œ์ด์ง• ๋˜๋Œ๋ฆฌ๊ธฐ - git reset HEAD ํŒŒ์ผ ์ด๋ฆ„

hello.txtํŒŒ์ผ์„ ์ˆ˜์ • ํ•œ ํ›„ git add๋กœ ์Šคํ…Œ์ด์ง•ํ•œ๋‹ค.

 

git reset HEAD ํŒŒ์ผ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜๋ฉด 

Unstaged changes after reset์ด๋ผ๋Š” ๋ฉ”์„ธ์ง€๊ฐ€ ๋‚˜์˜จ๋‹ค.

 

๊ทธ ํ›„ ๋‹ค์‹œ git status๋ฅผ ํ™•์ธํ•˜๋ฉด

Changes not staged for commit ์ด๋ผ๋Š” ๋ฉ”์„ธ์ง€๊ฐ€ ๋œจ๋ฉฐ ํŒŒ์ผ์ด ์Šคํ…Œ์ด์ง€ ์˜ฌ๋ผ๊ฐ€๊ธฐ ์ „  ์ƒํƒœ๋กœ ๋Œ์•„์˜จ ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

 

๐ŸŽ†์ปค๋ฐ‹ ๋˜๋Œ๋ฆฌ๊ธฐ - git reset HEAD^^ (cmder์—์„œ๋Š” ^^๋กœ ํ•ด์•ผ  more? ์ด๋ผ๋Š” ์˜ค๋ฅ˜๊ฐ€ ์•ˆ๋‚จ)

- git reset HEAD^^ ๊ฐ€์žฅ ์ตœ๊ทผ์— ํ•œ ์ปค๋ฐ‹์„ ๋˜๋Œ๋ฆฌ๊ธฐ

- git reset (๊ฐ€๊ณ ์žํ•˜๋Š”)์ปค๋ฐ‹ํ•ด์‹œ : ํŠน์ • ์ปค๋ฐ‹์œผ๋กœ ๋˜๋Œ๋ฆฌ๊ธฐ (์ด๋•Œ ํŠน์ • ์ปค๋ฐ‹์ด ๊ฐ€์žฅ ์ตœ๊ทผ ์ปค๋ฐ‹์ด ๋˜๋ฉฐ ๊ทธ ์ดํ›„ ์ˆ˜์ •ํ•œ ๊ฒƒ์€ ์‚ฌ๋ผ์ง)

-git revert (์ทจ์†Œํ•˜๋ ค๋Š”)์ปค๋ฐ‹ํ•ด์‹œ : ์ปค๋ฐ‹ ๋˜๋Œ๋ฆด ๋•Œ ์ทจ์†Œํ•œ ์ปค๋ฐ‹์„ ๋‚จ๊ฒจ๋‘๊ธฐ