사용자 도구

사이트 도구


git:restore

되돌리기

작업의 취소는 소스를 관리하는 하나의 목적이라고 할 수 있다. 수정을 하다가 되돌기고 싶은때가 많이 있을 것이다. 여기에서 다양한 되돌리기를 알아보기로 한다.

Discard Local change (로컬 변화 취소하기)

로컬에서 작업하고 있는 staging area나 working directory에서 작업하는 내용을 초기화 하는 방법에 대해서 알아보자.

unstaging a staged file

git restore --staged 파일명
git reset HEAD 파일명 # HEAD가 가리키는 시점의 버전으로 파일을 unstage하고 되돌린다.
git restore 파일명

reset으로 특정 commit으로 전환

로컬에만 커밋이 머물러 있거나, 원격 저장소에 push를 했어도 나만 사용하는 게 확실한 브랜치라면 reset을 써도 상관없다. 하지만 다른 사람들과 공유하고 있는 브랜치라면 서로의 커밋 history가 달라지기 때문에 서로를 위해서도 하지 않는 게 좋다.

HEAD로 되돌리기 강제

git reset --hard HEAD
## --hard 되돌린 커밋 이후의 모든 커밋 history를 삭제한다.
 
git reset --soft HEAD~1
## --soft 커밋 history는 삭제되지만 변경 사항은 stage에 올라간 상태로 남는다.

HEAD~1의 상태로 강제로 repo에 push하면 자료가 꼬인다. ( 사용하지 말것 )

git push -f origin

원격 레포에 히스토리 기록을 남기면서 되돌리기 revert

git revert 명령어를 사용하면 revert 시킨 히스토리마저 원격 레포에 기록이 되기 때문에 함께 쓰는 레포라면 revert 명령어를 쓰는 것이 더 좋다. 똑같이 git log로 commit의 hash를 먼저 확인한 후 (git log를 입력했을 때 commit 옆에 뜨는 긴 문자열이 hash이다),

revert는 커밋을 삭제하는 게 아니라 이전의 변경 사항을 불러와서 새로운 커밋을 추가한다. reset이 타임 머신을 타고 과거로 돌아가는 거라면, revert는 내 시간은 그대로고 과거의 사람을 현재로 불러오는 느낌? reset처럼 history가 꼬일 일이 잘 없기 때문에 더 안전한 방법이라고 할 수 있다.

git revert HEAD
# 바로 이전 커밋으로 되돌린다.
 
git revert 커밋아이디
# 특정 커밋아이디로 되돌린다.
 
git revert -m 1 HEAD
# 마지막 커밋이 merge라면, 마지막 커밋으로 되돌린다.
 
git revert --no-commit 커밋아이디
# 특정 커밋아이디를 stage에는 올라가지만 commit하지는 않은 상태로 되돌린다.

Revert는 커밋 history가 삭제되지 않고 어떤 커밋이 Revert 됐는지도 기록에 남기 때문에 history 관리에도 유용하다. 결론은 깃 커밋을 롤백해야 된다면, revert를 사용하자!

git/restore.txt · 마지막으로 수정됨: 2025/04/15 10:05 저자 127.0.0.1