Computer >> 컴퓨터 >  >> 프로그래밍 >> 프로그래밍

Git Pull 되돌리기: git reset으로 취소하는 방법

git pull 명령어는 원격 저장소에 반영된 변경 사항을 가져와 로컬 머신에 다운로드할 수 있게 해주는 도구입니다. 하지만 pull 이후 변경 사항을 아직 반영하고 싶지 않다면 어떻게 해야 할까요? 이럴 때 git reset 명령어를 사용하면 됩니다. reset 명령어는 저장소를 히스토리상의 이전 시점으로 되돌리는 기능을 합니다.

이 가이드에서는 git reset 명령어를 활용해 git pull 작업을 되돌리는 방법을 실제 예제와 함께 단계별로 살펴보겠습니다.

Git Pull의 동작 원리

git pull 명령어는 로컬 저장소를 원격 저장소와 동일한 최신 상태로 업데이트합니다.

git pull을 실행하면 Git은 먼저 git fetch 명령어를 호출해 원격 저장소에 새로운 변경 사항이 있는지 확인합니다. 변경 사항이 존재한다면 fetch가 해당 변경 사항의 메타데이터를 가져옵니다.

그다음 git pull은 git merge를 실행합니다. 이 과정에서 fetch로 발견된 변경 사항들이 로컬 환경에 병합됩니다. 즉, git pull을 실행하면 로컬 저장소가 원격 저장소와 일치하도록 변경되는 것입니다.

Git Pull 되돌리기

git pull을 직접적으로 취소하는 전용 명령어는 없습니다. 대신 git reset을 사용하면 저장소를 이전 커밋 상태로 되돌릴 수 있습니다.

실습을 위해 ck-git이라는 프로젝트를 진행 중이라고 가정해 보겠습니다. 협업자가 GitHub에 저장된 원격 프로젝트에 새로운 커밋을 푸시했고, 우리는 이 변경 사항을 가져오려고 합니다.

변경 사항을 가져오기 위해 다음과 같이 git pull 명령어를 실행합니다:

git pull

명령어를 실행하면 원격 저장소에서 메타데이터를 가져와 변경 사항을 로컬 머신에 다운로드했다는 메시지가 출력됩니다:

remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), done.
From https://github.com/career-karma-tutorials/ck-git
   77e7fc0..a8336fa  master     -> origin/master
Updating 77e7fc0..a8336fa
Fast-forward
 README.md | 1 +
 1 file changed, 1 insertion(+)

master 브랜치에서 변경된 유일한 파일은 README.md입니다. 이 파일에는 이전 커밋에는 없던 한 줄의 텍스트가 추가되었습니다.

그런데 이 변경 사항을 아직 로컬 저장소에 반영할 준비가 되지 않았다면 어떻게 해야 할까요? 이 작업을 되돌리려면 git reset을 실행해야 합니다.

실행 전 주의사항

git reset을 실행하기 전에 반드시 알아두어야 할 점이 있습니다. 이 명령어는 저장소에 커밋하지 않은 모든 변경 사항을 삭제합니다. 따라서 reset을 실행하기 전에 보존하고 싶은 변경 사항이 있다면 미리 커밋해 두어야 합니다.

이제 git reset 명령어를 실행해 마지막 커밋 시점의 저장소 상태로 되돌려 보겠습니다:

git reset 77e7fc0 --hard

이 명령어는 저장소를 마지막 커밋 당시의 상태로 되돌립니다:

Unstaged changes after reset:
M    README.md

여기서 --hard 플래그는 특정 커밋 시점의 코드 내용으로 작업 디렉터리까지 함께 변경하겠다는 의미입니다.

HEAD를 활용한 방법

커밋 해시를 직접 입력하는 대신 HEAD 문법을 사용해 되돌아갈 시점을 지정할 수도 있습니다:

git reset HEAD~1 --hard

이 명령문은 저장소를 한 커밋 뒤로 되돌립니다. 숫자 1을 조절하면 더 많은 커밋을 거슬러 올라갈 수 있습니다.

이제 README.md 파일은 마지막 커밋 당시의 상태로 복원되었습니다. 다만 주의할 점이 있습니다. 만약 git pull을 실행하기 전에 커밋하지 않은 파일 변경 사항이 있었다면, 그 변경 사항은 더 이상 접근할 수 없습니다. Git은 커밋된 변경 사항만 저장하기 때문입니다.

마무리

git reset 명령어를 사용하면 git pull 작업을 손쉽게 되돌릴 수 있습니다. git reset은 저장소를 히스토리상의 특정 시점으로 초기화하는 역할을 합니다.

다만, git pull을 실행하기 전에 커밋하지 않은 변경 사항이 있었다면 reset 이후 해당 변경 사항은 사라진다는 점을 기억하세요. 따라서 git reset을 실행하기 전에는 반드시 저장해야 할 변경 사항을 모두 커밋했는지 확인하는 습관이 중요합니다.

이제 여러분도 전문가처럼 git pull을 안전하게 되돌릴 수 있습니다!