[생활코딩] 형상관리/GIT2 CLI

GIT2 - 삭제(git reset), 되돌리기(git revert), 수업을 마치며

Ben의 프로그램 2023. 5. 11. 22:08
728x90

삭제 git reset 

현재 우리의 파일은 위와 같은 상황입니다. 이런 상황에서 여러분이 Message 6 버전을 지우고 Message 4 버전이 되고 싶다면 어떻게 해야 할까요? 그러면 여러분은 Message 4 버전으로 reset 해야 합니다. 

 

여기서 많이 헷갈리는 부분이 한 가지 있는데요. Message 4 버전, 즉 5ccaed 버전을 reset 한다는 얘기는 해당 버전을 삭제한다가 아니라 해당 버전으로 돌아간다는 것을 의미합니다.

git reset --hard 5ccaed02a5afc465471eadd902a86c9cff6f7b45

git reset --hard (버전 코드) 이렇게 입력을 하게 되면 해당 버전으로 돌아가면서 나머지 버전을 삭제하게 됩니다. git log를 찍어보면 Message 4 이후의 버전은 삭제된 것을 알 수 있습니다. 

 

reset 뒤에 --hard 라고 적었는데요. 사용법을 한번 보겠습니다. 

git reset --help

git reset --help 라고 입력하면 사용 설명서를 볼 수 있는데요.

이런 웹 문서가 하나 나오는 것을 볼 수 있습니다. git reset 뒤에는 soft, mixed, hard 등이 있는데, 이런 것들을 저도 몰라요. 소위 mode라고 하는 것들입니다. 우리가 했던 것은 --hard 였죠. --hard 는 해당 버전 이후에 작성된 버전들을 지울 뿐만 아니라 우리가 현재 working Tree 에서 작업하던 내용들 마저도 다 되돌리는 것을 의미합니다. 가장 강력한 지우기 기능입니다. 

 

만약, 버전들만 지우고 우리가 지금 작성하고 있는 내용들은 살리고 싶다면 --soft 또는 --mixed 로 바꾸면 된다는 것 정도만 슬쩍 알아놓고 지나가면 될 것 같습니다. 지금은 그정도만 알아도 충분합니다. 또한, 우리가 협업을 할 때는, 즉 공유된 파일에 대해서는 reset 을 하면 안됩니다. 공유 되기 전 단계에 버전들만 reset 해야 합니다. 안그러면 엉키면서 버그가 발생하는 일이 생기게 됩니다. 

 

되돌리기 git revert

  • revert 는 reset 과 마찬가지로 과거로 돌아가는 것은 같지만, 삭제만 하는 것이 아니라 삭제의 목적과 보존의 목적을 동시에 달성할 수 있습니다. 

  • 일단 현재 우리의 버전 상태는 위와 같습니다. 만약 Message 3 버전으로 돌아가고 Message 4 를 삭제하고 싶다면 reset 은 Message 3 의 버전 코드를 사용하여 해당 버전으로 갑니다. 하지만, revert 를 사용할 때는 Message 4 의 버전 코드를 사용해야 합니다. ( Message 3 상태가 되려면 Message 4 버전 코드가 필요합니다 )
git revert 5ccaed02a5afc465471eadd902a86c9cff6f7b45
  • git revert 5ccaed02a5afc465471eadd902a86c9cff6f7b45 라고 입력하고 엔터를 치면, 기본 에디터가 실행되면서 해당 버전에 대한 commit message 를 입력하라고 창이 뜨게 됩니다.

  • 첫 줄에 보면 이 창이 왜 뜨게 되었는지 설명을 해줍니다. Revert "Message 4" 라고 말이죠. 이제 우리는 첫 줄에 commit Message 를 적어주면 됩니다. 안적어도 됩니다. 
이 상태에서 

Ctrl X + Y + Enter

를 누르면 commit 이 됩니다.

  • git log 를 찍어주면 "Revert Message 4" 라는 버전이 하나 생긴 것을 볼 수 있습니다. 
  • 여기서 중요한 것은 기존에 있던 "Message 4" 버전은 사라지지 않고 그대로 있다는 점입니다. 
  • Revert Message 4 라는 버전은 사실상 Message 3 와 같은 버전입니다. 
  • 여기서 질문입니다. 만약 Message 3 로 돌아가는 것이 아니라 맨 처음에 Message 2 로 돌아가고 싶었다면 Message 3를 revert 했으면 되었던 것일까요? 아닙니다. 충돌이 발생합니다. 
  • 어떻게 해야 하냐면 역순으로 Message 4, Message 3 를 revert 해주어야 Message 2 상태가 되면서 충돌이 발생하지 않습니다. 
  • 이런 일이 발생하는 이유는 git revert 는 Message 3 이전의 모든 것들을 되돌리는 것이 아니라 Message 3 의 변경점을 되돌리는 것이기 때문입니다. 

수업을 마치며

  •  여기 까지 오시느라 고생하셨습니다. 이제부터는 여러분이 관심가질 법한, 관심가지면 좋은 내용들을 소개해드리겠습니다.
  • 버전관리의 핵심은 역사가 생긴다는 것입니다. 그리고 역사가 생기면서 생기는 가장 큰 효용은 비교입니다. 버전마다 차이를 확인할 수 있는 
diff tool
  • diff tool 이 있습니다. diff tool 을 검색한 후 diff tool 을 활용하여 버전마다의 차이점을 정교하게 비교해보세요. 정확한 의사결정을 내리고 현재 상황을 파악하는데 정말 큰 도움이 됩니다. 
.gitignore
  • 또 여러분이 버전관리를 하지 않았으면 하는 파일이 있을 겁니다. 그런 경우에 '.gitignore' 라는 파일을 만들고 그 안에 파일의 이름을 적어놓으면 해당 파일은 버전관리의 대상이 되지 않습니다. 
  • 예를 들어서, 프로그램 과정 중에 임시 파일이 생겼다가 사라져야 하는 경우가 발생하는데, 그런 파일들이 버전관리가 되면 안되겠죠. 그런 경우에 .gitignore 파일을 만들어서 방지할 수 있다는 겁니다. 또한 나 혼자 보기 위해서 특정 파일에 메모를 하고 있는데, 그런 파일이 버전관리가 되어서 팀원들에게 공유되면 곤란하겠죠. 그런 경우에 .gitignore 를 활용할 수 있습니다. 마찬가지로 검색해 보시면 다양한 사용법 설명이 있을 겁니다. 

 

  • 또 git 의 정말 환상적인 기능은 branch 입니다. branch 는 평행우주를 만들 수 있는 환상적인 기능입니다. 
  • 저장소의 이름을 더럽히지 않고 하나의 저장소에서 다양한 작업을 시험해 볼 수 있습니다. 

  • 각각의 버전을 식별하는데 Commit ID 라는 것이 사용된다고 말씀을 드렸습니다. 그런데, commit ID 는 기억하기 쉽지 않습니다. 적절한 이름을 달아주고 싶은 욕구가 생깁니다. 이런 것을 위해 사용하는 것이 바로 tag 입니다. 쉽게 버전을 찾아갈 수 있게 됩니다. 

  • git 은 매우 편리한 백업 기능을 가지고 있습니다. 이전에도 말씀드렸다시피 백업을 하지 않는다는 것은 언젠가 데이터를 유실하겠다는 것을 선언한 것이나 다름 없습니다. 

우리는 지금까지 우리의 지옥에서 벗어날 수 있는 버전관리를 배웠습니다. 처음에 이것을 도입하는 것은 어렵게 느껴질 수 있습니다. 지금 더 진도를 나가지 마시고 꾸준히 사용해 보면서 나의 환경이 급격하게 발전하는 경험을 해보시는 것을 추천드립니다. 
 출처 : https://opentutorials.org/course/3839