티스토리 뷰
원격 저장소에 push하지않고(공유된 커밋x) 내 로컬에서만 관리되던 커밋을 기준으로 되돌리는 법을 작성하였습니다.
커밋을 변경하는 방법(git commit --amend)
- 해당 방법은 가장 최신의 커밋을 변경하는 방법이다.
- 이미 커밋한 내용을 수정하거나 커밋 메세지를 변경할 수 있다.
- 텍스트 편집기(vim)이 열리고, 수정할 수 있는 커밋 메세지가 표시된다. 원하는 대로 수정한 후 저장하면 커밋이 변경된다.
이전 커밋으로 돌아가는 방법(git revert 또는 git reset)
git revert HEAD #가장 최근 커밋을 스테이징 상태로 되돌린 후 vim(텍스트에디터)가 자동 실행된다.
git reset HEAD^ #포인터와 함께 가장최근 커밋을 언스테이징 상태로 되돌린다.
- 이미 커밋한 내용을 삭제하거나 이전 상태로 되돌리는 방법이다.
- 이미 커밋한 내용을 삭제하면서 기록을 유지하려면 `git revert`를 사용해야 한다. -> 즉, 원래ㅎ 커밋을 날리지 않고 스테이징 상태로 되돌리고 싶다면 revert 활용
- git revert HEAD는 가장 최신의 커밋을 취소하고 새로운 커밋을 생성한다. 커밋 메세지를 작성하고 저장하면 새로운 커밋이 생성되며, 이전 커밋의 변경 내용이 취소된다.
- git revert HEAD와 git reset HEAD^는 거의 동일하게 동작하는 듯해보이나 revert는 덮어쓰는 새 커밋을 작성하는 것으로 다른 커밋에 영향을 미치지 않아 협업을 할때는 reset보다는 revert를 권한다. reset은 공유되지 않은 커밋(내 로컬에서 아직 원격저장소로 공유되지않은 커밋)이라면 사용해도될 거 같다.
it reset HEAD만 사용하면 변경사항이 있을 때, 동작하지 않았다. 여기서 변경사항이란 unstaged changes를 말한다. 하지만, 동일하게 unstaged changes가 있을 때, 포인터(^)와 함께 `git reset HEAD^` 명령어를 써주니 내가 원하는 대로 이전 커밋의 변경 파일도 되돌아오고 커밋 기록(log)역시 사라졌다.
결론적으로 revert 는 기록을 남기지만(커밋을 덮어쓰는 새 커밋을 작성하는 것이기 때문) 공유된 커밋일 경우 안전하게 처리가 가능하고, reset은 기록 역시 깔끔하게 지울 수 있지만 원격 저장소(gitHub)에 공유된 커밋일 경우는 안전하게 처리가 불가능하기 때문에 로컬에서만 다룬 커밋일 경우에 사용하면 좋을 거 같다.
내 커밋이 원격에 push된 적이 없고 로컬에서만 관리되던 커밋이라면 revert를 쓰든 reset을 쓰든 아무 상관 없다. 오히려 기록까지 안남기는 `git reset HEAD^`가 revert보다 개인적으로 좋아보인다.
- 두 명령어가 커밋을 되돌렸을 때 변경된 파일 내역까지 사라지게 하는 것일까봐 걱정했으나 그렇지 않다.
😈 `git revert`와 `git reset`은 이미 공유된 커밋 기록을 변경하는 것이므로 주의해야 한다. (여기서 말하는 공유된 커밋 기록이란 원격저장소인 github에 내 팀원들에게 공유된 commit을 말한다. 즉, 내 커밋을 원격 저장소에 push한 commit)
revert 명령어와 vim( git 텍스트 편집기)
revert의 경우, 명령어 실행 시, vim 텍스트 에디터를 실행하게 되는데 여기서 당황하여 :wq(저장 후 종료)명령어를 입력하게 되면 자동으로 commit이 되니 주의해야 한다.
최신 커밋을 되돌리고 스테이징 상태로만 되돌리고싶다면 명령모드로 진입(esc키)하여 :wq가 아니라 :q! 명령어로 빠져나오면 된다.
vim 명령어 목록 | |
i | 현재 위치에서 편집 모드로 전환 |
Esc | 편집 모드에서 명령 모드로 전환 |
:w | 변경 내용 저장 |
:q | 편집기 종료 (저장하지 않은 변경 사항이 있는 경우 종료되지 않음) |
:wq 또는 :x | 변경 내용 저장하고 종료 |
:q! | 변경 내용을 저장하지 않고 종료(그냥 빠져나오기) |
'프로그래밍 > Git, Github' 카테고리의 다른 글
[Git | GitHub] 기존 내PC 프로젝트를 깃허브 저장소와 연결하기 (0) | 2023.08.23 |
---|---|
[Git | CLI] 로컬에서 변경 파일을 되돌리는 명령어 (0) | 2023.07.02 |
[Git] 로컬(GitHub) 저장소의 변경사항을 pull(가져오기)전에 로컬(내 PC)에서 확인하기 (1) | 2023.05.14 |
[Git] 원격 저장소(github repo)를 로컬 저장소(내 pc)로 가져오기 (0) | 2023.02.16 |
[Git] git config 기본 설정 (0) | 2023.02.16 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- fs모듈 넥스트
- ~ ^
- aspect-ratio
- D 플래그
- text input pattern
- 원티드 FE 프리온보딩 챌린지
- float 레이아웃
- 원티드 프리온보딩 FE 챌린지
- tilde caret
- 원티드 프리온보딩 프론트엔드 챌린지 3일차
- 형제 요소 선택자
- grid flex
- 프리렌더링확인법
- Prittier
- 프리온보딩 프론트엔드 챌린지 3월
- nvm 설치순서
- reactAPI
- && 셸 명령어
- 틸드와 캐럿
- 타입스크립트 장점
- 타입스크립트 DT
- getStaticPaths
- 항해99프론트후기
- getServerSideProps
- 항해99추천비추천
- nvm경로 오류
- 원티드 3월 프론트엔드 챌린지
- 항해99프론트
- is()
- 부트캠프항해
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
글 보관함