[Git] 깃 커밋(Commit), 추가(Add) 상태 취소 명령

반응형

컴퓨터 소프트웨어 개발에 있어서 Git으로 형상관리 및 버전관리를 하는 것이 거의 일반화되어 있습니다. 개발자라면 필수적으로 알아야 하는 툴을 꼽자면 저는 그중에 형상관리 툴인 Git이 생각납니다. 요즘은 GUI 툴도 있고 깃허브(Github)사 에서 나온 Github 데크스톱이 너무 훌륭해서 CUI 환경을 잘 몰라도 되지만 우리가 실수를 한 경우에는 조금 중요해집니다. 오늘은 깃(Git)에서 사용하는 3가지 상태와 커밋(Commit)을 취소하는 방법에 대해서 알아보겠습니다.

 

Git의 3가지 상태

Git은 총 3가지의 상태를 가지고 있습니다. 그리고 다음과 같이 각 상태별로 지칭하는 영역이 달라집니다. 예를 들면 Staged 상태는 Staging area의 영역에 포함된 것이죠.

  • Modifed
  • Staged
  • Committed

만약 원격의 레파지토리에서 Clone을 한 상태라면 Working directory 즉, 작업 디렉토리 형태가 됩니다. 그 상태에서 특정 파일을 수정하거나 이동하면 modified 상태로 변합니다. 해당 상태를 Staged로 변경하기 위해서는 git add 명령을 이용해서 Staging area 영역으로 올립니다. 아직 Commit을 하지 않은 상태이므로 Staged 상태가 됩니다. 이때 만약 git commit 명령을 사용해서 Staging area에서 Repository로 변경한다면 Committed 상태로 변경됩니다.

 

 ADD 취소 

 

 만약 다음과 같이 git add * 한 상태라면 Staged 상태입니다. 이때는 비교적 편리하게 reset 명령을 이용해서 초기화가 가능합니다.

git add * 명령 취소


 

 

 다음과 같이 reset 명령을 이용하거나 git reset HEAD [file명] 을 이용해서 초기화가 가능합니다. 해당 상태는 Untracked files 또는 Modified 상태로 변경되게 됩니다.

git reset 명령


 

 COMMIT 취소 

 

 만약 다음과 같이 커밋을 한 상황이라면 어떻게 해야할까요? 이 역시 reset 명령을 사용합니다. 대신 복구 시점을 지정해야 하죠. HEAD란 마지막 커밋 위치이며 ^ 기호가 최근 커밋이라는 의미입니다. ~n 값과 같이 특정 커밋을 지정하거나 commit 체크섬 값을 입력해도 됩니다. Commited 상태는 아직 Push 된 상태가 아니기 때문에 원격 git 서버에는 영향을 미치지 못합니다. 다음과 같은 방법으로 취소가 가능합니다.

  • git reset — soft HEAD^ : commit을 취소하고 staged 상태로 Working directory 영역으로 이동합니다.
  • git reset HEAD^ : 위의 결과와 비슷하지만 해당 상태를 staged상태로 변경하지 않고 add도 하지 않는 상태 즉, Untrackted files 또는 Modifed 상태로 변경합니다. (기본값, —mixed 옵션)
  • git reset HEAD~2 : n값에 따라서 마지막 커밋을 취소합니다.
  • git reset —hard HEAD^ : 커밋을 취소함은 물론 Unstaged 상태의 파일들을 Working Directory에서 제거합니다. (즉, 지금까지 작업한 모든 것을 날리고 최종 커밋 상태로 돌아갑니다.)

git reset HEAD^ 명령


 

 

다시 정리하자면 다음과 같습니다.

  • soft : 커밋 직전 상태로 초기화
  • mixed : 커밋 직전 상태로 초기화 함과 동시에 수정된 내용에 대해서 Untrackted files 또는 Modifed 상태로 변경
  • hard : 지금까지의 작업은 모두 삭제하고 이전 해당 커밋으로 리셋

 

Git을 사용하면 아주 치명적인 실수를 할 수도 있습니다. 보안상 중요한 비밀번호 또는 Key 같은 내용을 커밋후 서버로 Push 하던가 실수로 잘못된 소스를 업데이트하는 바람에 같은 팀원이 고통받을 수도 있죠. 이런 일을 미연에 방지하고자 Push에 대해서는 신중해야 합니다. 특히나 작업별 브랜치를 새로 만들지 않고 바로 메인 브랜치에서 작업하는 사람들이 많은데요. 절대로 좋은 방법이라고 할 수 없습니다. 사람은 누구나 실수를 하기 때문이죠. 더욱이 다양한 개발 경험을 가지고 있는 사람들과 함께 작업을 한다면 이런 실수를 방지하기 위해서라도 Git에 대해서는 잘 알아야 합니다. 특히 이런 상태, 복원에 대해서는 특히 잘 알아야 합니다.

 

다음 시간에는 Git에서 Push를 했을 경우 어떻게 복원을 해야 하는 가에 대해서 알아보도록 하겠습니다.

 

감사합니다.

 

반응형

댓글

Designed by JB FACTORY