문서의 선택한 두 판 사이의 차이를 보여줍니다.
| 양쪽 이전 판이전 판다음 판 | 이전 판 | ||
| git:restore [2024/11/15 13:19] – [원격 레포에 히스토리 기록을 남기면서 되돌리기 revert] taekgu | git: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 bash> | ||
| + | git restore 파일명 | ||
| + | </ | ||
| + | |||
| + | ===== reset으로 특정 commit으로 전환 ===== | ||
| + | 로컬에만 커밋이 머물러 있거나, 원격 저장소에 push를 했어도 나만 사용하는 게 확실한 브랜치라면 reset을 써도 상관없다. 하지만 다른 사람들과 공유하고 있는 브랜치라면 서로의 커밋 history가 달라지기 때문에 서로를 위해서도 하지 않는 게 좋다. | ||
| + | |||
| + | **HEAD**로 되돌리기 **강제** | ||
| + | <code bash> | ||
| + | git reset --hard HEAD | ||
| + | ## --hard 되돌린 커밋 이후의 모든 커밋 history를 삭제한다. | ||
| + | |||
| + | git reset --soft HEAD~1 | ||
| + | ## --soft 커밋 history는 삭제되지만 변경 사항은 stage에 올라간 상태로 남는다. | ||
| + | </ | ||
| + | |||
| + | HEAD~1의 상태로 **강제**로 repo에 push하면 자료가 꼬인다. ( **사용하지 말것** ) | ||
| + | <code bash> | ||
| + | git push -f origin | ||
| + | </ | ||
| + | |||
| + | ===== 원격 레포에 히스토리 기록을 남기면서 되돌리기 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하지는 않은 상태로 되돌린다. | ||
| + | </ | ||
| + | |||
| + | Revert는 커밋 history가 삭제되지 않고 어떤 커밋이 Revert 됐는지도 기록에 남기 때문에 history 관리에도 유용하다. 결론은 깃 커밋을 롤백해야 된다면, revert를 사용하자! | ||