Git - 되돌리기 또는 취소

3 분 소요

Git 명령어 취소하기: add 및 commit 되돌리기

Git을 사용하면서 가끔은 add나 commit 명령을 실행한 뒤, 변경 사항을 되돌리고 싶을 때가 있습니다. 여기서는 다양한 상황에서 Git 명령어를 취소하는 방법을 설명합니다.

1. git add . 실행 후 취소하고 싶은 경우

(1) 작업 디렉토리의 모든 변경사항을 스테이징 영역에 추가한 후, 이를 취소하고 싶다면 다음 명령어를 사용할 수 있습니다.

git reset

이 명령은 스테이징 영역에 추가된 모든 변경사항을 제거합니다.

(2) 특정 파일만 스테이징에서 제거하고 싶다면, 다음과 같이 파일명을 명시할 수 있습니다.

git reset

2. git add . 와 commit까지 한 후 모두 취소하고 싶은 경우

(1) 먼저 commit을 취소해야 합니다. commit을 취소하고 변경사항을 스테이징 영역에 남기려면 다음 명령을 사용합니다.

git reset –soft HEAD~1

(2) 이후 git add 명령을 취소하려면 다음을 실행합니다.

git reset

이렇게 하면 최근 커밋과 스테이징된 변경사항을 모두 취소할 수 있습니다.

3. git add .를 하고 코드를 수정한 후, git add된 파일을 취소하고 싶은 경우

이 경우에도 git reset 명령을 사용하여 특정 파일의 스테이징을 취소할 수 있습니다.

git reset

이 명령은 수정된 파일을 스테이징 영역에서 제거하지만, 작업 디렉토리의 변경사항은 그대로 유지됩니다. 그 후 다시 수정을 계속할 수 있습니다.

여러 번의 git add와 commit을 한 후 모든 변경 사항을 취소하고 처음 상태로 돌아가려면?

git reset 명령을 사용하여 특정 시점 이전으로 리포지토리의 상태를 되돌릴 수 있습니다. 다음은 몇 가지 방법을 설명합니다.

특정 커밋으로 리셋하기

Hard Reset

이 방법은 현재 HEAD를 특정 커밋으로 완전히 되돌립니다. 이 과정에서 스테이징 영역과 작업 디렉토리의 모든 변경사항을 삭제하고, 지정한 커밋의 상태로 작업 디렉토리를 복원합니다. 예를 들어, 처음 상태로 돌아가고 싶다면 처음 상태의 커밋 ID나 HEAD 포인터를 사용할 수 있습니다.

git reset –hard

여기서 는 되돌아가고 싶은 커밋의 고유 ID입니다. 만약 최초 상태로 돌아가고 싶다면, 처음 커밋의 ID를 찾아서 사용해야 합니다. 만약 최초 커밋 이전, 즉 아무 것도 커밋되지 않은 상태로 돌아가고 싶다면, 리포지토리의 초기화 직후 상태로는 돌릴 수 없으므로 새로운 리포지토리를 생성하는 것을 고려해야 할 수 있습니다.

커밋 이력 보기

커밋 ID를 찾기 위해서는 커밋 이력을 조회해야 할 수 있습니다. 이를 위해 다음 명령어를 사용할 수 있습니다.

git log

이 명령은 커밋 이력을 보여줍니다. 여기서 원하는 커밋의 ID를 찾아 git reset에 사용할 수 있습니다.

주의사항

git reset –hard는 매우 강력한 명령어로, 이전 커밋으로 되돌릴 때 해당 커밋 이후의 모든 변경사항을 영구적으로 삭제합니다. 따라서 이 명령을 사용하기 전에 중요한 데이터는 백업해두는 것이 좋습니다.

만약 원격 리포지토리에 이미 푸시된 커밋을 리셋하고 싶다면, 리셋 후에 git push –force를 사용해야 합니다. 그러나 이는 다른 협업자들에게 문제를 일으킬 수 있으므로 신중하게 사용해야 합니다.


–soft HEAD~1

Git에서 사용하는 git reset 명령어의 옵션 중 하나입니다. 이 옵션은 Git 리포지토리에서 최근 커밋을 취소하는 데 사용되며, 스테이징 영역(Staging Area)의 상태는 유지하면서 커밋만을 취소합니다.

HEAD와 HEAD~1의 의미

  • HEAD: 현재 체크아웃된 브랜치의 가장 최근 커밋을 가리킵니다.

  • HEAD~1: HEAD의 부모 커밋, 즉 바로 이전 커밋을 의미합니다.

git reset –soft HEAD~1의 동작

  • 커밋 취소: 이 명령을 실행하면 현재 브랜치의 HEAD가 한 단계 이전 커밋, 즉 HEAD~1로 이동합니다. 즉, 가장 최근의 커밋이 취소되는 효과를 가집니다.

  • 스테이징 영역 유지: –soft 옵션은 커밋된 변경사항을 스테이징 영역에 그대로 유지합니다. 즉, 변경사항은 여전히 커밋 준비가 완료된 상태로 남아 있게 됩니다. 따라서 이 변경사항들을 수정하거나 추가로 스테이징하거나 새로운 커밋을 만드는 데 사용할 수 있습니다.

  • 작업 디렉토리 불변: 작업 디렉토리의 파일들은 영향을 받지 않고 그대로 유지됩니다. 이는 git reset –soft가 스테이징 영역의 상태는 변경하지만, 작업 디렉토리의 파일에는 손대지 않기 때문입니다.

사용 예

git reset –soft HEAD~1 명령은 커밋을 잘못한 경우나, 커밋 메시지를 잘못 작성했을 때 유용하게 사용할 수 있습니다. 이를 통해 커밋을 취소하고, 스테이징된 상태를 유지한 채로 새로운 커밋을 다시 만들 수 있습니다. 예를 들어, 커밋 메시지를 수정하거나, 커밋에 포함될 파일을 조정하고자 할 때 사용됩니다.


git add와 commit의 효과와 Git의 구조

Git의 주요 구성 요소는 작업 디렉토리, 스테이징 영역, 그리고 리포지토리입니다. git add 명령은 작업 디렉토리의 변경사항을 스테이징 영역으로 이동시킵니다. 이후 git commit 명령은 스테이징 영역의 변경사항을 리포지토리에 확정하며, 이러한 각 커밋은 고유한 ID를 가지며 전체 프로젝트 이력의 일부가 됩니다.

태그: ,

카테고리:

업데이트:

댓글남기기