본문 바로가기
Git

[Git 깃] git checkout

by 까망 하르방 2021. 3. 13.
반응형

git checkout

git checkout은 크게 두 가지 기능을 한다.

    - Branch 혹은 Commit 전환 (switch)

    - 내용 되돌리기 (restore)

 

특정 Branch로 이동하기

git checkout {Branch Name}

 

특정 Branch 생성 후 해당 Branch로 이동

git checkout -b {New Branch Name}

 

특정 branch 에서 파생 branch로 만들어서 해당 branch로 이동

$ git checkout -b {Branch Name} {Base Branch Name}

 

모든 변경 사항을 취소

git checkout .

대상: 아직 add / commit 되지 않은 내용 (Working Directory에 있는 변경 내용)

 되돌리고 싶은 파일은 추적 되고 있어야 한다.

* checkout으로 지워버린 내용은, commit하지 않고 지운 내용이기 때문에 다시 복구할 수 없다.

 

특정 파일에서 작업한 내용 삭제 

git checkout -- {File Name}

- 대상: 아직 add / commit 되지 않은 소스 (Working Directory에 있는 변경 내용)

- 추적되고 있는 파일명이어야 한다.

 

특정 Commit 버전으로 전환

git checkout {Commit Hash}

- 아직 Commit 하지 않은 내용이 있다면 전환되지 않는다.

 

시뮬레이션

특정 Branch로 이동하기

git checkout {Branch Name}

※ git branch로 생성한 branch  목록을 알 수 있다.

 

특정 Branch 생성 후 해당 Branch로 이동

git checkout -b {New Branch Name}

"{Branch Name}" 라는 브랜치를 새롭게 생성하는 동시에 해당 브랜치로 전환한다.

브랜치가 존재하지 않는다면 branch를 새로 생성한 후 checkout 해야 하는데

-b 옵션을 통해서 명령어 한개로 처리할 수 있다.

 

특정 branch 에서 파생 branch로 만들어서 해당 branch로 이동

    ※ 특정 branch (= base branch)가 현재 위치한 브랜치가 아닐 때 사용

$ git checkout -b {Branch Name} {Base Branch Name}

① 현재 "imsi" 라는 브랜치에 위치한다

② "suwon" 이라는 브랜치에 파생 브랜치로 "test" 라는 브랜치를  생성하고, checkout 한다.

③ 다시 상태를 확인했을 때, "test"로 위치 되어 있는 것을 확인할 수 있다.

 

모든 변경 사항을 취소

    - 대상: 아직 add / commit 되지 않은 내용 (Working Directory에 있는 변경 내용)

    - 되돌리고 싶은 파일은 추적 되고 있어야 한다.

    * checkout으로 지워버린 내용은, commit하지 않고 지운 내용이기 때문에 다시 복구할 수 없다.

git checkout .

비교해보면 "(D) Modify (Not Add).."만 내용 삭제 되었다.

즉, add 이후로는 삭제되지 않고 있으며, Code 작업 후 add하지 않은 내용만 삭제

 

특정 파일에서 작업한 내용 삭제 

    - 대상: 아직 add / commit 되지 않은 소스 (Working Directory에 있는 변경 내용)

    - 추적되고 있는 파일명이어야 한다.

git checkout -- {File Name}

 

특정 Commit 버전으로 전환

    - 아직 Commit 하지 않은 내용이 있다면 전환되지 않는다.

git checkout {Commit Hash}

Commit Hash는 git log 명령어로 확인할 수 있다.

 

해당 Commit 시점으로 이동되며, 임시 Branch에 속해져 있는 것을 확인할 수 있다.

원활한 작업을 위해서 해당 시점에서 새로운 Branch를 만들어서 작업할 수도 있다.

 

※ Commit ID 대신에 "~"나 "^"와 같은 상대적 경로를 이용할 수 있다.

- 한번에 한 커밋 위로 움직이는 ^

- 한번에 여러 커밋 위로 올라가는 ~<num>

 

직전 Commit으로 이동

git checkout HEAD^

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 관련 내용 URL을 정리한 곳입니다. 목록 [Git] "git add -p" 를 활용하는 이유 [Git] .gitignore 설정 [Git] learngitbranching 답안 및 풀이 - 1 [Git] learngitbranching 답안 및 풀이 -..

zoosso.tistory.com

반응형

'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

댓글