๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Git

[Git] git add, git commit, git push ์ทจ์†Œํ•˜๊ธฐ

by JulesJ 2022. 1. 5.
728x90

git์„ ์ด์šฉํ•˜๋ฉด์„œ, ์ž์ฃผ ์‚ฌ์šฉํ•˜๊ธฐ๋„ ํ•˜๊ณ , ์‹ค์ˆ˜๋ฅผ ํ•ด์„œ ์ทจ์†Œํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์ด ์ƒ๊ธฐ๋Š”

git add, git commit, git push ๋ช…๋ น์–ด๋ฅผ ์ทจ์†Œํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ •๋ฆฌํ–ˆ๋‹ค.

์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, ์ž์ฃผ ์žŠ์–ด๋ฒ„๋ ค์„œ ๋‚ด๊ฐ€ ๋ณด๊ธฐ ํŽธํ•œ ๊ณณ์œผ๋กœ ์ •๋ฆฌํ•ด๋ณด์•˜๋‹ค.

 

(1) git add ์ทจ์†Œํ•˜๊ธฐ

- ํŒŒ์ผ ์ƒํƒœ๋ฅผ Stage -> Unstage๋กœ ๋ณ€๊ฒฝํ•˜๊ธฐ

 

1. git add . : ๋ชจ๋“  ํŒŒ์ผ์„ Staged ์ƒํƒœ๋กœ ๋ฐ”๊พผ๋‹ค.

(. ์ž๋ฆฌ์— ํŒŒ์ผ๋ช…์„ ์ž…๋ ฅํ•˜๋ฉด ํ•ด๋‹น ํŒŒ์ผ๋งŒ Staged ์ƒํƒœ๋กœ ๋ณ€๊ฒฝ๋œ๋‹ค.)

 

// ๋ชจ๋“  ํŒŒ์ผ์ด Staged ์ƒํƒœ๋กœ ๋ฐ”๋€๋‹ค.
$ git add .

 

 

* git status : ํŒŒ์ผ๋“ค์˜ ์ƒํƒœ๋ฅผ ํ™•์ธํ•˜๋Š” ๋ช…๋ น์–ด์ด๋‹ค.

ํŒŒ์ผ์ด stage ์ƒํƒœ์ธ์ง€, unstage ์ƒํƒœ์ธ์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋„๋ก ์•Œ๋ ค์ค€๋‹ค.

์•„๋ž˜ ์ฝ”๋“œ์—์„œ (use "git restore --staged <file>..." to unstage)๋ถ€๋ถ„์ฒ˜๋Ÿผ

unstage๋ฅผ ํ•˜๋ ค๋ฉด ์ด์šฉํ•˜๋ฉด ์ข‹์€ ๋ช…๋ น์–ด๋„ ํ•จ๊ป˜ ์•ˆ๋‚ด๋˜๊ธฐ๋„ ํ•œ๋‹ค.

// ํŒŒ์ผ๋“ค์˜ ์ƒํƒœ ํ™•์ธ
$ git status
On branch main
Your branch is up to date with 'origin/main'.

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)

 

 

2. git reset HEAD [file] ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด git add ๋ช…๋ น์„ ์ทจ์†Œํ•  ์ˆ˜ ์žˆ๋‹ค.

ํŒŒ์ผ๋ช…์„ ์ ์œผ๋ฉด ํ•ด๋‹น ํŒŒ์ผ์„ Unstaged ์ƒํƒœ๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค.

$ git reset HEAD README.md

๋’ค์— ํŒŒ์ผ๋ช…์ด ์—†์œผ๋ฉด addํ•œ ํŒŒ์ผ ์ „์ฒด๋ฅผ ์ทจ์†Œํ•œ๋‹ค.

 

 

3. git restore : git ๋ฒ„์ „ 2.23๋ถ€ํ„ฐ ์Šคํ…Œ์ด์ง• ๋˜๋Œ๋ฆฌ๊ธฐ ๋ช…๋ น์–ด๊ฐ€ ๋ณ€๊ฒฝ๋œ ๊ฒƒ.

git add๋ฅผ ์ด์šฉํ•ด์„œ stage์— ์˜ฌ๋ผ๊ฐ„ ํŒŒ์ผ๋“ค์„ ๋‹ค์‹œ unstage๋กœ ๋Œ๋ฆฌ๋Š” ๋ช…๋ น์–ด์ด๋‹ค.

ex. git reset HEAD README.md -> git restore --staged README.md

 

(2) git commit ์ทจ์†Œํ•˜๊ธฐ

- commit์„ ์ทจ์†Œํ•˜๋Š” ๋ฐฉ๋ฒ•

 

 

1. git log : ๊ทธ๋™์•ˆ์˜ ์ปค๋ฐ‹ ๋ชฉ๋ก์„ ์ตœ๊ทผ ๊ธฐ๋ก ์ˆœ์„œ๋กœ ํ•œ๋ˆˆ์— ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

๋จผ์ €, commit ๋ชฉ๋ก์„ ํ™•์ธํ•œ๋‹ค.

$ git log // ์ปค๋ฐ‹ ๋ชฉ๋ก ํ™•์ธ

 

 

2. git reset : commit ์ทจ์†Œํ•˜๊ธฐ

 

๋ฐฉ๋ฒ• 1. --soft ์˜ต์…˜

commit์„ ์ทจ์†Œํ•˜๊ณ  ํ•ด๋‹น ํŒŒ์ผ๋“ค์€ staged ์ƒํƒœ๋กœ ์›Œํ‚น ๋””๋ ‰ํ„ฐ๋ฆฌ์— ๋ณด์กด

$ git reset --soft HEAD^

 

๋ฐฉ๋ฒ• 2. --mixed ์˜ต์…˜

commit์„ ์ทจ์†Œํ•˜๊ณ  ํ•ด๋‹น ํŒŒ์ผ๋“ค์€ unstaged ์ƒํƒœ๋กœ ์›Œํ‚น ๋””๋ ‰ํ„ฐ๋ฆฌ์— ๋ณด์กด

$ git reset --mixed HEAD^ // ๊ธฐ๋ณธ ์˜ต์…˜
$ git reset HEAD^ // ์œ„์™€ ๋™์ผ
$ git reset HEAD~2 // ๋งˆ์ง€๋ง‰ 2๊ฐœ์˜ commit์„ ์ทจ์†Œ

 

๋ฐฉ๋ฒ• 3. --hard ์˜ต์…˜

commit์„ ์ทจ์†Œํ•˜๊ณ  ํ•ด๋‹น ํŒŒ์ผ๋“ค์€ unstaged ์ƒํƒœ๋กœ ์›Œํ‚น ๋””๋ ‰ํ„ฐ๋ฆฌ์—์„œ ์‚ญ์ œํ•˜๋Š” ๋ฐฉ๋ฒ•

$ git reset --hard HEAD^

 

* commit message ๋ณ€๊ฒฝํ•˜๊ธฐ

git commit –amend : git commit message๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.

commit message๋งŒ ๋ณ€๊ฒฝํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

git commit --amend

 

reset ์˜ต์…˜ ์ •๋ฆฌ

  • -soft : index ๋ณด์กด(addํ•œ ์ƒํƒœ, staged ์ƒํƒœ), ์›Œํ‚น ๋””๋ ‰ํ„ฐ๋ฆฌ์˜ ํŒŒ์ผ ์ „๋ถ€ ๋ณด์กด.
  • -mixed : ๊ธฐ๋ณธ ์˜ต์…˜ | index ์ทจ์†Œ(addํ•˜๊ธฐ ์ „ ์ƒํƒœ, unstaged ์ƒํƒœ), ์›Œํ‚น ๋””๋ ‰ํ„ฐ๋ฆฌ์˜ ํŒŒ์ผ ๋ณด์กด.
  • -hard : index ์ทจ์†Œ(addํ•˜๊ธฐ ์ „ ์ƒํƒœ, unstaged ์ƒํƒœ), ์›Œํ‚น ๋””๋ ‰ํ„ฐ๋ฆฌ์˜ ํŒŒ์ผ ์‚ญ์ œ. ์ „๋ถ€ ์ทจ์†Œ. -> ๋”ฐ๋ผ์„œ hard ์˜ต์…˜์€ ์ฃผ์˜ํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

ex. ์•„๋ž˜์™€ ๊ฐ™์ด hard ์˜ต์…˜์„ ์ด์šฉํ•  ๊ฒฝ์šฐ ์›Œํ‚น ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์›๊ฒฉ ์ €์žฅ์†Œ์˜ ๋งˆ์ง€๋ง‰ commit ์ƒํƒœ๋กœ ๋˜๋Œ๋ฆฐ๋‹ค.

๋ญ”๊ฐ€ ์ž˜๋ชป๋œ ๋ถ€๋ถ„์ด ์žˆ์„ ๋•Œ ๋˜๋Œ๋ฆฌ๊ณ  ์‹ถ์–ด์„œ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด ์•ˆ์ „ํ•˜๊ฒŒ ์ด์ „ commit์œผ๋กœ ๋Œ์•„๊ฐˆ ์ˆ˜๋Š” ์žˆ์ง€๋งŒ,

๊ทธ ๋Œ€์‹  ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ๋Œ€๋กœ ํ•ด๋‹น commit ์ด์ „์— ์ž‘์—…ํ•˜๋˜ ๋ชจ๋“  ํŒŒ์ผ ๋‚ด์šฉ์ด ๋‚ ๋ผ๊ฐ„๋‹ค.

git reset --hard HEAD

 

(3) git push ์ทจ์†Œํ•˜๊ธฐ

commit์„ ์›ํ•˜๋Š” ์‹œ์ ์œผ๋กœ ๋˜๋Œ๋ ค ๋‹ค์‹œ pushํ•ด์„œ, ์›ํ•˜์ง€ ์•Š์•˜๋˜ ๋ถ€๋ถ„์„ ์—†์• ๋ฉด์„œ ๊ฐ•์ œ๋กœ ๋ฎ์–ด์“ฐ๊ธฐ๋ฅผ ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

 

์ฃผ์˜ํ•  ์ 

  • ์ž์‹ ์˜ local์˜ ๋‚ด์šฉ์„ remote์— ๊ฐ•์ œ๋กœ ๋ฎ์–ด์“ฐ๊ธฐ๋ฅผ ํ•˜๋Š” ๊ฒƒ
  • ๋˜๋Œ์•„๊ฐ„ commit ์ดํ›„์˜ ๋ชจ๋“  commit ์ •๋ณด๊ฐ€ ์‚ฌ๋ผ์ง„๋‹ค.
  • ํŠนํžˆ, ํ˜‘์—… ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ๋™๊ธฐํ™” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

 

1-1. ๊ฐ€์žฅ ์ตœ๊ทผ commit์„ ์ทจ์†Œํ•˜๊ณ  ์›Œํ‚น ๋””๋ ‰ํ† ๋ฆฌ์—์„œ commit์„ ๋˜๋Œ๋ฆฐ๋‹ค.

// ๊ฐ€์žฅ ์ตœ๊ทผ commit ์ทจ์†Œ (๊ธฐ๋ณธ ์˜ต์…˜: --mixed)
$ git reset HEAD^

 

1-2. ํŠน์ • commit์œผ๋กœ ๋Œ์•„๊ฐ€์„œ ์ง„ํ–‰ํ•˜๋ ค๋ฉด ์›ํ•˜๋Š” ์‹œ์ ์œผ๋กœ ์›Œํ‚น ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ๋˜๋Œ๋ฆฐ๋‹ค.

// git ์ด๋ ฅ ํ™•์ธ
$ git reflog ๋˜๋Š” $ git log -g

// ์›ํ•˜๋Š” ์‹œ์ ์˜ commit ์œผ๋กœ reset
$ git reset HEAD@{number} ๋˜๋Š” $ git reset [commit id]

 

2. ๋˜๋Œ๋ ค์ง„ ์ƒํƒœ์—์„œ ๋‹ค์‹œ ์ƒˆ๋กญ๊ฒŒ commit์„ ํ•œ๋‹ค.

git commit -m "New Commit messages"

 

3. ์›๊ฒฉ ์ €์žฅ์†Œ์— ๊ฐ•์ œ๋กœ push ํ•œ๋‹ค.

-f ์˜ต์…˜(=-force)์ด๋‚˜ +๋ฅผ ์ด์šฉํ•œ๋‹ค.

git push origin +[branch name]

or

git push origin [branch name] -f

 

ex. main ๋ธŒ๋žœ์น˜๋ฅผ ์›๊ฒฉ ์ €์žฅ์†Œ์— ๊ฐ•์ œ๋กœ push ํ•˜๊ธฐ

$ git push origin +main

 

(4) untracked ํŒŒ์ผ ์‚ญ์ œํ•˜๊ธฐ

git clean : .gitignore ์— ๋ช…์‹œํ•˜์—ฌ ์ œ์™ธ๋˜๋Š” ํŒŒ์ผ์„ ์ œ์™ธํ•˜๊ณ  ์ถ”์ ์ค‘์ด์ง€ ์•Š์€ ํŒŒ์ผ๋งŒ ์ง€์šด๋‹ค.

// ํŒŒ์ผ๋“ค๋งŒ ์‚ญ์ œ (๋””๋ ‰ํ„ฐ๋ฆฌ ์ œ์™ธ)
$ git clean -f 

// -d : ๋””๋ ‰ํ„ฐ๋ฆฌ๊นŒ์ง€ ์‚ญ์ œ
$ git clean -f -d 

// -x : ๋ฌด์‹œ๋œ ํŒŒ์ผ๊นŒ์ง€ ์‚ญ์ œ
$ git clean -f -d -x 

// -n : ๊ฐ€์ƒ์œผ๋กœ ์‹คํ–‰ํ•ด๋ณด๊ณ  ์–ด๋–ค ํŒŒ์ผ๋“ค์ด ์ง€์›Œ์งˆ์ง€ ์•Œ๋ ค์ฃผ๋Š” ๊ฒƒ

 

References

 

 

๋๐Ÿง

'Git' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Github] Github ํ† ํฐ ์ธ์ฆ  (0) 2021.08.17

๋Œ“๊ธ€