ใDo it! ๊น & ๊นํ๋ธ ์ ๋ฌธใ 2์ฅ. ๊น์ผ๋ก ๋ฒ์ ๊ด๋ฆฌํ๊ธฐ
๋ฅผ ์ฐธ๊ณ ํ์์ต๋๋ค
๋ชฉ์ฐจ2-3 ์ปค๋ฐ ๋ด์ฉ ํ์ธํ๊ธฐ
2-4 ๋ฒ์ ๋ง๋๋ ๋จ๊ณ๋ง๋ค ํ์ผ ์ํ ์์๋ณด๊ธฐ
2-1 ๊น ์ ์ฅ์ ๋ง๋ค๊ธฐ
์ ์ฅ์(repository)
: ๋ฒ์ ์ด ์ ์ฅ๋๋ ๊ณต๊ฐ
1. ์๋ก์ด ๋๋ ํฐ๋ฆฌ ๋ง๋ค๊ธฐ
$ git init
'initialize(์ด๊ธฐํํ๋ค)
'Initialized empty Git repository in...' ๋ผ๋ ๋ฉ์์ง ๋์์ผ๋ฉด ์ด์ ๋ถํฐ ํด๋น ๋๋ ํฐ๋ฆฌ์์ ๊น ์ฌ์ฉ ๊ฐ๋ฅ
์ดํ ๋ค์ ls -la ํด๋ณด๋ฉด?
git ๋๋ ํฐ๋ฆฌ๊ฐ ์๊น!
์ด ํด๋๊ฐ ๊น์ ์ฌ์ฉํ๋ฉด์ ๋ฒ์ ์ด ์ ์ฅ๋ '์ ์ฅ์(repository)'
*Finder์์ hello-git ๋๋ ํฐ๋ฆฌ๋ฅผ ์ด์์ ๋ .git ๋๋ ํฐ๋ฆฌ๊ฐ ํ๋ฉด์ ๋ํ๋์ง ์์
์ค์๋ก .git ๋๋ ํฐ๋ฆฌ๋ฅผ ์ง์ฐ์ง ์๋๋ก ์จ๊ฒจ์ ธ ์๊ธฐ ๋๋ฌธ.
๋งฅ : Shift + Command + . ์ ๋๋ฌ ์จ๊ฒจ์ง ํ์ผ ํ์ธ
2-2 ๋ฒ์ ๋ง๋ค๊ธฐ
'๋ฒ์ ' : ํ๋ก๊ทธ๋จ ๊ฐ๋ฐ์์๋ ์์ ๋ด์ฉ์ด ์์ด๋ฉด ์๋ก ๋ฒํธ๋ฅผ ๋ถ์ฌ์ ์ด์ ์ํ์ ๊ตฌ๋ณํจ.
๊น์์๋ ๋ฌธ์๋ฅผ ์์ ํ ๋๋ง๋ค ๋ฒ์ ์ ๋ง๋ค๋ฉด์ ์ด์ ์ํ์ ๊ตฌ๋ณํจ.
ํ์ผ์ ๋ค๋ฅธ ์ด๋ฆ์ผ๋ก ์ ์ฅํด ๋ฒ์ ์ ๋ง๋๋ ๋ฐฉ๋ฒ๋ณด๋ค ํจ์ฌ ์ฝ๊ฒ ๋ฒ์ ์ ๋ง๋ค๊ณ ,
๋ํ ๋ฒ์ ์ ๋ง๋ ์๊ฐ๊ณผ ์์ ๋ด์ฉ๊น์ง ๊ธฐ๋กํ ์ ์๋ ๊ฒ์ด ๊น๊ณผ ๊ฐ์ ๋ฒ์ ๊ด๋ฆฌ ์์คํ .
์๋ ํ์ผ ์ด๋ฆ์ ๊ทธ๋๋ก ์ ์งํ๋ฉด์
ํ์ผ์์ ๋ฌด์์ ๋ณ๊ฒฝํ๋์ง, ๋ณ๊ฒฝ์์ ๋ง๋ค ์ ์ฅ ๊ฐ๋ฅ
๋ฒ์ ๋ง๋ค ์์ ํ ๋ด์ฉ ํ์ธํ ์ ์๊ณ , ๊ทธ ๋ฒ์ ์ผ๋ก ๋๋๋ฆด ์๋ ์๋ค.
์คํ ์ด์ง์ ์ปค๋ฐ
์์ ํธ๋ฆฌ(working tree) : =์์ ๋๋ ํฐ๋ฆฌ(working directory). ํ์ผ ์์ , ์ ์ฅ ๋ฑ์ ์์ ์ ํ๋ ๋๋ ํฐ๋ฆฌ. ์์์ ๋ง๋ค์๋ git ๋๋ ํฐ๋ฆฌ! ์ฐ๋ฆฌ ๋์ ๋ณด์ด๋ ๋๋ ํฐ๋ฆฌ.
์คํ ์ด์ง(stage) : =์คํ ์ด์ง ์์ญ(staging area). ๋ฒ์ ์ผ๋ก ๋ง๋ค ํ์ผ์ด ๋๊ธฐํ๋ ๊ณณ.
ex ) ์์ ํธ๋ฆฌ์์ ํ์ผ 10๊ฐ๋ฅผ ์์ ํ๋๋ฐ, 4๊ฐ๋ง ๋ฒ์ ์ผ๋ก ๋ง๋ค๋ ค๋ฉด
ํด๋น ํ์ผ 4๊ฐ๋ง ์คํ ์ด์ง๋ก ๋๊ฒจ์ค
์ ์ฅ์(repository) : ์คํ ์ด์ง์์ ๋๊ธฐํ๊ณ ์๋ ํ์ผ๋ค์ ๋ฒ์ ์ผ๋ก ๋ง๋ค์ด ์ ์ฅํ๋ ๊ณณ.
์คํ ์ด์ง์ ์ ์ฅ์๋ ๋์ ๋ณด์ด์ง ์์. .git ๋๋ ํฐ๋ฆฌ ์์ ์จ์ ํ์ผ ํํ๋ก ์กด์ฌํจ.
์์ ํธ๋ฆฌ์์ ๋ฌธ์ ์์ -> ๋ฒ์ ์ผ๋ก ๋ง๋ค๊ณ ์ถ์ ๊ฒ์ ์คํ ์ด์ง์ ์ ์ฅ -> ์คํ ์ด์ง ํ์ผ์ ์ ์ฅ์๋ก ์ปค๋ฐ(commit)
์์ ํธ๋ฆฌ์์ ๋ฌธ์ ์์ ํ๊ธฐ
$ git status
๊น ์ํ๋ฅผ ํ์ธ
On branch main : ํ์ฌ main ๋ธ๋์น์ ์๋ค.
No commits yet : ์์ง ์ปค๋ฐํ ํ์ผ์ด ์๋ค
nothing to commit : ํ์ฌ ์ปค๋ฐํ ํ์ผ์ด ์๋ค
๊ฐ๋จํ๊ฒ vim hello.txt๋ก ํ ์คํธ ํ์ผ ์์ ํ ์คํธ ์ ๋ ฅ ํ ls -la ํ๋ฉด
์๋์ ๊ฐ์ด hello.txt ํ์ผ์ด ๋๋ ํฐ๋ฆฌ ์์ ๋ง๋ค์ด์ง ๊ฒ์ ํ์ธํ ์ ์์
์ด ์ํ์์ ๋ค์ git status ํ๋ฉด
Untracked files : hello.txt
branch main ์ hello.txt๋ผ๋ untracked files ์ด ์๋ค!
* untracked files : (๊น์์) ๋ฒ์ ์ ์์ง ํ ๋ฒ๋ ๊ด๋ฆฌํ์ง ์์ ํ์ผ
์์ ํ ํ์ผ์ ์คํ ์ด์ง์ ์ฌ๋ฆฌ๊ธฐ — git add
์คํ ์ด์ง(staging) / ์คํ ์ด์ง์ ์ฌ๋ฆฐ๋ค
: ๊น์๊ฒ ๋ฒ์ ๋ง๋ค ์ค๋น๋ฅผ ํ๋ผ๊ณ ์๋ ค์ฃผ๋ ๊ฒ
*'์ธ๋ฑ์ค(index)์ ๋ฑ๋กํ๋ค' ๋ผ๊ณ ๋ ํจ (.git/index ํ์ผ์ ์ ์ฅ๋๋ฏ๋ก)
1. $ git add hello.txt ์ ๋ ฅ
2. $ git status ์ ๋ ฅ (๊น ์ํ ํ์ธ)
3.
Changes to be commited:
new file:
'์ ํ์ผ hello.txt๋ฅผ (์์ผ๋ก) ์ปค๋ฐํ ๊ฒ์ด๋ค.'
์คํ ์ด์งํ ํ์ผ ์ปค๋ฐํ๊ธฐ — git commit
์ปค๋ฐ(commit) ํ๋ค : (๊น์์) ๋ฒ์ ์ ๋ง๋๋ ๊ฒ
ํ์ผ์ด ์คํ ์ด์ง ์์ญ์ ์์ผ๋ฉด ๋ฒ์ ์ ๋ง๋ค ์ ์๋ค.
์ปค๋ฐํ ๋๋ ๋ฒ์ ์ ๋ณ๊ฒฝ ์ฌํญ์ ํ์ธํ ์ ์๋๋ก ๋ฉ์์ง๋ฅผ ํจ๊ป ๊ธฐ๋กํด์ผ ํจ
1.
$ git commit -m "์ปค๋ฐ ๋ฉ์์ง"
$ git commit : ํ์ผ ์ปค๋ฐ ๋ช ๋ น
-m : (message). ์ปค๋ฐ ๋ฉ์์ง๋ ์๋ฌธ๊ณผ ํ๊ธ ๋ชจ๋ ์ฌ์ฉํ ์ ์๋ค
1 file changed : ํ์ผ 1๊ฐ๊ฐ ๋ณ๊ฒฝ๋์๊ณ
1 insertion(+) : ํ์ผ์ 1๊ฐ์ ๋ด์ฉ์ด ์ถ๊ฐ๋์๋ค
-> ์คํ ์ด์ง์ ์๋ hello.txt ํ์ผ์ด ์ ์ฅ์์ ์ถ๊ฐ๋ ๊ฒ!
๋ค์ git ์ํ ํ์ธํด๋ณด๋ฉด
nothing to commit, working tree clean
๋ฒ์ ์ผ๋ก ๋ง๋ค ํ์ผ์ด ์๊ณ , ์์ ํธ๋ฆฌ๋ ์์ ์ฌํญ ์์ด ๊นจ๋ํ๋ค
$ git log
: ์ ์ฅ์์ ์ ์ฅ๋ ๋ฒ์ ํ์ธ
๋ฐฉ๊ธ ์ปค๋ฐํ ๋ฒ์ ์ ์ค๋ช ํ๋ ์ ๋ณด๊ฐ ๋์ด. ์ปค๋ฐ์ ๋ง๋ ์ฌ๋(Author), ์๊ฐ(Date), ์ปค๋ฐ๋ฉ์์ง
์คํ ์ด์ง๊ณผ ์ปค๋ฐ ํ๊บผ๋ฒ์ ์ฒ๋ฆฌ — git commit -am
๋จ, ํ ๋ฒ์ด๋ผ๋ ์ปค๋ฐํ ์ ์ด ์๋ ํ์ผ์ ๋ค์ ์ปค๋ฐํ ๋๋ง ์ฌ์ฉ ๊ฐ๋ฅ
-am : -a(all), -m(message)๋ฅผ ๋ฌถ์ ๊ฒ. -a -m ์ฒ๋ผ ๋ฐ๋ก ์จ๋ ๋จ
2-3 ์ปค๋ฐ ๋ด์ฉ ํ์ธํ๊ธฐ
์ปค๋ฐ ๊ธฐ๋ก ์์ธํ ์ดํด๋ณด๊ธฐ — git log
์ปค๋ฐ ๋ก๊ทธ : git log ๋ช ๋ น์ ์ ๋ ฅํ์ ๋ ๋์ค๋ ์ ๋ณด๋ค์ ๋ฌถ์
- ์ปค๋ฐ ํด์(commit hash) or ๊น ํด์(git hash)
: commit ํญ๋ชฉ ์ ์๋ฌธ๊ณผ ์ซ์๋ก ๋ ๊ธด ๋ฌธ์์ด. ์ปค๋ฐ์ ๊ตฌ๋ณํ๋ ์์ด๋
- (Head -> main) : ์ด ๋ฒ์ ์ด ๊ฐ์ฅ ์ต์ ์ด๋ผ๋ ๋ป
- ์์ฑ์, ๋ฒ์ ๋ง๋ ๋ ์ง, ์ปค๋ฐ๋ฉ์์ง
๋ณ๊ฒฝ ์ฌํญ ํ์ธํ๊ธฐ — git diff
์์ ํธ๋ฆฌ์ ์๋ ํ์ผ๊ณผ ์คํ ์ด์ง์ ์๋ ํ์ผ์ ๋น๊ตํ๊ฑฐ๋,
์คํ ์ด์ง์ ์๋ ํ์ผ๊ณผ ์ ์ฅ์์ ์๋ ์ต์ ์ปค๋ฐ์ ๋น๊ตํด์ ์์ ํ ํ์ผ์ ์ปค๋ฐํ๊ธฐ ์ ์ ์ต์ข ๊ฒํ
-, +
'2'๊ฐ ์ญ์ ๋๊ณ 'two'๊ฐ ์ถ๊ฐ๋์๋ค!
2-4 ๋ฒ์ ๋ง๋๋ ๋จ๊ณ๋ง๋ค ํ์ผ ์ํ ์์๋ณด๊ธฐ
๊น์์๋ ๋ฒ์ ์ ๋ง๋๋ ๋จ๊ณ๋ง๋ค ํ์ผ ์ํ๊ฐ ๋ฌ๋ผ์ง
ํ์ผ ์ํ๋ฅผ ์ดํดํ๋ฉด ๋ฒ์ ๊ด๋ฆฌ์ ์ฌ๋ฌ ๋จ๊ณ ์ค ์ด๋์ ํด๋นํ๋์ง, ๊ทธ ์ํ์์ ์ด๋ค ์ผ์ ํ ์ ์๋์ง ์ ์ ์์
ํ์ง๋ง ํ์ผ ์ํ๋ ๋์ ๋ณด์ด๋ ๊ฒ์ด ์๋๋ค.
tracked ํ์ผ / untracked ํ์ผ
git status ๋ช ๋ น ์ฌ์ฉํ๋ฉด
ํ๋ฉด์ ํ์ผ ์ํ์ ๊ด๋ จ๋ ์ฌ๋ฌ ๋ฉ์์ง๊ฐ ๋ํ๋จ
Changes not staged for commit : ๋ณ๊ฒฝ๋ ํ์ผ์ด ์์ง ์คํ ์ด์ง์ ์ฌ๋ผ๊ฐ์ง ์์๋ค
modified: hello.txt
tracked ํ์ผ : ๊น์ ํ ๋ฒ์ด๋ผ๋ ์ปค๋ฐํ ํ์ผ์ ๊ณ์ํด์ ์์ ์ฌํญ์ด ์๋์ง ์ถ์ ํจ. ๊น์ด ์ถ์ ํ๊ณ ์๋ ํ์ผ
untracked ํ์ผ:
hello2.txt ํ์ผ ์์๋ ์๋ฌด ๊ฒ๋ ์๊ณ , untracked files:๋ผ๊ณ ๋์ด์์.
ํ ๋ฒ๋ ์ปค๋ฐํ์ง ์์์ผ๋ฏ๋ก ์์ ๋ด์ญ์ ์ถ์ ํ์ง ์์ ๊ฒ
git add๋ฅผ ํตํด ์คํ ์ด์ง์ ์ฌ๋ฆฐ ํ ํ์ธํด๋ณด๋ฉด
*git add ๋ช ๋ น ๋ค์ ํ์ผ ์ด๋ฆ ๋์ ๋ง์นจํ(.)๋ฅผ ๋ถ์ด๋ฉด, ์์ ํธ๋ฆฌ์์ ์์ ํ ํ์ผ๋ค์ ํ๊บผ๋ฒ์ ์คํ ์ด์ง์ ์ฌ๋ฆด ์ ์๋ค!
๋ง์ง๋ง ๋ฒ์ ์ดํ ์์ ํ ๊ฑด modified:๋ก, ํ๋ฒ๋ ๋ฒ์ ๊ด๋ฆฌ ํ์ง ์์ ๊ฑด new file: ๋ก ํ์.
์ดํ ์ปค๋ฐ, ์ปค๋ฐ ํ ๋ก๊ทธ ํ์ธ.
๊ฐ ์ปค๋ฐ์ ์ด๋ค ํ์ผ์ด ๊ด๋ จ๋์๋์ง ์ ์ ์๋ค.
์ปค๋ฐ๊ณผ ๊ด๋ จ๋ ํ์ผ๊น์ง ํจ๊ป ์ดํด๋ณด๋ ค๋ฉด
$ git log --stat
--stat
statics(ํต๊ณ)์ ์ค์๋ง. ๋ถ์ํ(-) 2๊ฐ ์ฌ์ฉํ๋ฉฐ ์ปค๋ฐ๊ณผ ๊ด๋ จ๋ ์ฌ๋ฌ ํต๊ณ ๋ณด์ฌ์ค
๊ฐ์ฅ ์ต๊ทผ ์ปค๋ฐ๋ถํฐ ์์๋๋ก ์ปค๋ฐ ๋ฉ์์ง์ ๊ด๋ จ๋ ํ์ผ์ด ๋์ด๋จ.
messgae3 ์ปค๋ฐ์ hello.txt, hello2.txt ํ์ผ๊ณผ ๊ด๋ จ ์๊ณ ,
message2๋ hello.txt ํ์ผ๊ณผ ๊ด๋ จ์๋ค๋ ๊ฑฐ ํ์ธ ๊ฐ๋ฅ
ํฐ๋ฏธ๋ ์ฐฝ์ ๋นํด ๊น ๋ก๊ทธ๊ฐ ๋๋ฌด ๊ธธ ๊ฒฝ์ฐ, ํ ํ๋ฉด์ฉ ๋๋์ด ๋ณด์ฌ์ค.
enter๋ฅผ ๋๋ฅด๋ฉด ๋ค์ ๋ก๊ทธ ํ๋ฉด์์ ๋ณผ ์ ์๊ณ , q๋ฅผ ๋๋ฅด๋ฉด ๋ก๊ทธ ํ๋ฉด์์ ๋น ์ ธ๋์ ๊น ๋ช ๋ น ์ ๋ ฅ ๊ฐ๋ฅ
.gitignore ํ์ผ๋ก ๋ฒ์ ๊ด๋ฆฌ์์ ์ ์ธํ๊ธฐ
vim์ผ๋ก .gitignore ํ์ผ ๋ง๋ ํ, ๊ทธ ์์ ๋ฒ์ ๊ด๋ฆฌํ์ง ์์ ํ์ผ, ๋๋ ํฐ๋ฆฌ์ด๋ฆ, ๋๋ ํ์ผ ํ์ฅ์ ์ ๋ ฅ
$ vim .gitignore
unmodified, modified, stage ์ํ
1. ls -la ๋ช ๋ น์ ์ฌ์ฉํด hello-git ๋๋ ํฐ๋ฆฌ ๋ณด๋ฉด
Changes not stage for commit
ํ์ผ์ด ์์ ๋ง ๋ modified ์ํ
git add ๋ช ๋ น์ ์ฌ์ฉํด ์คํ ์ด์ง์ ์ฌ๋ฆฌ๊ณ git status
Changes to be committed: ์ปค๋ฐํ ๋ณ๊ฒฝ์ฌํญ์ด ์๋ค๊ณ ํจ
์ฆ, stage ์ํ
์คํ ์ด์ง์ ์๋ ํ์ผ ์ปค๋ฐํ๊ณ git status
nothing to commit, working tree clean
์ปค๋ฐ์ ๋๋ด๊ณ ๋๋ฉด ํ์ผ ์ํ๋ unmodified ์ํ๋ก ๋์๊ฐ
untracked -> unmodified -(ํ์ผ ์์ ) -> modified -(์คํ ์ด์ง)-> staged-(์ปค๋ฐ)-> unmodified
$ git commit --amend
์ต๊ทผ ์ปค๋ฐ ๋ฉ์์ง ์์
--amend : ๋ฎ์ด์ฐ๊ธฐ ์ํ ์ต์ .
i ๋ฅผ ๋๋ฌ ๋ฉ์์ง ์์ ,
์์ ๋๋๋ฉด ex ๋ชจ๋๋ก ๋์๊ฐ ์ ์ฅํ๊ณ ์ข ๋ฃ(:wq)
์ปค๋ฐ ๋ฉ์์ง๊ฐ ์์ ๋๋ฉด์ ์ด์ ์ปค๋ฐ์ ๋ํด์ง
2-5 ์์ ๋๋๋ฆฌ๊ธฐ
์์ ํธ๋ฆฌ์์ ์์ ํ ํ์ผ ๋๋๋ฆฌ๊ธฐ — git restore
ํ์ผ ์์ ํ์ ๋ ์คํ ์ด์ง ํ์ง ์์ ์ํ์์ ๋๋๋ฆฌ๊ธฐ
git restore ์คํ ํ cat ๋ช ๋ น์ ํตํด ํ์ผ ๋ด์ฉ ํ์ธํ๋ฉด
์์ ๋ด์ฉ์ด ์ฌ๋ผ์ง ๊ฒ ํ์ธ ๊ฐ๋ฅ.
์คํ ์ด์ง ๋๋๋ฆฌ๊ธฐ — git restore --staged
์์ ๋ ํ์ผ์ ์คํ ์ด์ง๊น์ง ํ์ ๋ ์คํ ์ด์ง ์ทจ์ํ๊ธฐ
์คํ ์ด์ง์์ ๋ด๋ฆฌ๋ ค๋ฉด(to unstage) git restore --staged <file> ๋ช ๋ น์ ์ฌ์ฉํด๋ผ!
git restore --staged
--staged ์ต์ ๋ง ์ฌ์ฉํ๋ฉด ์คํ ์ด์ง์ ์๋ ๋ชจ๋ ํ์ผ ํ๊บผ๋ฒ์ ๋๋๋ฆฌ๊ธฐ
--staged ํ์ผ๋ช ๋ถ์ด๋ฉด ํด๋น ํ์ผ๋ง ๊ณจ๋ผ์ ๋๋๋ฆผ
git restore --staged hello2.txt ์คํํ๊ณ git status๋ก ํ์ผ ์ํ ํ์ธํ๋ฉด
์คํ ์ด์ง ์ฌ๋ผ๊ฐ๊ธฐ ์ (not staged)๋ก ๋์์จ ๊ฒ์ ํ์ธํ ์ ์๋ค.
์ต์ ์ปค๋ฐ ๋๋๋ฆฌ๊ธฐ — git reset HEAD^
์์ ๋ ํ์ผ์ ์คํ ์ด์งํ๊ณ ์ปค๋ฐ๊น์ง ํ์ ๋, ๊ฐ์ฅ ๋ง์ง๋ง์ ํ ์ปค๋ฐ ์ทจ์ํ๋ ๋ฐฉ๋ฒ
์ปค๋ฐ ์ทจ์ํ๋ฉด ์ปค๋ฐ๊ณผ ์คํ ์ด์ง์ด ํจ๊ป ์ทจ์๋จ.
์ด ์ํ์์ ์ต์ ์ปค๋ฐ์ ๋๋๋ฆฌ๋ ค๋ฉด
git reset HEAD^
HEAD^๋ ํ์ฌ HEAD๊ฐ ๊ฐ๋ฆฌํค๋ ๋ธ๋์น์ ์ต์ ์ปค๋ฐ์ ๊ฐ๋ฆฌํด
git log ๋ช ๋ น์ ์คํํ์ ๋ ๊ฐ์ฅ ์ต์ ์ปค๋ฐ์ (HEAD -> main) ํ์๊ฐ ์์๋ค.
๋๋๋ฆฌ๋ฉด main์ ์ต์ ์ปค๋ฐ๋ ์ทจ์๋๊ณ ์คํ ์ด์ง์์๋ ๋ด๋ ค์ง๋ค. ์์ ํธ๋ฆฌ์๋ง ํ์ผ์ด ๋จ๋ ๊ฒ.
์คํ ์ด์ง๋ง ์ทจ์ํ ๋๋ restore, ์ปค๋ฐ์ ์ทจ์ํ ๋๋ reset!
git reset ๋ช ๋ น์ ์ต์
$ git reset -soft HEAD^ | ์ปค๋ฐ์ ์ทจ์ํ๊ณ ํ์ผ์ staged ์ํ๋ก ์์ ๋๋ ํฐ๋ฆฌ์ ๋ณด๊ด |
$ git reset -mixed HEAD^ | ์ปค๋ฐ์ ์ทจ์ํ๊ณ ํ์ผ์ unstaged ์ํ๋ก ์์ ๋๋ ํฐ๋ฆฌ์ ๋ณด๊ด |
$ git reset HEAD^ | --mixed ์ต์ ๊ณผ ๊ฐ์ |
ํน์ ์ปค๋ฐ์ผ๋ก ๋๋๋ฆฌ๊ธฐ — git reset ํด์
์ต์ ๋ฒ์ ์ด ์๋ ํน์ ๋ฒ์ ์ผ๋ก ๋๋๋ ค ๋๊ณ ๊ทธ ์ดํ ๋ฒ์ ์ ์ญ์
R3๊ณผ R4 ์ปค๋ฐ์ ์ญ์ ํ๊ณ R2 ์ปค๋ฐ์ ์ต์ ์ปค๋ฐ์ผ๋ก ๋ง๋ค๊ธฐ
reset A๋ฅผ ์ ๋ ฅํ๋ค๋ฉด A ์ปค๋ฐ์ ์ญ์ ํ๋ ๊ฒ ์๋๋ผ,
A ์ปค๋ฐ ์ดํ์ ๋ง๋ค์๋ ์ปค๋ฐ์ ์ญ์ ํ๊ณ A ์ปค๋ฐ์ผ๋ก ์ด๋ํ๊ฒ ๋ค๋ ์๋ฏธ!
HEAD is now at
: ๋ฐฉ๊ธ ๋ณต์ฌํด์ ๋ถ์ธ ์ปค๋ฐ ํด์ ์์น๋ก HEAD ๊ฐ ์ฎ๊ฒจ์ก๋ค! ์ฆ ๊ฐ์ฅ ์ต์ ์ปค๋ฐ์ด ๋์๋ค!
์ปค๋ฐ ๋ณ๊ฒฝ ์ด๋ ฅ ์ทจ์ํ๊ธฐ — git revert
ํน์ ์ปค๋ฐ์ผ๋ก ๋๋๋ฆด ๋ ์์ ํ๋ ๊ฒ์ ์ญ์ ํด๋ ๋๋ค๋ฉด git reset,
๋์ค์ ์ฌ์ฉํ ๊ฒ์ ๋๋นํด์ ์ปค๋ฐ์ ์ทจ์ํ๋๋ผ๋ ์ปค๋ฐํ๋ ๊ธฐ๋ก์ ๋จ๊ฒจ ๋์ด์ผ ํ ๋
๋ณ๊ฒฝ ์ฌํญ๋ง ์ทจ์ํ๊ณ ์ปค๋ฐ์ ๋จ๊ฒจ๋ ๋ 'git revert'
vim rev.txt์ e๋ฅผ ์ถ๊ฐํ๊ณ , git commit -am "R5"๋ก ์ปค๋ฐํจ
๊ฐ์ฅ์ต๊ทผ์ ์ปค๋ฐํ R5 ์ทจ์, ์ง์ ์ธ R2๋ก ๋๋์๊ฐ๊ธฐ.
์ทจ์ํ๋ R5 ๋ฒ์ ์ ์ญ์ ํ์ง ์๊ณ ๋จ๊ฒจ ๋๋ ค๊ณ ํจ
reset ๋ช ๋ น์ ๋๋์๊ฐ ์ปค๋ฐ ํด์๋ฅผ, revert ๋ช ๋ น์ ์ทจ์ํ ์ปค๋ฐ ํด์๋ฅผ ์ง์ ํ๋ค!
$ git revert ์ทจ์ํ ์ปค๋ฐ ํด์
์ ๋ ฅํ๋ฉด ๊ธฐ๋ณธ ํธ์ง๊ธฐ ๋จ๋ฉด์ ์ปค๋ฐ ๋ฉ์์ง ์ ๋ ฅ ๊ฐ๋ฅ.
์ปค๋ฐ ๋ฉ์์ง ๋งจ ์์๋ ์ด๋ค ๋ฒ์ ์ revert ํ๋์ง ๋ํ๋จ.
์ปค๋ฐ์ ์ทจ์ํ๋ฉฐ ๋จ๊ฒจ ๋ ๋ด์ฉ์ด ์๋ค๋ฉด ๋ฌธ์ ๋งจ ์์ ์ ๋ ฅํ๊ณ ์ ์ฅํจ.
๋ก๊ทธ์ R5๋ฅผ revertํ ์๋ก์ด ์ปค๋ฐ ์๊น. ๊ธฐ์กด R5๋ ๋จ์์์.
R5 ๋ฒ์ ์ ์ง์ฐ๋ ๋์ R5์์ ๋ณ๊ฒฝํ๋ ๋ด์ฉ๋ง ์ทจ์ํ๊ณ , R5๋ฅผ ์ทจ์ํ๋ค๋ ์ปค๋ฐ์ ์๋ก ๋ง๋ ๊ฒ.
์์์ ์ถ๊ฐํ 'e'๊ฐ ์์ด์ง.
revert ์ฌ์ฉํ๋ฉด ์ปค๋ฐ ์์ฒด๋ฅผ ์ญ์ ํ์ง ์์ผ๋ฉด์, ๋ณ๊ฒฝ ์ด๋ ฅ์ ์ทจ์ํ ์ ์๋ค!
์ฐ์ต๋ฌธ์
1. ๊น ํ๊ฒฝ์์ ์ด๋ฆ์ 'abc'๋ก ์ง์ $ git config user.name 'abc'
2. ๊น ํ๊ฒฝ์์ ๋ฉ์ผ์ abc@abc.co.kr๋ก ์ง์ $ git config user.email 'abc@abc.co.kr'
3. ํ์ฌ ์์น์ ์ง์ญ ์ ์ฅ์๋ฅผ ๋ง๋ฆ $ git init
4. ๊น ์ํ ํ์ธ $ git status
5. ch01.txt ํ์ผ์ ์คํ ์ด์ง์ ์ฌ๋ฆผ $ git add ch.01txt
6. ์คํ ์ด์งํ ํ์ผ์ ์ปค๋ฐ ๋ฉ์์ง 'ch01'์ ๋ถ์ฌ ์ปค๋ฐ $ git commit -m 'ch01'
7. ๋ฉ์์ง 'ch02'๋ฅผ ๋ถ์ฌ์ ์คํ ์ด์ง๊ณผ ์ปค๋ฐ์ ๋์์ $ git commit -am 'ch02'
8. ์ปค๋ฐ ์ ๋ณด ํ์ธ $ git log
9. ์ต๊ทผ ๋ฒ์ ๊ณผ ์์ ํด๋์ ์์ ํ์ผ ์ฌ์ด ์ฐจ์ด๋ฅผ ๋ณด์ฌ์ค $ git diff
10. ์์ ํธ๋ฆฌ์์ work.txt ์์ ๋ด์ฉ์ ์ทจ์ $ git restore work.txt
11. work.txt์ ์คํ ์ด์ง์ ์ทจ์ $ git restore --staged work.txt
12. ๊ฐ์ฅ ์ต๊ทผ ์ปค๋ฐ์ ์ทจ์ $ git reset HEAD^
13. ์ง์ ํ ์ปค๋ฐ ํด์๋ก ์ด๋ํ๊ณ ์ดํ ์ปค๋ฐ์ ์ทจ์ $ git reset ์ปค๋ฐํด์
14. ์ง์ ํ ์ปค๋ฐ ํด์์ ๋ณ๊ฒฝ ์ด๋ ฅ์ ์ทจ์ $ git revert ์ปค๋ฐํด์