git checkout <커밋 해시 ID>
: 특정 커밋으로 되돌아감
헤드는 특정 커밋을 참조하는 것이 아닌 브랜치를 참조 해야 하지만,
이전 커밋을 체크아웃 할 때 실제로 하는 일은 헤드가 커밋을 참조하도록 바꿈(헤드가 분리됨)
git checkout <브랜치>
: 특정 브랜치로 변경
커밋으로 되돌아갔다가 브랜치로 변경하여 헤드를 연결 할 수 있음.
헤드는 브랜치를 참조 해야 하므로 되돌아가야 하기 때문
git checkout HEAD~1
: 헤드에서 1개 이전 커밋(1=1개, 2=2개…)
직전 커밋에서 한 일을 참조해야하는데 그 커밋 해시를 찾아보기 싫은 경우 사용
git checkout -
: 어느 브랜치에 있었는지 기억나지 않을 때 사용하면 떠났던 브랜치로 돌아감
체크아웃 명령은 파일의 변경사항을 취소할 수 있는데, 기본적으로 이전에 커밋했던 때로 돌아감
git checkout HEAD <파일명>
| git checkout -- <파일명>
: 깃에게 무엇이든 파일명 안에 있는 것을 취하라고 명령, 파일명 여러 개 입력 가능
git checkout이 많은 부담을 가지고 있기 때문에 git switch, git restore가 부담을 덜어줌
git restore
: 마지막 커밋 이후 저장소의 변경 사항을 삭제
git restore <파일명>
: 가장 최근의 커밋으로 돌아감
git restore --source HEAD~1 <파일명>
: 커밋 개수만큼 이전의 모습으로 복원 가능(현재 커밋되지 않은 변경사항을 제거하는 것이 확실한 경우에만 사용)
어떤 파일에 API 키나 신용카드 번호 같은 것이 들어갔는데 git add를 한 상태
이 파일을 스테이지 하고 싶지 않은 것을 깨달았고,
git ignore를 쓰면 되지만, 작업을 많이 해서 변경 사항을 여러개의 커밋으로 분할 해야 함.
스테이지 하고 싶지 않은 파일이 추가되어 제거하고 싶은 경우도 있음.
git restore --staged <파일명>
: 실수로 어떤 파일을 스테이지해서 다음 커밋에 포함될 건데 그렇게 하고 싶지 않은 경우
마스터 브랜치에서 작업을 하던 중 마지막 커밋 3개가 마스터 프랜치에 있어서는 안되는 것을 깨달음
그것들을 다른 브랜치에 넣고 마스터에서는 제거
git reset
: 저장소를 특정 커밋으로 다시 재설정
git reset <커밋 해시 ID>
: 커밋 해시가 무엇이든 거기로 저장소를 재설정git reset <커밋 해시 ID>
를 입력할 경우 특정 커밋 이후 내용이 레포지토리 영역에서 사라짐git switch -c 브랜치명
) 스테이징 영역에 올린 뒤 커밋(git add + git commit
)git reset --hard <커밋 해시 ID>
: 특정 커밋 이후의 커밋들을 잃는 명령어git revert <커밋 해시 ID>
: git reset은 커밋을 삭제시키지만, git revert는 변경 사항을 실행 취소하는 새로운 커밋을 만듬다른 사람들과 협력하는 겨우 문제가 될 수 있음
다른 사람들과 팀을 이루어 작업한다면, 모든 다른 컴퓨터를 이용할텐데 다른 모든 사람들이 잘못된 커밋의 복사본을 가지고 있고 내가 재설정으로 제거한다면, 심각한 문제가 될 수 있음(다른 사람들이 가진 기록을 취소하는 것이기 때문)
정리
Reset: 실수를 하고 커밋을 했을 때 다른 사람과 공유하지 않았을 경우
Revert: 공동 작업자가 커밋을 갖자마자 변경사항을 제거하고 싶을 때