커밋 취소하기, 되돌리기

정민교·2023년 6월 3일
0

git

목록 보기
13/22

만약 master 브랜치에서 작업하고 몇 개의 커밋을 했다고 가정합시다.

그런데 이 작업을 master 브랜치에서 하면 안되는 상황인 걸 늦게 깨달았습니다.

근데 이미 master 브랜치에서 커밋을 몇 번 진행했습니다.

이 커밋들을 지워야하는데 그냥 지워버리면 너무 아깝습니다. 여태 내가 한 작업들인데

그래서 이 커밋들을 다른 브랜치에 넣고 master 브랜치에서는 제거하고 싶습니다.

✔️커밋 삭제하기(취소하기)

커밋을 완전히 제거하고 브랜치 포인터를 뒤로 이동시킵니다.

📌 git reset

git reset <commit-hash>

git reset 을 하게되면 해당 커밋 해시를 가진 커밋으로 이동하고

repository에서는 이 기준 커밋 이후의 커밋들을 삭제합니다.

그리고 삭제한 커밋들의 작업물들을 working tree에 올립니다.

📌git reset --hard

git reset --hard <commit-hash>

--hard 옵션을 추가하면 삭제한 커밋들의 작업물들을 workign tree로 복원해주지 않습니다.

기준 커밋 이후의 모든 커밋들을 폐기처리됩니다.

🚨주의

reset을 통한 커밋 취소(삭제)는 모든 브랜치에서 커밋을 삭제하는 것이 아닌

현재 내가 있는 브랜치가 기준이 됩니다.

✔️커밋 되돌리기

📌git revert

git revert <commit-hash>

revert는 기준 커밋까지의 변경사항들을 모두 취소합니다.

그리고 변경사항들을 취소했다는 커밋을 남깁니다.

말이 좀 어색하지만 변경사항을 취소했다는 새로운 커밋을 남기기는 것입니다.

✔️reset vs revert

📌reset

reset은 기준이 되는 커밋으로 브랜치 포인터와 HEAD 모두 이동시키고,

기준 커밋 이후의 커밋들을 모두 삭제한다고 하였습니다.

--hard 옵션을 추가하면 삭제한 커밋이 가진 변경사항을 working tree로 복구해주지도 않고 폐기시킨다는 것도 언급하였습니다.

📌revert

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
모두의 깃 & 깃허브

위 내용을 참고하였으며, 제 실습화면을 캡쳐한 사진 외의

대부분의 사진들은 인터넷 강좌에서 제공하는 자료를 캡쳐하였습니다.

깃 시리즈 포스팅의 내용 및 사진을 절대로 상업적 목적으로 무단 복사하지 말아주세요.

profile
백엔드 개발자

0개의 댓글