본문 바로가기
Git/Git 명령어

[Git] Git에서 특정 커밋 시점으로 되돌리기 - Git 명령어 3

by 볼링치는 개발자 2021. 1. 11.
반응형

이번 포스팅에서는 Git에서 이전에 커밋한 내용들을 다루고 프로젝트의 상태를 특정 커밋의 시점으로 되돌리는 방법에 대해 포스팅해보려 합니다.


이번 포스팅 명령어 Preivew

git pull : 원격 저장소의 소스코드를 로컬 저장소로 그대로 가져옴 (git getch + git merge)

git fetch : 원격 저장소의 최신 이력 확인

git merge : 최신 이력을 확인한 branch와 병합

git log : Git의 커밋 및 푸시 내역을 확인하는 명령어

git reset : 이전의 커밋이 저장된 위치로 되돌아 가는 명령어

git push -f : push명령어 에러가 나도 강제로 원격 저장소에 반영하는 명령어


Git을 활용하여 프로젝트를 관리하다 보면, 특정 시점으로 프로젝트를 되돌리고 싶을 때가 올 수 있습니다.

 

먼저, git pull 명령어는 원격 저장소의 상태를 로컬 저장소에 가져오고 반영해주는 명령어입니다.

 

원격 저장소인 Github에서 github.txt라는 파일을 추가해 주겠습니다.

 

로컬 저장소로 돌아와 git pull 명령어를 입력해보겠습니다.

 

git pull

또 다른 명령어를 테스트하기 위해 원격 저장소인 Github에서 github2.txt 파일을 추가해줍니다

 

이번에는 git pull 명령어가 아닌 git fetch, git merge 명령어를 입력하겠습니다.

git fetch 명령어를 실행하고, git merge 명령어를 실행하는 것은 git pull 명령어를 한번 입력하는 것과 동일한 동작을 합니다.

git fetch, git merge

 

로컬 저장소로 돌아오면 github.txt 와 github2.txt가 반영되어 있는 것을 확인할 수 있습니다.

 

git pull, git fetch, git merge 명령어를 사용해 원격 저장소에 변경된 사항을 로컬 저장소에 적용시켜주는 실습을 해보았습니다.

 

git pull : 원격 저장소의 소스코드를 로컬 저장소로 그대로 가져옴 (git getch + git merge)

git fetch : 원격 저장소의 최신 이력 확인

git merge : 최신 이력을 확인한 branch와 병합


이제 본격적으로 특정 커밋을 실행한 시점으로 되돌리기 위해 저는 기존 파일의 hello_world.txt를 수정했습니다.

 

bye world라는 문자열을 추가하고 git add, git commit, git push 해주었고,

good morning world라는 문자열을 추가하고 git add, git commit, git push 해주었습니다.

 

여태 까지 진행한 Git의 커밋들을 확인하기 위해서 git log라는 명령어를 사용합니다.

 

git log

git log : Git의 커밋 및 푸시 내역을 확인하는 명령어

 

사전에 제가 커밋한 bye world와 good morning world가 모두 저장되어 있는 것을 확인할 수 있습니다.

 

또한 노란색 박스로 표시되어있는 부분은 커밋의 해시 값입니다.

Git에서는 커밋을 이런 해시 값을 사용해 관리합니다.

 

자 그럼 bye world라는 문자열을 추가했을 때의 상태로 돌아가 보겠습니다.

 

이때 사용하는 명령어는 git reset명령어입니다.

 

git reset 명령어에 --hard 옵션을 추가해 사용하면, 원하는 시점으로 이동하고, 그 이후 커밋들은 모두 사라지게 됩니다.

만약 원하는 시점으로 돌아가고 이후 커밋들을 유지하려면 --soft 옵션,

돌아간 이후 변경 내역들이 남아있지만 인덱스 값들이 초기화되게 하려면 --mixed옵션을 부여하면 됩니다.

기본 옵션은 --mixed 옵션입니다.

 

git reset : 이전의 커밋이 저장된 위치로 되돌아 가는 명령어

 

다음과 같이 Git Bash에 git reset --hard [이동하고 싶은 시점의 커밋 해시 값]을 입력해줍니다.

 

git reset --hard

결과적으로 hello_world.txt 파일이 bye world 문자열을 추가한 시점으로 이동해 good morning world문자열이 사라졌음을 확인할 수 있습니다.

 

이렇게 커밋의 캐시 값을 통해 파일을 원하는 시점에서의 상태로 되돌렸습니다.

현재 프로젝트의 hello_world.txt 파일은 원격 저장소의 hello_world.txt 파일과 상태가 달라 git push명령어를 입력하면 에러가 날 것입니다.

 

한번 git push 명령어를 입력해 보겠습니다.

 

git push

이는 git push -f 명령어로 강제로 원격 저장소에 반영할 수 있습니다.

 

git push -f : push명령어 에러가 나도 강제로 원격 저장소에 반영하는 명령어

반응형

댓글