๐ป Programming
[Git] ์๋ณต, Revert pushed commits using CLI (์ปค๋งจ๋๋ผ์ธ์ผ๋ก ํธ์ ๋ด์ฉ ์๋ณตํ๊ธฐ)
push๊น์ง ํด๋ฒ๋ฆฐ git commit ์๋ณตํ๋ ๋ฐฉ๋ฒ
1. commit log ํ์ธ
2. reset (์ํ๋ ์์ ์ผ๋ก ๋๋์๊ฐ๊ธฐ)
3. revert (ํน์ ์์ ์ดํ์ ๋ณ๊ฒฝ์ฌํญ ๋๋๋ฆฌ๊ธฐ)
4. force push (๋๋๋ฆฐ ๋ด์ฉ์ ๊ณต๋ repo์ ๋ฐ์ํ๊ธฐ)
1. commit history์์ ์๋ณต ์์ ์ ์ปค๋ฐ ํ์ธ
keichee$ git log -5 --pretty=format:"%h - %an, %ar : %s"
148444a6a - keichee, 4 days ago : Merge branch 'dev-sentry' into stage
eebdd9202 - keichee, 4 days ago : dev ํ๊ฒฝ ๋ก๊น sentry ์ฐ๋
1c74ca53e - john, 5 days ago : Merge pull request #1238 in test/repo from release/200202 to stage
6544cd10a - john, 5 days ago : Merge pull request #1237 in test/repo from feature/200202 to release
754046d47 - tom, 5 days ago : test commit 1
git log ๋ช ๋ น์ด๋ฅผ ์ด์ฉํด์ commit ํ์คํ ๋ฆฌ๋ฅผ ํ์ธ ํ ์ ์์ต๋๋ค.
์ด๋ ์ต์ ์ผ๋ก -5 ๋ฅผ ์ ๋ ฅํด์ฃผ๋ฉด ์ต์ ์์ผ๋ก 5๊ฐ ๊น์ง๋ง ์กฐํ๋ฅผ ํ ์ ์๊ณ
์ต์ ์ ์ฃผ์ง ์์ผ๋ฉด ํ์ด์ง ์ฒ๋ฆฌ๋์ด ๊ณ์ ์กฐํํ ์ ์์ต๋๋ค.
๋ค์ pretty ์ต์ ์ ์ฃผ๋ฉด ์ ๊ฒฐ๊ณผ์ฒ๋ผ ์กฐํ๊ฐ ๋๋๋ฐ pretty ์ต์ ์ ์์ฃผ๋ฉด commit ํ๋์ ๋ด์ฉ์ด ์ด 6์ค์ ๊ฑธ์ณ์ ํ์๊ฐ ๋๊ธฐ ๋๋ฌธ์ ํ๋์ ๋ณด๊ธฐ๊ฐ ํ๋ง๋๋ค.
2. ์ํ๋ ์์ ์ผ๋ก Reset
์์์ ์กฐํํ 5๊ฐ์ ์ปค๋ฐ๋ค ์ค์ john์ด 5์ผ ์ ์ ์ปค๋ฐํ ๋ด์ฉ๊น์ง๋ง ์ ์ฉํ๊ณ keichee๊ฐ ์ปค๋ฐํ ๋ด์ฉ์ revert์์ผ๋ณด๊ฒ ์ต๋๋ค.
commit it๊ฐ 1c74ca53e์ธ ๊ฒ์ ํ์ธํ๊ณ ์๋์ ๊ฐ์ด reset ํฉ๋๋ค.
keichee$ git reset 1c74ca53e
Unstaged changes after reset:
M src/main/resources/logback-spring.xml
3. Revert
reset์ ํ๋ฉด 1c74ca53e ์ปค๋ฐ๊น์ง ์๋ฃ๋ ์ํ๋ก ๋๋์ ๊ฐ๋๋ค.
๊ทธ๋ฆฌ๊ณ ๊ทธ ์ดํ์ ์ปค๋ฐ์ ๋ํด์๋ ์์ ์ํ๋ก ๋ณ๊ฒฝ๋ฉ๋๋ค.
์ด๋ git status๋ก ํ์ธ์ ํด๋ณด๋ฉด ์๋์ ๊ฐ์ด ํ์ธ ํ ์ ์์ต๋๋ค.
keichee$ git status
On branch test-revert
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: src/main/resources/logback-spring.xml
์ด์ ์ด๋ ๊ฒ ์์ ๋ ๋ด์ฉ๋ค์ ๋ํด์ ์๋ณตํด๋ณด๊ฒ ์ต๋๋ค.
keichee$ git checkout -- src/main/resources/logback-spring.xml
ํ์ผ๋ค์ด ๋๋ฌด ๋ง์ ์ด๋ ๊ฒ ํ๊ธฐ๊ฐ ๋ถํธํ๋ค๋ฉด ์๋์ ๊ฐ์ด ํ ์๋ ์์ต๋๋ค.
# Revert changes to modified files.
git reset --hard
# Remove all untracked files and directories.
# '-f' is force, '-d' is remove directories.
git clean -fd
4. Force push
keichee$ git push -f
Total 0 (delta 0), reused 0 (delta 0)
remote:
remote: Create pull request for test-revert:
remote: https://git.repository/compare/commits?sourceBranch=refs/heads/test-revert
remote:
To https://git.repository
+ 61495b45b...1c74ca53e test-revert -> test-revert (forced update)
์ด์์ ๋๋ค.
์ค๋๋ ์ฆ์ฝ๋ฉํ์ธ์~