[Git] ์๊ฒฉ์ ์ฅ์์ ์ฌ๋ฆฐ ์ปค๋ฐ ๋๋๋ฆฌ๊ธฐ
[Git] ์๊ฒฉ์ ์ฅ์์ ์ฌ๋ผ๊ฐ ์ปค๋ฐ ๋๋๋ฆฌ๊ธฐ
์๊ฒฉ ์ ์ฅ์์์ ์ปค๋ฐ ํ์คํ ๋ฆฌ ์ ์ด (reset/revert)
1. reset ํ ๊ฐ์ push ํ๊ธฐ
1-1. ์ฃผ์์ฌํญ
์๋ ๋ฐฉ๋ฒ๋ค์ํ์คํ ๋ฆฌ๋ฅผ ๊ฐ์ ๋ก ์กฐ์ํ๋ค๋ ์ ์ ์์ด์ ํ๊ณผ ๊ณต์ ํ๋ ์๊ฒฉ์ ์ฅ์๋ผ๋ฉด ํ๊ฒฉ์ด ์์ ์ ์๋ค.
- ๋ณธ์ธ ํผ์์ ์์ ํ๋ ๊ฒฝ์ฐ
- ์๋ ๋ฐฉ๋ฒ์ผ๋ก ๊ฐ์ ๋ก ๋๋๋ฆฐ ์ปค๋ฐ์ pull ํ ํ์์ด ์๋ ๊ฒฝ์ฐ
๋ง์ฝ ์๋์ ์์ ์ ๋ชจ๋ฅด๊ณ ํ์์ด ์์ ํ push ํ๋ฉด, ๋ด๊ฐ ๊ฐ์ ๋ก ์ญ์ ํ๋ ์ปค๋ฐ๋ค์ด ๋ค์ ์์ฑ๋๋ค.
1-2. ๋ก์ปฌ์์ ๋๋๋ฆฌ๊ณ ์ถ์ ์ปค๋ฐ์ผ๋ก ๊ฐ๋ค.
- ์๋ ๋ช ๋ น๋ฌธ์ ์ํ๋ ์ปค๋ฐ์ํ๋ก ๋๋์๊ฐ๋ค.
HEAD^
๋ ๋ฐ๋ก ์๋ ์ปค๋ฐ์ผ๋ก ๋๋๋ฆฌ๊ฒ ๋๊ณ ,HEAD~3
๋ ์ต์ (ํค๋)๋ถํฐ 3๊ฐ์ ์ปค๋ฐ์ผ๋ก ๋๋๋ฆฌ๊ฒ ๋๋ค.
$ git reset --hard HEAD^
1-3. ๊ฐ์ ๋ก ํธ์ํ๊ธฐ
- ์ํ๋ ์ํ์ ์ปค๋ฐ์ผ๋ก ๋๋์์๋ค๋ฉด ๊ทธ ์ํ๋ก ๊ฐ์ ํธ์ํ๋ค.
-f
๋๋-force
๋ ๊ฐ์ ๋ก ํธ์ํจ์ ์๋ฏธ.
$ git push -f origin master
2. revert ํ ๊ฐ์ ๋ก ํธ์ํ๊ธฐ
reset์ ๊ฒฝ์ฐ, ์ปค๋ฐ์ฌํญ๋ค์ ์ ์ฒด์ ์ผ๋ก ์ญ์ ํ ํ ๋ฎ์ด์ฐ๊ธฐ๊ฐ ๋๊ธฐ ๋๋ฌธ์ ํ์คํ ๋ฆฌ๊ฐ ์กฐ์๋๋ค๋ ์ํ์ด ์๋ค.
๋๋๋ ธ๋ค๋ ๊ฑธ ํ์คํ ๋ฆฌ์ ๋จ๊ธฐ๊ธฐ ์ํด์๋ ์๋์ ๊ฐ์ด revert ํ์ฌ ๊ณผ๊ฑฐ ์ปค๋ฐ์ผ๋ก ๋๋ฆด ์ ์๋ค.
2-1. ๋๋๋ฆฌ๊ณ ์ถ์ ์ปค๋ฐ์ผ๋ก ๊ฐ๋ค
$ git revert [๋๋๋ฆฌ๊ณ ์ถ์ commit hash]
ํน์ ์ปค๋ฐ์์์ ๋ณ๊ฒฝ ์ฌํญ์ ์ ๊ฑฐํ๋ ๋ ๋ค๋ฅธ ์ปค๋ฐ์ ์์ฑํ๋ ๋ช ๋ น์ด์ด๋ค.
๋ฐ๋ผ์ commit A -> commit B -> commit C ์ปค๋ฐ์ ์์๋ก ์ปค๋ฐ ํ์คํ ๋ฆฌ๊ฐ ์์ฌ์๋๊ฑธ ์๊ฐํด๋ดค์ ๋,
์ด๋ฅผ ๋ค์ ์๋๋๋ก ๋๋๋ฆฌ๊ธฐ ์ํด์๋ commt C -> commit B -> commit A ์์๋ก ๊ฑฐ๊พธ๋ก revert ํด์ผ ํ๋ค.
์ปค๋ฐ ๋ก๊ทธ๋ฅผ ๋ณด๋ฉด ๋๋๋ฆฌ๊ณ ์ถ์ ์ปค๋ฐ์ ์๋งํผ ๋ถํ์ํ revert ์ปค๋ฐ์ด ์๊ฒจ๋๋ค.
์ฆ, ๋๋๋ฆฌ๊ณ ์ถ์ ์ปค๋ฐ์ด 100๊ฐ๋ผ๋ฉด 100๊ฐ์ revert์ปค๋ฐ์ ์ถ๊ฐํด์ผ ํ๋ค.
์ด๋ --no-commit
์ต์
์ ์ด์ฉํ๋ฉด revert๋ฅผ ์ํ ์ปค๋ฐ์ ํ๋๋ฉด ์์ฑํ ์ ์๋ค.
git revert --no-commit [๋๋๋ฆฌ๊ณ ์ถ์ commit hash]
์คํํ๋ฉด, revert ์ปค๋ฐ์ด ์๋์ผ๋ก ์์ฑ๋๋ ๊ฒ์ด ์๋๋ผ working tree์ index(staging area)์๋ง ๋ณ๊ฒฝ์ฌํญ์ด ์ ์ฉ๋๋ค.
$ git revert --no-commit [๋๋๋ฆฌ๊ณ ์ถ์ commit hash]
ํ์ง๋ง ์ผ์ผ์ด revert ํ ์ปค๋ฐ์ ์๋งํผ ๋ช ๋ น์ด๋ฅผ ๋ฐ๋ณตํด์ ์คํํด์ผ ํ๋ค๋ ๋จ์ ์ด ์๋ค.
์ฌ๋ฌ๊ฐ๋ฅผ revert ํด์ฃผ๋ ค๋ฉด ํน์ commit์ hash๊ฐ ์๋ "๋๋๋ฆฌ๊ณ ์ถ์ ์ปค๋ฐ์ ๋ฒ์"๋ฅผ ์ธ์๋ก ์ ๋ ฅํด์ฃผ๋ฉด ๋๋ค.
$ git revert --no-commit HEAD~3.. // ๋๋
$ git revert --no-commit master~3..master
๋ง์ง๋ง์ผ๋ก index(staging area)์ ์ฌ๋ผ๊ฐ ๋ณ๊ฒฝ๋ค์ ํ๊บผ๋ฒ์ ์ปค๋ฐํ ๋ค์, ์๊ฒฉ ์ ์ฅ์์ ํธ์ํ๋ฉด ๋๋ค.
$ git commit -m "Revert commit A, B, C"
$ git push origin master
Reference
https://jupiny.com/2019/03/19/revert-commits-in-remote-repository/
revert ํ๋ ๋ฐฉ๋ฒ์ด ํ์คํ ๋ฆฌ์ ๋จ์์ ์์ ํ ๋ ์์ ์ฑ์ด ์๋ค. (๋ ๋ค์ ๋๋์๊ฐ์ผ ๋ ์์์ผ๋ฏ๋ก..)