thumbnail
Git 시작하기(5)
Git / Github
2022.02.03.

그럼 필요한 개념을 익혔으니 시간 축으로 프로젝트를 관리해보자. 시간 축 이동과 관련된 Git 명령어는 “checkout, reset, revert” 가 있다.

시간을 되돌리는 방법

1. checkout

checkout 명령어는 HAED가 가리키는 Branch를 전환하거나, Working tree의 파일들을 복구할 때 사용한다. 즉, Woring Directory의 상태를 Branch나 Commit으로 가져오는 역할의 명령어다.

git checkout <branch>
git checkout <commit-hash>
  • checkout 뒤에 인자로 Branch를 쓰면 HEAD가 Branch를 가리키고(=Attached HEAD State), Commit을 쓰면 HEAD가 Commit을 가리킨다(=Detached HEAD).
  • 인자로 pathspec을 쓰게 되면 해당 내역이 해당 브런치가 가리키는 버전으로 복구된다.
  • Untracked file 은 되돌리더라도 삭제되지 않는다.

2. reset

reset 명령어는 현재 작업중인(HEAD가 가리키는)Branch가 가리키는 Commit을 변경하는 데 사용된다.

git reset --hard <commit-hash>
git reset HEAD~10  // 현재 브런치가 가리키는 버전으로부터 -10 이동
  • unstaging 이나 commit reset의 기능으로 사용가능하다
  • soft, mixed, hard 세가지 옵션이 존재한다.
    • soft : HEAD가 가리키는 Branch를 이동한다, 리셋 이후의 커밋 내용들이 stage 상태로 존재
    • mixed(기본명령) : soft + “Index를 변경한다”, 리셋 이후의 커밋 내용들이 unstage 상태로 존재
    • hard : mixed + “working Tree를 변경한다”, 리셋 이후의 커밋 내용이 전부 삭제

> reset의 작동 확실하게 이해하기

3. revert

revert 명령어는 기존에 존재하는 버전을 취소, 복구(revert)하는데 사용된다. reset과 차이점이라면 해당 건 이후의 내역들은 유지한다는 것이다.

git revert <commit-hash>
  • revert 명령어는 이력을 새롭게 남겨주기 때문에 협업시 반드시 revert를 사용해야한다.
  • reset할 경우 remote repository와 동기화가 안되기 때문에 revert만 사용해야 push할 수 있다. (강제 push는 가능)
  • 충돌이 일어날 경우, 사용자가 직접 처리해줘야한다. (rm 등으로 처리 후 git revert --continue)
  • Commit을 되돌리고 싶을 경우 git revert --no-commit (commit-hash)를 사용하여 되돌린다.

reset의 작동 확실하게 이해하기” 에서 git init 부터 git reset 작동시 head, index, working directory 의 변화를 시각적으로 표현한 자료가 있는데, 이게 이해에 도움이 크게 되었다. 이제는 되돌리고 싶거나 버전을 이동이 필요할 시에 무지성으로 검색해서 하는 것이 아니라, 생각해보고 어떤 명령어를 이용할지 판단할 수 있겠다.


참조

Thank You for Visiting My Blog, Have a Good Day 😆
© 2022 Engineer Haesim, Powered By Gatsby.