๊น(GIT) (7)- reset, revert
reset vs revert
reset
- https://git-scm.com/docs/git-reset
- โ์๊ณ๋ฅผ ๋ง์น ๊ณผ๊ฑฐ๋ก ๋๋ฆฌ๋ ๋ฏํ ํ์โ
- ํน์ ์ปค๋ฐ์ผ๋ก ๋๋์๊ฐ๋ฉฐ ๋๋์๊ฐ ํน์ ์ปค๋ฐ ์ดํ์ ์ปค๋ฐ๋ค์ ๋ชจ๋ ์ฌ๋ผ์ง๋ฉฐ, ํ์ผ ์ํ๋ ์ต์ ์ ํตํด ๊ฒฐ์
3๊ฐ์ง ์ต์
1. --soft
- resetํ๊ธฐ ์ ๊น์ง ํ๋ SA, WD ์์ ์ ๋จ๊ฒจ๋
- ๋์๊ฐ๋ ค๋ ์ปค๋ฐ์ผ๋ก ๋๋์๊ฐ๊ณ ,
- ์ดํ์ commit๋ ํ์ผ๋ค์
staging area
๋ก ๋๋ ค๋์ (commit ํ๊ธฐ ์ ์ํ) - ์ฆ, ๋ฐ๋ก ๋ค์ ์ปค๋ฐํ ์ ์๋ ์ํ๊ฐ ๋จ
2. --mixed
- (๊ธฐ๋ณธ) SA reset, WD์์ ์ ๋จ๊ฒจ๋
- ๋์๊ฐ๋ ค๋ ์ปค๋ฐ์ผ๋ก ๋๋์๊ฐ๊ณ ,
- ์ดํ์ commit๋ ํ์ผ๋ค์
working directory
๋ก ๋๋ ค๋์ (add ํ๊ธฐ ์ ์ํ) - ์ฆ, unstaged ๋ ์ํ๋ก ๋จ์์์
- ๊ธฐ๋ณธ๊ฐ
3. --hard
- resetํ๊ธฐ ์ SA, WD ๋ชจ๋ ์์ ๋ฆฌ์
- ๋์๊ฐ๋ ค๋ ์ปค๋ฐ์ผ๋ก ๋๋์๊ฐ๊ณ ,
- ์ดํ์ commit๋ ํ์ผ๋ค(
tracked ํ์ผ๋ค
)์ ๋ชจ๋ working directory์์ ์ญ์ - ๋จ, Untracked ํ์ผ์ Untracked๋ก ๋จ์
# undoing ํด๋์์ ํ๋ ๋ด์ฉ ์ด์ด์ ์งํ
# --hard ์์
$ git log --oneline
d6175dd (HEAD -> master) foo & bar
d984105 text file
a46391e first commit
$ git reset --hard d984105
HEAD is now at d984105 text file
$ git log --oneline
d984105 (HEAD -> master) text file
a46391e first commit
$ git status
On branch master
nothing to commit, working tree clean
reset ํน์ง๋ค
reset
์ ๊ณผ๊ฑฐ๋ก ๋์๊ฐ๊ฒ ๋๋ฉด ๋์๊ฐ ์ปค๋ฐ ์ดํ์ ์ปค๋ฐ์ ๋ชจ๋ ํ์คํ ๋ฆฌ์์ ์ฌ๋ผ์ง- ์ปค๋ฐ ํ์คํ ๋ฆฌ๊ฐ ๋ฐ๋๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ ์ฌ๋๊ณผ ๊ณต์ ํ๋ ๋ธ๋์น์์ ์ฌ์ฉ ์ ์ถฉ๋์ด ๋ฐ์
- ๊ณต์ ํ๋ ๋ธ๋์น์์ ์ด์ ์ปค๋ฐ์ ์์ ํ๊ณ ์ถ์ ๋๋
git revert
์ฌ์ฉ
revert
-
https://git-scm.com/docs/git-revert
- โํน์ ์ฌ๊ฑด์ ์์๋ ์ผ๋ก ๋ง๋๋ ํ์โ
- ์ด์ ์ปค๋ฐ ๋ด์ญ์ ๊ทธ๋๋ก ๋จ๊ฒจ๋ ์ฑ ์๋ก์ด ์ปค๋ฐ(==์์๋ ์ผ์ ๋๋ค!๋ฅผ ์๋ฏธํ๋ commit)์ ์์ฑ
- ์ปค๋ฐ ํ์คํ ๋ฆฌ ๋ณ๊ฒฝ ์์ด ํด๋น ์ปค๋ฐ ๋ด์ฉ๋ง์ ์ญ์ ํ ์ํ์ ์๋ก์ด ์ปค๋ฐ์ ์์ฑ
์ถ๊ฐ commit 2๊ฐ๋ง ๋ ๋จ๊ธฐ์
# undoing์์ ์ด์ด์ ์งํ
$ touch c.txt d.txt
$ git add c.txt
$ git commit -m "Add c.txt"
[master d9c38f7] Add c.txt
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 c.txt
$ git add d.txt
$ git commit -m "Add d.txt"
[master aaf2db9] Add d.txt
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 d.txt
$ git log --oneline
aaf2db9 (HEAD -> master) Add d.txt
d9c38f7 Add c.txt
d984105 text file
a46391e first commit
revert commit ํธ์ง๊ธฐ ์คํ
- ๋ค๋ฅธ ์ฌ๋๊ณผ ๊ณต์ ํ๋ ๋ธ๋์น์์ ์ด์ ์ปค๋ฐ์ ์์ ํ๊ณ ์ถ์ ๋ ์ฌ์ฉ
- ์ปค๋ฐ ํ์คํ ๋ฆฌ๊ฐ ๋ฐ๋์ง ์๊ธฐ ๋๋ฌธ์ ์ถฉ๋์ด ๋ฐ์ํ์ง ์์
$ git revert d984105
Removing b.txt
hint: Waiting for your editor to close the file... error: There was a problem
with the editor 'vi'.
Please supply the message using either -m or -F option.
$ git log --oneline
# ๊ธฐ์กด commit ์ด๋ ฅ์ด ๊ทธ๋๋ก ๋จ์์๊ธฐ ๋๋ฌธ์ ํด๋น ํ๋ ์์ ์ผ๋ก ์ธ์ ๋
aaf2db9 (HEAD -> master) Add d.txt
d9c38f7 Add c.txt
d984105 text file
a46391e first commit
์ ๋ฆฌ
๊ทธ์ธ ๋ฐฉ๋ฒ
$ git reflog
aaf2db9 (HEAD -> master) HEAD@{0}: reset: moving to aaf2db9
d47f656 HEAD@{1}: reset: moving to d47f656
d47f656 HEAD@{2}: commit: text file amend
aaf2db9 (HEAD -> master) HEAD@{3}: commit: Add d.txt
d9c38f7 HEAD@{4}: commit: Add c.txt
d984105 HEAD@{5}: reset: moving to d984105
d6175dd HEAD@{6}: commit (amend): foo & bar
48f0541 HEAD@{7}: commit: foo & bar
d984105 HEAD@{8}: commit (amend): text file
2cc67ed HEAD@{9}: commit: amend text file
a46391e HEAD@{10}: commit (initial): first commit
-
reflog
๋ ์ด๋ฐ์์ผ๋ก ์ด์ ๊น์งํ๋ ์์ ๋ค reflog๋ฅผ ํ์ธํด ๋ช๋ฒ์งธ HEAD๋ก ์ด๋ํ ์ง ํ์ธํ๋ค. -
๋ง์ฝ HEAD@{7}๋ก ์ด๋ํ ๊บผ๋ผ๋ฉด
$ git reset --hard HEAD@{7}
๋๊ธ๋จ๊ธฐ๊ธฐ