SVN에서 Git으로 넘어온지 얼마 안된 Git어린이의 적응기
로컬 환경의 내용을 서버의 내용으로 돌리고자 할 때 자주 사용하던 Revert
- 수정하다가 다시 서버에 올려뒀던 내용으로 덮어쓰고 싶을 때
- 로컬에서 삭제한 파일을 다시 서버에 있는 내용으로 불러와서 살리고 싶을 때
- 새로 추가하겠다고 일단 add는 해놨는데 이 파일들이 실제 commit까지 갈 필요는 없을 때 등
Git의 경우도 크게 다르지 않겠거니하고 자연스럽게 Revert를 찾았는데 보이질 않는다.
그래서 일단 Re* 로 시작하는 다른 기능들을 찾아봤는데 다음과 같은 기능을 하는 것으로 보인다.
1) Rebase
merge랑 비슷한 역할을 하는 명령어로 한 브랜치의 변경 사항을 다른 브랜치에 적용할 수 있는 명령어다.
일단 revert랑은 전혀 관계가 없다.
2) Reset
최근에 일어난 commit 명령을 이전으로 되돌린다.
옵션에 따라 다르게 수행되지만, 기본적으로 서버의 커서 역할을 하는 HEAD를 이전 commit 이력으로 되돌리고 staging area 영역의 내용까지 HEAD가 가리키는 상태로 만든다.
(SVN으로 말하자면, 현재 바라보고 있는 최종 revision을 이전 revision으로 바라보도록 함. 이력은 유지)
여기서 --hard 옵션을 주게 되면, working directory에 있는 파일까지 다 엎어쓰게 되버린다.
되돌릴 수 없기 때문에 reset 명령어는 아주 주의해서 사용해야 한다. 사실 명령어 이름부터 좀 무섭다. 리셋이라니
3) checkout
Re* 로 시작되지는 않는데 Reset 공부하다보니 나와서 checkout에 대해서도 알아봤다.
Reset과 유사한 기능을 수행하지만 내부적으로는 완전 다르게 움직이고, 조금 더 안전한 명령어다.
Branch가 여러 개 일때 조금 더 유용할 듯 한 방식인데 Reset이 HEAD를 이전 commit 이력으로 돌리는 것을 기본으로 하고 있다면, checkout는 HEAD의 변화없이 브랜치를 이동시킨다.
기본적으로 SVN과 Git의 구조가 일부 다르기 때문에 위와 같은 기능 분할이 필요한 것으로 보인다.
SVN의 경우는 로컬 영역에서의 Commit이 곧바로 중앙서버로의 전송을 의미하는 것이므로 Revert 기능 하나로 내가 원하는 기능을 다 처리할 수 있었으나, Git은 Working Directory에서 Staging Area (Commit 대기 장소, Index) 로 올리는 작업과 해당 대상을 Git Repository로 올리는 Commit & Push 과정으로 세분화되어 있기 때문에 더 상세한 기능 분리가 필요하다.
실제로는 Branch가 나뉘어 있어서 더 복잡해질 가능성이 매우 크다 ^_ㅜ
** 결론
나의 경우는 commit history 자체를 변경하는 게 아니라, 특정 파일에 대해서 되돌리고 싶은 경우라 HEAD가 뭘 가리키고 할 필요가 없이 특정 파일명 또는 디렉토리명을 명시해야 하므로 Reset, Checkout 둘 다 비슷한 역할을 한다.
ex. 수정한 내용을 다시 서버에 올려뒀던 내용으로 덮어쓰고 싶을 때, 로컬에서 삭제한 파일을 살리고 싶을 때
git checkout -- 파일명
ex. 새로 추가하겠다고 일단 add는 해놨는데 이 파일들이 실제 commit까지 갈 필요는 없을 때 (unstaged 하고 싶을 때)
git reset HEAD 파일명
결론적으로 SVN의 Revert 기능을 수행할 수 있는 Git의 기능은 checkout / reset 이다.
각자 하는 역할이 조금씩 다르므로 원하는 방향에 맞춰 안전하게 일하자. 뭐든 덮어쓴다는 건 안전하기 힘들다는 점.
아래 참고자료에 Reset 기능과 Checkout 기능에 대해 아주 상세하고 그림으로도 잘 표기한 자료가 있으니 참고하면 큰 도움이 될 거라고 확신한다.
Git 공부에 있어서 튜토리얼 사이트만큼 좋은 곳이 없다.
물론 들어가서 심심할 때 보는 건 아니고 검색할 때마다 나와서 계속 보는 중 '^'
또한 Reset 보다 더 도움이 많이 된 내용은 되돌리기에 대해 작성된 부분
이 내용이 더 유용하게 자주 사용될 듯 하며, 여기서 reset / checkout 사용 방식도 안내되어 있으니 꼭 읽어보시길
'PROGRAM' 카테고리의 다른 글
[Python] 파이썬 표류기 2 : python 2, 3의 차이와 python 활용도 (0) | 2020.10.21 |
---|---|
[Python] 파이썬 표류기 1 : 환경설정 (0) | 2020.10.17 |
eclipse 구동 오류 : 특정 workspace에서 문제 생길 때 (1) | 2017.06.05 |
도메인으로 IP 확인 명령어 : nslookup (0) | 2016.10.07 |
개발자가 알아야 하는 것 (0) | 2016.01.28 |