깃이 꼬였을 때

Minjae Kwon·2022년 3월 21일
2

 🍉   Learning Journal

목록 보기
35/36
post-thumbnail

🤯 방금 커밋 잘못했다. 이전 작업상태로 되돌리고 싶다.

or 현재 main 작업공간에 feature 브랜치를 잘못 당겨왔다. 그 결과 Merge 한 내용의 커밋 기록이 남았고, 이전 작업 상태로 돌리고 싶다.

🔥 커밋 취소하기: git reset

  1. git log 를 살펴본다.

      $ git log --oneline
       1938ys9 (HEAD -> main) Add newFile
       lks313s Update Readme.md
       df319eg Initial commit

가장 최근에 df319eg > lks313s > 1938ys9 순서대로 커밋했고, 마지막에 한 1938ys9 커밋을 취소하고 싶다.

  1. 세부 시나리오

최근 파일 수정 내용도 지우고, 이전 커밋이 막 끝난 상태로 되돌리고 싶다.

git reset --hard <COMMIT_ID> 의 COMMIT_ID 에 되돌아가고자 하는 이전 커밋 아이디 (lks313s) 를 넣어 HEAD 가 다시 이전 커밋을 가리키도록 한다.

	$ git reset --hard lks313s

파일 수정 내용은 남기고, 커밋만 취소하고 싶다.

git reset HEAD^ 를 사용하여 최신커밋을 취소하고, 커밋되었던 파일을 unstaged 시킨다. (working tree에 남는다.) 커밋 여러 개를 되돌릴 경우, git reset HEAD~취소수량 을 입력한다. 주로 직전 커밋을 취소하고 싶은 경우 사용하는 것이 좋다.

   $ git reset HEAD^ // 커밋 하나만 뒤로 돌린다. 
   $ git reset HEAD~1 // 취소 수량에 1만 넣었으므로 바로 위와 동일
  1. 잘 됐는지 확인한다.
    2번의 --hard 옵션은 현재 HEAD 에서 추가된 변경사항들을 모두 되돌린다. (복구 불가하므로 주의)
   $ git log --oneline
    lks313s (HEAD -> main) Update Readme.md
    df319eg Initial commit

    $ git status
    On branch main
    nothing to commit, working tree clean

🔥 working tree 에서 수정한 파일 되돌리기: git restore

🙋🏻‍♀️ 만약 working tree 에 최근 수정 파일이 돌아왔는데, 확인해보니 이전 상태로 되돌리고 싶다면?

	$ git checkout -- <file> // 예전에 쓰던 방법
    $ git restore <file> // 새로운 깃버전에서 출시

🙋🏻‍♀️ 수정 파일을 unstaged 시키기

	$ git reset HEAD <file> // 예전에 쓰던 방법
    $ git restore --staged <file> // 새로운 깃버전에서 출시

😱 잘못된 커밋을 원격에 push 까지 해버렸다.

git reset 은 HEAD 위치를 바꿔버리므로, 로컬 저장소의 깃 상태를 이전 상태로 강제 변경한다. 하지만 커밋을 원격 저장소에 push 한 상태라면, 로컬에서 커밋을 취소했을때 원격의 최신 상태와 어긋나버리게 된다. 이 경우, git revert 로 특정 커밋의 내용을 되돌릴 수 있다.

🔥 커밋 되돌리기: git revert

  1. git log 를 살펴본다.
   $ git log --oneline
    1938ys9 (HEAD -> main) Add newFile
    lks313s Update Readme.md
    df319eg Initial commit
  1. 여기서 1938ys9 커밋을 되돌리기위해 다음 명령어를 실행한다.
 $ git revert 1938ys9

커밋 메세지 작성을 위해 에디터 환경변수의 에디터가 실행된다.

  Revert "Add newFile"
  This reverts commit 1938ysbac01f0ef6bee04ae4f40c3dd8e5bf1d552.
  1. 기본 메세지 그대로 저장후 에디터를 종료한다. 로그를 확인해보면, 다음과 같이 Revert 커밋이 추가되어 있다.
   $ git log --oneline
    9wksl8l (HEAD -> main) Revert "Add newFile"
    1938ys9 (origin/main) Add newFile
    lks313s Update Readme.md
    df319eg Initial commit

😵 커밋했는데 수정 하나를 빠트렸다.

or 커밋메세지 잘못 썼다.

🔥 커밋 덮어쓰기: git commit --amend -m <COMMIT_MESSAGE>

amend 옵션은 스테이징에 추가된 내용을 반영할 뿐 아니라, 커밋메세지도 업데이트 변경한다. 따라서 변경 내용이 없어도, 커밋메세지만 바꾸고 싶을때 사용할 수 있다.




[ 참고자료 ]

profile
Front-end Developer. 자바스크립트 파헤치기에 주력하고 있습니다 🌴

0개의 댓글