본문 바로가기
인턴/준비

Git #3 Revert, reset and restore

by 사향낭 2022. 12. 30.
 

Git Theory - 3 - revert, reset and restore

This part of Git series covers checkout, revert, reset and restore

bobbydreamer.com

 

우리가 실생활에서 컴퓨터를 사용할 때 undo, redo를 자주 하듯이 git도 이를 지원한다.

(redo가 ctrl + y인지 처음 알았는데 잘 써먹어야지)

 

이를 위한 명령어 종류는 그리 많지 않은데 case 설명이 길다.

 

 

 

  • git checkout
    • 1. index/staging 상태로 working directory를 업데이트 한다.
    • 2. HEAD를 다른 branch나 commit으로 옮긴다.
    • 여기서는 기능 1을 사용하는 방법에 대해서만 설명하였다. 
    • git checkout -- file : working directory 안의 특정 파일 혹은 폴더를 staging 상태로 업데이트한다.
    • git checkout HEAD -- file : working directory 안과 stage 안의 특정 파일 혹은 폴더를 지금 HEAD가 가리키고 있는 commit 상태로 업데이트한다.

 

  • git reset
    • 세 가지 type의 git reset이 있다.
    • Soft : working directory와 staging area를 건드리지 않고 HEAD만 옮긴다. HEAD가 가리키는 commit의 내용과 staging area의 내용이 달라지므로 git status에 변화가 생길 수 있다.
    • Mixed : 특정 commit으로 HEAD를 변경하고 그 시점으로 staging area를 되돌린다.
    • Hard : 특정 commit으로 HEAD를 변경하고 그 시점으로 staging area, working directory를 되돌린다.
    • HEAD를 옮겼을 때 parent commit을 잃어버리는 orphan commit에 대해 git에서는 default로 30일동안의 유예기간을 제공한다.
    • git reflog로 branch update 기록을 확인할 수 있다.
      (HEAD를 옮긴 후 이전의 commit으로 HEAD를 이동하고 싶을 때 유용하게 사용가능할듯)
    • 이전에 git stash를 언제 사용할지 모르겠다는 이야기를 한 적이 있는데 git reset --hard가 working directory의 변화를 아예 날려버리기 때문에 이 때 사용하면 좋을 것 같다.
    • article에서는 git stash -u로 변경사항을 모두 저장한 뒤 git reset --hard를 사용하기를 권장한다.
    • commit하기 애매한 수정이 있을 때에도 git stash를 사용한다고 한다.

 

  • git revert
    • 특정 commit 이전으로 상태를 돌리고 새로운 commit을 만든다.
    • 상태를 돌릴 때 conflict가 일어날 수 있다.
    • 이해가 잘 안돼서 좀 많은 시간을 서치한 결과 특정 commit과 parent commit 사이의 diff에 따라 revert가 일어나는 것 같다.
    • 따라서 엄밀하게 이야기하자면 특정 commit과 그 parent간의 diff를 현재 상태로부터 되돌린다.
    • 그래서 HEAD의 내용이 특정 commit의 parent로부터 특정 commit이 달라진 부분의 특정 commit의 parent의 내용과 차이가 있다면 conflict가 일어나는 듯
      (너무 장황한데..)
    • 참조 : https://stackoverflow.com/questions/46275070/why-do-i-get-conflicts-when-i-do-git-revert
    • git restore
    • 특정 index 혹은 commit 상태로 working directory를 복원한다.
    • git restore abc.txt : abc.txt를 index의 버전과 일치하도록 만든다.
    • git restore --staged abc.txt : index 안의 abc.txt를 HEAD의 버전과 일치하도록 만든다.
    • git restore --source=HEAD --staged --worktree abc.txt : index와 working tree 둘 모두를 복원시킨다.
      (equlvalent to  git reset --hard )

 

어렵다.

'인턴 > 준비' 카테고리의 다른 글

Go Language #2  (0) 2023.01.06
Git #4 Branching  (0) 2022.12.31
Git #2 Basics  (1) 2022.12.29
Git #1 Origins story and terms  (0) 2022.12.27
Go Language #1  (0) 2022.12.16

댓글