[Git] 변경사항 취소하기 및 시간여행
카테고리: git
태그: git
🎯Checkout 명령의 다양한 사용법
- 브랜치 Checkout (git switch 명령 사용 가능)
- 커밋 Checkout (Detached HEAD)
- 변경사항 폐기 (git restore 명령 사용 가능)
Detached HEAD
- 일반적으로 HEAD는 현재 브랜치를 참조합니다. 그리고 브랜치 참조는 커밋을 가리킵니다.
- 분리된 HEAD에서 HEAD는 특정 커밋을 직접 가리킵니다.
- 이 방법은 특정 커밋을 기반으로 새로운 브랜치를 만들거나, 특정 커밋 상태의 파일을 확인하기 위해 사용될 수 있습니다.
- 되돌아가려면
git switch -또는git switch <branch-name>,git checkout <branch-name>을 사용합니다.
변경사항 폐기
git checkout 명령을 사용하여 마지막 커밋으로부터 변경 된 내용을 삭제할 수도 있습니다.
$ git checkout HEAD <file1> <file2>
$ git checkout -- <file1> <file2>
git restore 첫 번째 용도
git restore는 변경사항 폐기와 같이 git checkout의 역할을 일부 수행합니다. git restore는 –source 매개 변수를 사용하여 HEAD 이외에 다른 소스를 사용할 수 있습니다. (–sourㅊe를 지정하지 않으면 HEAD가 기본 값)
$ git restore <file1> <file2>
$ git restore --source HEAD~2 <file>
git restore 두 번째 용도
git restore의 두 번째 용도는, 스테이지된 파일을 언스테이지하는 것입니다.
$ git restore --staged <file1> <file2>
🔎git reset vs git revert
git reset과git revert모두 특정 커밋을 실행 취소할 때 사용합니다git reset은 되돌아가려는 커밋 이후의 기록은 모두 삭제됩니다git revert는 되돌아가려는 커밋 이후의 기록을 모두 보존하고, 새로운 커밋을 만듭니다.- 새로운 커밋 생성 시에는 충돌이 발생할 수 있고, 이러한 경우 유지하려는 내용으로 파일 수정 후 수동으로 커밋 해야됩니다.
- 다른 사람들과 협업하는 환경에서
git reset을 실행하여 이미 공유된 특정 커밋을 삭제하게 되는 경우 merge 시 상황이 복잡해질 수 있습니다. - 따라서 다른 사람들에게 이미 공유된 커밋을 실행 취소하려고 하는 경우
git revert를 사용하는 것이 권장됩닏나. 공유되지 않은 커밋을 실행 취소하는 경우에는git reset을 사용해도 무방합니다.
👍 개인 공부 기록용 블로그입니다. 오류나 조언이 있으시면 언제든지 댓글 혹은 메일로 남겨주시면 감사하겠습니다! 😄
댓글남기기