만약 master 브랜치에서 작업하고 몇 개의 커밋을 했다고 가정합시다.
그런데 이 작업을 master 브랜치에서 하면 안되는 상황인 걸 늦게 깨달았습니다.
근데 이미 master 브랜치에서 커밋을 몇 번 진행했습니다.
이 커밋들을 지워야하는데 그냥 지워버리면 너무 아깝습니다. 여태 내가 한 작업들인데
그래서 이 커밋들을 다른 브랜치에 넣고 master 브랜치에서는 제거하고 싶습니다.
커밋을 완전히 제거하고 브랜치 포인터를 뒤로 이동시킵니다.
git reset <commit-hash>
git reset
을 하게되면 해당 커밋 해시를 가진 커밋으로 이동하고
repository에서는 이 기준 커밋 이후의 커밋들을 삭제합니다.
그리고 삭제한 커밋들의 작업물들을 working tree에 올립니다.
git reset --hard <commit-hash>
--hard
옵션을 추가하면 삭제한 커밋들의 작업물들을 workign tree로 복원해주지 않습니다.
기준 커밋 이후의 모든 커밋들을 폐기처리됩니다.
reset을 통한 커밋 취소(삭제)는 모든 브랜치에서 커밋을 삭제하는 것이 아닌
현재 내가 있는 브랜치가 기준이 됩니다.
git revert <commit-hash>
revert
는 기준 커밋까지의 변경사항들을 모두 취소합니다.
그리고 변경사항들을 취소했다는 커밋을 남깁니다.
말이 좀 어색하지만 변경사항을 취소했다는 새로운 커밋을 남기기는 것입니다.
reset
은 기준이 되는 커밋으로 브랜치 포인터와 HEAD 모두 이동시키고,
기준 커밋 이후의 커밋들을 모두 삭제한다고 하였습니다.
--hard
옵션을 추가하면 삭제한 커밋이 가진 변경사항을 working tree로 복구해주지도 않고 폐기시킨다는 것도 언급하였습니다.
revert
는 기준 커밋까지의 내용을 취소합니다.
그리고 이 내용들을 취소했다닌 커밋을 새로 남깁니다.
결국 내가 보는 내용은 위 그림에서 51494a6
이전의 커밋된 내용들을 보게되는 것입니다.
만약 작업을 하고 commit후 remote repo로 push까지 진행하였다고 가정합시다.
근데 그러고 나서 보니까 잘못된 내용을 commit 했다는 사실을 뒤늦게 깨달아버렸습니다.
그래서 reset
을 해서 해당 커밋들을 취소했다고 해봅시다.
그런데 참 운도 없지, 제가 reset
하기 전에, 누군가 제가 잘못 커밋한 내용들까지 pull을 했다고 해봅시다
그래서 결과적으로 동료는 1번부터 6번 커밋을 가지고 있는데,
저는 1번부터 3번 커밋을 가지는 결과가 나올 수 있습니다.
이런 경우엔 문제가 될 수 있습니다.
따라서 변경사항을 취소했다는 commit을 남기는 revert
를 수행하는 것이 좋습니다.
만약 제가 잘못 commit한 내용을 동료들이 pull을 해서 가져가거나 혹은 아직 commit한 내용들을 push하지 않았다면
그냥 reset
을 하는 것이 좋을 것입니다.
🙏🙏🙏
git 시리즈에 작성한 포스팅은
https://www.udemy.com/course/best-git-github/
유데미 강좌
https://www.yes24.com/Product/Goods/110795446
모두의 깃 & 깃허브
위 내용을 참고하였으며, 제 실습화면을 캡쳐한 사진 외의
대부분의 사진들은 인터넷 강좌에서 제공하는 자료를 캡쳐하였습니다.
깃 시리즈 포스팅의 내용 및 사진을 절대로 상업적 목적으로 무단 복사하지 말아주세요.