[Git] 커밋 삭제하기 git reset, git revert
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
https://devocean.sk.com/blog/techBoardDetail.do?ID=165719&boardType=techBlog