사용자 도구

사이트 도구


git:restore

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판이전 판
다음 판
이전 판
git:restore [2024/11/15 13:33] – [원격 레포에 히스토리 기록을 남기면서 되돌리기 revert] taekgugit:restore [2025/04/15 10:05] (현재) – 바깥 편집 127.0.0.1
줄 1: 줄 1:
 +====== 되돌리기 ======
 +작업의 취소는 소스를 관리하는 하나의 목적이라고 할 수 있다.
 +수정을 하다가 되돌기고 싶은때가 많이 있을 것이다.
 +여기에서 다양한 되돌리기를 알아보기로 한다.
 +
 +===== Discard Local change (로컬 변화 취소하기) =====
 +
 +로컬에서 작업하고 있는 staging area나 working directory에서 작업하는 내용을 초기화 하는 방법에 대해서 알아보자.
 +
 +=== unstaging a staged file ===
 +
 +<code bash>
 +git restore --staged 파일명
 +git reset HEAD 파일명 # HEAD가 가리키는 시점의 버전으로 파일을 unstage하고 되돌린다.
 +</code>
 +
 +<code bash>
 +git restore 파일명
 +</code>
 +
 +===== reset으로 특정 commit으로 전환 =====
 +로컬에만 커밋이 머물러 있거나, 원격 저장소에 push를 했어도 나만 사용하는 게 확실한 브랜치라면 reset을 써도 상관없다. 하지만 다른 사람들과 공유하고 있는 브랜치라면 서로의 커밋 history가 달라지기 때문에 서로를 위해서도 하지 않는 게 좋다.
 +
 +**HEAD**로 되돌리기 **강제**
 +<code bash>
 +git reset --hard HEAD
 +## --hard 되돌린 커밋 이후의 모든 커밋 history를 삭제한다.
 +
 +git reset --soft HEAD~1
 +## --soft 커밋 history는 삭제되지만 변경 사항은 stage에 올라간 상태로 남는다.
 +</code>
 +
 +HEAD~1의 상태로 **강제**로 repo에 push하면 자료가 꼬인다. ( **사용하지 말것** )
 +<code bash>
 +git push -f origin
 +</code>
 +
 +===== 원격 레포에 히스토리 기록을 남기면서 되돌리기 revert =====
 +git revert 명령어를 사용하면 revert 시킨 히스토리마저 원격 레포에 기록이 되기 때문에 함께 쓰는 레포라면 revert 명령어를 쓰는 것이 더 좋다.
 +똑같이 git log로 commit의 hash를 먼저 확인한 후 (git log를 입력했을 때 commit 옆에 뜨는 긴 문자열이 hash이다),
 +
 +revert는 커밋을 삭제하는 게 아니라 이전의 변경 사항을 불러와서 새로운 커밋을 추가한다. reset이 타임 머신을 타고 과거로 돌아가는 거라면, revert는 내 시간은 그대로고 과거의 사람을 현재로 불러오는 느낌? reset처럼 history가 꼬일 일이 잘 없기 때문에 더 안전한 방법이라고 할 수 있다.
 +
 +<code bash>
 +git revert HEAD
 +# 바로 이전 커밋으로 되돌린다.
 +
 +git revert 커밋아이디
 +# 특정 커밋아이디로 되돌린다.
 +
 +git revert -m 1 HEAD
 +# 마지막 커밋이 merge라면, 마지막 커밋으로 되돌린다.
 +
 +git revert --no-commit 커밋아이디
 +# 특정 커밋아이디를 stage에는 올라가지만 commit하지는 않은 상태로 되돌린다.
 +</code>
 +
 +Revert는 커밋 history가 삭제되지 않고 어떤 커밋이 Revert 됐는지도 기록에 남기 때문에 history 관리에도 유용하다. 결론은 깃 커밋을 롤백해야 된다면, revert를 사용하자!