Image
CI\CD/Git

[Git] git checkout 이용해 commit 단위로 파일 제어하기

git checkout이용해 특정 commit으로 되돌리기

git checkout [commit hash] 를 통해 특정 commit으로 되돌릴 수 있다. 이때 [commit hash]는 모든 해시값을 써도 되고 앞 7자리 해시 값을 써도 된다.

 

git checkout [commit hash]

 

git checkout 예시

예를 들어 git log가 다음과 같은 경우 log의 커밋들 중 fourth commit으로 되돌리고 싶다고 해보자.

commit f0cdce562bef70fed30f392a18c82543aa2f126b (HEAD -> main)
Merge: 027f7aa 1709310
Author: Seyoung Cho <seyoungcho2@gmail.com>
Date:   Wed Jan 5 23:51:57 2022 +0900

    merge commit

commit 027f7aa0b6a2c917543b8643f6238c83ff9169f2
Author: Seyoung Cho <seyoungcho2@gmail.com>
Date:   Wed Jan 5 23:31:56 2022 +0900

    fifth commit

commit 1709310d63be62eeb48182032b6e64580994ef4c (feature-layout)
Author: Seyoung Cho <seyoungcho2@gmail.com>
Date:   Wed Jan 5 23:31:10 2022 +0900

    fourth commit

 

이때 우리는 [commit hash] 값에  "1709310d63be62eeb48182032b6e64580994ef4c" 을 써도 되고 "1709310"을 써도 된다.

git checkout 1709310d63be62eeb48182032b6e64580994ef4c
git checkout 1709310

 

*git log --oneline을 사용하면  아래와 같이 커밋해시가 7자리로 나온다. 맨 왼쪽의 값이 commit hash값이다.
f0cdce5 (HEAD -> main) merge commit
027f7aa fifth commit
1709310 (feature-layout) fourth commit​

 

 


 

 

HEAD commit으로 돌리기

우리는 git checkout HEAD 명령어를 통해 HEAD commit으로 변경사항을 되돌릴 수 있다.

git checkout HEAD

 

이것이 가능한 이유는 .git 폴더의 HEAD 파일이다. git은 .git 폴더의 HEAD파일에서 HEAD의 커밋 해시값에 대한 메타데이터를 저장하고 있다. 만약 git 명령어에서 HEAD를 사용하면 HEAD가 해당 커밋 해시값으로 치환되기 때문에 위의 명령어는 실제로 다음과 같이 동작한다.

git checkout [HEAD commit hash]

 

*만약 .git 폴더에서 HEAD 파일을 어떻게 인식하는지 궁금하다면 아래 글을 참고하길 바란다.

 

[Git] .git 내부에서 HEAD를 인식하는 방법

.git 내부에서 HEAD를 인식하는 방법 .git 내부에는 HEAD파일이 있다. 이 파일은 HEAD를 인식하기 위한 메타 데이터를 저장하는 파일이다. 작업 중인 브랜치에 따라 변하는 HEAD파일 HEAD 파일은 현재

kotlinworld.com

 

 

HEAD commit에서 n개 이전 커밋으로 되돌리기

우리는 git checkout HEAD~n 명령어를 이용해 HEAD commit에서 n개 이전 커밋으로 되돌릴 수 있다.

git checkout HEAD~n

 

예를 들어 아래와 같은 git log가 있는 경우를 생각해보자.

commit f0cdce562bef7012fe4f392a18c62543aa2f126b (HEAD -> main)
Merge: 027f7aa 1709310
Author: Seyoung Cho <seyoungcho2@gmail.com>
Date:   Wed Jan 5 23:51:57 2022 +0900

    HEAD commit

commit 027f7aa0b6a2c917543b8643f6238c83ff9169f5
Author: Seyoung Cho <seyoungcho2@gmail.com>
Date:   Wed Jan 5 23:31:56 2022 +0900

    fifth commit

 

만약 fifth commit으로 커밋 해시를 되돌리고 싶은 경우 HEAD로부터 1개 전이므로 다음과 같은 명령어를 사용할 수 있다.

git checkout HEAD~1

 

 


 

 

특정 파일만 특정 커밋으로 되돌리기

우리는 git checkout [commit hash] [file name] 을 이용해 특정 파일만 특정 커밋으로 되돌릴 수 있다.

git checkout [commit hash] [file name]

 

예를 들어 아래와 같은 커밋이 있다고 해보자.

➜  GitFolder3 git:(main) ✗ git log --oneline      

f0cdce5 (HEAD -> main) merge commit
027f7aa fifth commit
1709310 (feature-layout) fourth commit
d8ebc87 (feature-view) third commit
4c7e3dd second commit
1bb1b52 first commit

 

 aa파일만 second commit(4c7e3dd)로 돌리고 싶다면 다음과 같이 작성하면 된다.

➜  GitFolder3 git:(main) git checkout d8ebc87 aa
Updated 1 path from 4dbbe18

 

반응형

 

이 글의 저작권은 '조세영의 Kotlin World' 에 있습니다. 글, 이미지 무단 재배포 및 변경을 금지합니다.

 

 

Kotlin, Android, Spring 사용자 오픈 카톡

오셔서 궁금한 점을 질문해보세요!
비밀번호 : kotlin22

open.kakao.com