글쓰는 개발자

[Git]Git-CLI 버전관리 with 생활코딩 - 4.버전 삭제/되돌리기 본문

Development/Software Engineering

[Git]Git-CLI 버전관리 with 생활코딩 - 4.버전 삭제/되돌리기

개발하자 2019. 4. 21. 21:25

지금까지 git을 초기화하고, 버전을 만들고, 각 버전들이 만들어진 시점으로 이동까지 해보았다.

이제 버전을 삭제하거나 그 이전의 버전으로 되돌려보는 작업만 해보면, 버전 관리 툴로써의 git은 어느 정도 살펴본 셈이다.

추가적인 세부기능은 늘 그렇듯 검색을 통해 알아가고 익숙해지는 것만이 답이다.

각설하고, 시작해봅시다.

 

commit을 삭제하는 작업에 대해서는, 신중하란 말을 몇 번을 해도 과하지 않다고 생각한다.

일정 기간동안의 작업 기록을 모두 날려버리는 것이기 때문이다. 정말 필요한 경우에만 삭제하도록 하자.

 

git log를 살펴보자.

$ git log --all --oneline

5833a88 (HEAD -> master) Version3
a23df4a Version2
bd66197 Version1

git을 삭제하는 명령어는 reset이다.

이때 reset의 개념에 대해 정확하게 숙지해야 할 부분이 있다.

git reset [삭제할 버전]의 형식이 아니라, git reset [돌아갈 버전] 의 형식으로 사용한다는 점이다.

우리의 버전을 예로 Version 3을 삭제하기 위해서는 git reset [Version2] 가 되어야 version3가 삭제된다.

굉장히 헷갈리는 부분이기에 몇 번씩 연습해보고 사용하길 바람!!

 

그럼, Version3를 삭제해보자.

$ git reset --hard a23df4a

HEAD is now at a23df4a Version2


$ git log --all --oneline

a23df4a (HEAD -> master) Version2
bd66197 Version1

버전 삭제가 완료되었다.

여기서 잠깐 reset의 옵션인 hard, mixed, soft에 대해서 간단하게 설명하고 넘어가겠다.

세 가지 옵션 모두 다 commit을 삭제하는 것은 동일하다.

위의 reset 옵션에 hard/mixed/soft 뭘 붙여도 Version 3의 commit은 사라진다.

 

차이점은 Version2 이후의 수정 내용이 얼마나 남아있느냐이다.

soft는 commit이 삭제되고 Version2 이후의 수정 내용이 Staging Area에 올라가 있는 상태이다.

commit만 하면 바로 Version 3가 생성된다.

mixed는 commit이 삭제되고 Version2 이후의 수정 내용이 Working Tree에 남아있는 상태이다.

수정 내용을 Staging Area에 올리고 commit을 하면 Version 3가 생성된다.

hard는 commit이 삭제되며 Version2 이후의 수정 내용 또한 삭제된다.

즉 hard>mixed>soft 순으로 강력하게 버전을 삭제한다.

용도를 정확하게 숙지하고 적절한 상황에 버전을 삭제할 수 있는 git 유저가 되도록 하자.

 

이제 삭제도 잘 되니 끝내도 될 것 같지만, 무엇인가 찝찝하다.

만약에, 정말로 만약에 아주 먼 미래에 Version 3가 필요한 일이 생길 수 있지 않을까? 그러면 어떡하지?

사람 일이란 모르는 거니까. 보험이 괜히 있는 게 아니다. 그렇지만 이미 Version 3는 어딘가로 사라져 버렸다.

앞으로 이런 일이 또 생기게 될지 모르니 다음부터는 보험을 들어놔야겠다.

우리 git에게도 보험을 들어놓는 삭제 기능이 있다. 바로 revert 기능이다.

revert는 삭제한 내용을 '기록'한다. 참 기발한 방법이지 않은가?

버전 정보를 삭제하는 것이 아니라, 삭제된 버전을 만드는 것이다. 삭제를 가장한 버전 생성이라는 말이다.

한 번 해보자. revert는 reset과 다르게 삭제할 버전을 지정해주어야 한다. 차이점을 잘 숙지하도록 하자.

$ git log --all --oneline

a23df4a (HEAD -> master) Version2
bd66197 Version1


$ git revert a23df4a

[master fea7dc5] Revert "Version2"
2 files changed, 2 deletions(-)	    #텍스트 창 하나가 나올텐데, ctrl+x로 종료해주면 자동 commit된다.


$ git log --all --oneline

fea7dc5 (HEAD -> master) Revert "Version2"     #revert 버전 생성.
a23df4a Version2
bd66197 Version1

위의 fea7dc5는 Version2를 삭제한 내용이 적용된 commit이다.

이로써 Version2가 삭제되지는 않았지만, 삭제된 것과 같은 효과를 가지게 되었다.

참고할 점은, revert를 여러 번 해야 하는 경우에 가장 최신 버전부터 차례대로 해주어야 한다는 점이다.

예를 들어 Version 3에서 Version 1으로 돌아가려 하는 경우 Version 3, Version2를 차례대로 revert 해주어야 한다는 점이다.

그렇지 않으면 코드가 꼬여서 낭패를 볼 수 있다. 꼭 차례대로 revert 하자!


commit을 삭제하고, 되돌리는 기능까지 알아보았다.

다음 포스팅에서는 추가적인 기능들을 잠깐 살펴보고, 버전 관리 툴로써의 git 알아보기를 마치도록 하겠다.

 

 

[git 명령어 정리]

 

git init git을 사용할 디렉토리를 초기화(지정)한다.
git status Working Tree의 내용을 출력한다.
git add 파일을 Staging Area에 추가한다.
git commit Staging Area의 파일들을 Repository에 추가한다.(버전화)
git log 지금까지의 버전들을 살펴본다.
git checkout 원하는 시점의 버전으로 이동한다.
git reset

원하는 시점의 버전으로 이동하는 동시에 해당 시점 이후의 버전들을 전부 삭제한다.

git revert 버전을 삭제한 효과를 적용한 commit을 생성한다.

 

자료 출처

생활코딩 GIT2 - CLI 버전관리 reset

생활코딩 GIT2 - CLI 버전관리 revert

반응형
Comments