WebPublisher/Git

[Git] 커밋 삭제하기 git reset, git revert

amanda 2024. 8. 9. 13:55

reset과 revert의 공통점과 차이점 ?

 

둘 다 이전 커밋으로 되돌리는 명령어라는 점은 동일

 

reset은 브랜치를 혼자만 사용하는 경우 or 원격에 push 하지 않은 경우

revert는 코드 공유를 하는 경우 or 원격에 push를 한 경우 사용

 

revert는 커밋을 이전으로 되돌린 이력을 남기기 때문에

협업을 할 때는 reset보다 revert를 권장

 

 

 

reset 옵션

 

1) --hard : 돌아간 커밋 이후의 변경 이력 모두 삭제

git commit -m "A"
git commit -m "B"
git commit -m "C"

git reset --hard [A 커밋의 hash]
git push

A로 되돌렸기 때문에 A 이후에 커밋한 B, C의 변경 내용은 모두 사라지고 코드도 날아감

 

 

2) --mixed : 변경 이력은 모두 삭제, 변경 내용은 unstage 상태로 남음

git commit -m "A"
git commit -m "B"
git commit -m "C"

git reset --mixed [A 커밋의 hash]
git add .
git commit -m "new commit"
git push

B, C의 이력은 사라지지만 unstage 상태로 코드는 남아있음

add로 stage에 반영하고 commit 하면 됨

 

 

3) --soft : 변경 이력은 모두 삭제, 변경 내용은 stage 된 상태로 남음

git commit -m "A"
git commit -m "B"
git commit -m "C"

git reset --soft [A 커밋의 hash]
git commit -m "new commit"
git push

 

 

 

 

revert

 

reset은 커밋을 삭제, revert는 커밋을 추가한다 (이전 커밋과 정반대의 데이터를 추가함으로써 코드를 되돌림)

 

git revert

git commit -m "A"
git commit -m "B"
git commit -m "C"

git revert [A 커밋의 hash]

A 커밋에 해당하는 내용만 삭제되고 이후의 커밋들은 남아 있음

A 커밋이 삭제된 이력이 남음

 

 

--no-commit : revert한 결과를 commit 하지 않고 stage 상태로 유지하기

git revert --no-commit [해당 커밋의 해쉬]

 

 

 

*참고

https://kyounghwan01.github.io/etc/git/git-reset-revert/#revert

 

git reset, revert로 이전 커밋으로 돌리기

git reset, revert로 이전 커밋으로 돌리기, git, github, issue, projects, milestone

kyounghwan01.github.io

https://devocean.sk.com/blog/techBoardDetail.do?ID=165719&boardType=techBlog

 

git commit 을 원복하는 방법 (revert, reset, patch)

 

devocean.sk.com