git checkout
git checkout은 크게 두 가지 기능을 한다.
- Branch 혹은 Commit 전환 (switch)
- 내용 되돌리기 (restore)
특정 Branch로 이동하기
특정 Branch 생성 후 해당 Branch로 이동
특정 branch 에서 파생 branch로 만들어서 해당 branch로 이동
모든 변경 사항을 취소
- 대상: 아직 add / commit 되지 않은 내용 (Working Directory에 있는 변경 내용)
되돌리고 싶은 파일은 추적 되고 있어야 한다.
* checkout으로 지워버린 내용은, commit하지 않고 지운 내용이기 때문에 다시 복구할 수 없다.
특정 파일에서 작업한 내용 삭제
- 대상: 아직 add / commit 되지 않은 소스 (Working Directory에 있는 변경 내용)
- 추적되고 있는 파일명이어야 한다.
특정 Commit 버전으로 전환
- 아직 Commit 하지 않은 내용이 있다면 전환되지 않는다.
시뮬레이션
특정 Branch로 이동하기
※ git branch로 생성한 branch 목록을 알 수 있다.
특정 Branch 생성 후 해당 Branch로 이동
"{Branch Name}" 라는 브랜치를 새롭게 생성하는 동시에 해당 브랜치로 전환한다.
브랜치가 존재하지 않는다면 branch를 새로 생성한 후 checkout 해야 하는데
-b 옵션을 통해서 명령어 한개로 처리할 수 있다.
특정 branch 에서 파생 branch로 만들어서 해당 branch로 이동
※ 특정 branch (= base branch)가 현재 위치한 브랜치가 아닐 때 사용
① 현재 "imsi" 라는 브랜치에 위치한다
② "suwon" 이라는 브랜치에 파생 브랜치로 "test" 라는 브랜치를 생성하고, checkout 한다.
③ 다시 상태를 확인했을 때, "test"로 위치 되어 있는 것을 확인할 수 있다.
모든 변경 사항을 취소
- 대상: 아직 add / commit 되지 않은 내용 (Working Directory에 있는 변경 내용)
- 되돌리고 싶은 파일은 추적 되고 있어야 한다.
* checkout으로 지워버린 내용은, commit하지 않고 지운 내용이기 때문에 다시 복구할 수 없다.
비교해보면 "(D) Modify (Not Add).."만 내용 삭제 되었다.
즉, add 이후로는 삭제되지 않고 있으며, Code 작업 후 add하지 않은 내용만 삭제
특정 파일에서 작업한 내용 삭제
- 대상: 아직 add / commit 되지 않은 소스 (Working Directory에 있는 변경 내용)
- 추적되고 있는 파일명이어야 한다.
특정 Commit 버전으로 전환
- 아직 Commit 하지 않은 내용이 있다면 전환되지 않는다.
Commit Hash는 git log 명령어로 확인할 수 있다.
해당 Commit 시점으로 이동되며, 임시 Branch에 속해져 있는 것을 확인할 수 있다.
원활한 작업을 위해서 해당 시점에서 새로운 Branch를 만들어서 작업할 수도 있다.
※ Commit ID 대신에 "~"나 "^"와 같은 상대적 경로를 이용할 수 있다.
- 한번에 한 커밋 위로 움직이는 ^
- 한번에 여러 커밋 위로 올라가는 ~<num>
직전 Commit으로 이동
git checkout HEAD~1
주의해야 될 것은 상대적 경로를 이용하다보면 원하지 않는 지점에 안착할 수 있다.
아래와 같이 병합된 Commit에서는 다수의 부모 Commit이 존재하는데
이때 Git은 기본적으로 부모를 선택할 때 "첫" 부모를 따라갑니다.
따라서 한 단계씩 올라가는 작업을 하면 C7 → C6 → C2 → C1 → C0 으로 가지만
"^"를 숫자와 함께 사용하면 Default 동작대로 동작하지 않을 수 있다.
위와 같이 "C7"에서 4단계 이전으로 가고자할 때,
"C6 → C2 → C1 → C0"으로 가지 않고 "C6 → C5 → C4 → C3"으로 갈 수 있다.
$ git checkout HEAD~2^^
명확한 Commit Hash를 주는것이 좋다.
'Git' 카테고리의 다른 글
[Git 깃] git init (0) | 2021.03.13 |
---|---|
[Git 깃] git commit (0) | 2021.03.13 |
[깃 Git] git branch (2) | 2021.03.07 |
[Git] learngitbranching 사이트 (0) | 2021.03.07 |
[Git] GitHub 소스코드 올리기 (실습 포함) (0) | 2021.03.07 |
댓글