이전 커밋으로 되돌리기

dev bourgeois·2024년 8월 16일

git

목록 보기
10/11
post-thumbnail

이전 커밋으로 되돌아갈 수 있다!!
이 중요한 사실을 이제야 알았다..
문제 생겨서 되돌아가고 싶을 때 사용하면 된다.
이래서 깃허브 커밋을 자주해야 되나보다.


git reset

  • 현재 브랜치에서 HEAD를 이동시키는 데 사용된다.
  • 인자 없이 git reset만 입력하면, 기본적으로 --mixed 옵션이 적용되며, 이는 워킹 디렉토리를 유지하면서 인덱스(스테이징 영역)를 변경한다.
  • 잘못된 변경 사항을 취소하거나 커밋을 되돌릴 때 사용한다.

➡️ 이 명령어만 입력하면 아무 변화도 발생하지 않는다. 단지 명령어만 실행될 뿐이다.
그렇다면 단독으로 쓰이는 상황은 없나?🤔


❇️ 스테이징된 파일을 해제할 때 유용하다!

실수로 너무 많은 파일을 git add로 스테이징했을 때,
git reset 명령어를 통해 스테이징된 파일들을 한 번에 해제할 수 있다!

git add .  # 실수로 많은 파일을 스테이징함
git reset  # 스테이징 영역을 초기화, 파일 변경 사항은 유지됨

그럼에도 git reset이 무의미 할 때가 있다.
만약 이미 모든 스테이징 영역이 비어 있고, 작업 디렉토리에도 변경 사항이 없다면 아무 영향을 미치지 않는다.
상황에 따라서 유용할 수도, 무의미 할 수도 있다!

git reset --hard

  • 현재 브랜치의 HEAD를 마지막 커밋으로 강제로 되돌린다.
  • 이 명령어를 사용하면 현재 작업 중인 변경 사항이 모두 삭제되며, 되돌릴 수 없다. 워킹 디렉토리와 인덱스가 마지막 커밋 상태로 되돌아간다.

git reflog

  • HEAD가 변경된 모든 기록을 보여준다.
  • 이 기록에는 브랜치 이동, 리셋, 체크아웃, 리베이스 등
    (언제 체크아웃되었는지, 리셋되었는지)의 모든 작업이 포함된다.
  • 각 항목은 HEAD가 어디로 이동했는지를 보여주며, 이러한 기록을 통해 사용자는 특정 시점으로 되돌아가거나 복구할 수 있다.



직접 사용한 코드를 보며 다시 정리해보면

git reset : 아무런 인자 없이 실행되었기 때문에 특별한 동작이 일어나지 않았다.

오타난 건 넘어가고

git reset --hard : 현재 브랜치의 HEAD를 마지막 커밋으로 강제로 되돌려 작업 중이던 변경 사항은 모두 사라지며, 워킹 디렉토리와 인덱스가 마지막 커밋 상태로 되돌아간다.

git reflog : 최근 HEAD가 변경된 기록을 확인한다. HEAD의 이동 기록을 보여주며, reset 명령으로 인해 HEAD가 몇 번 이동했는지 알 수 있다.
여기서 HEAD가 여러 번 동일한 커밋 b7ee34c으로 리셋된 것을 확인할 수 있다.

git reset --hard 550c034 : 이전 커밋(550c034)으로 강제로 되돌렸다. 이 커밋은 reflog에서 5번째 항목으로, develop 브랜치의 상태로 돌아가는 작업이다.
이제 HEAD는 550c034 커밋으로 이동했다.


❇️ 요약
git reflog를 통해 HEAD의 이동 기록을 확인하고, 다시 이전 커밋(550c034)으로 되돌렸다!

0개의 댓글