버전 관리
git log에는 다양한 옵션이 존재한다.
이 때 git log -p옵션은 각 각의 commit 사이에 소스 차이를 확인할 수 있다.
코드를 살펴보면 각각의 버전에서 어떤 내용들이 수정되었는지 알 수 있다.
f.txt ver 0.0.4 ..
diff --git a/f1.txt b/f1.txt
index f3ce2e4..e492257 100644
--- a/f1.txt
+++ b/f1.txt
@@ -1,3 +1,4 @@
Hello git!
Hello HanJaemin!
Hello World!
+f_world = 0
버전 4의 내용을 살펴보자
----a/f1.txt는 버전3에서의 f1.txt파일을 가리킨다. 따라서 b/f1.txt는 수정 되어진 새로운 f1.txt.파일을 나타낸다
@@내용을 통해 f_wrold = 0이라는 텍스트 내용이 추가되었음을 알 수 있다.
버전 3의 내용을 살펴보면
--- /dev/null => 이전 버전에서 파일이 존재하지 않았지만, +++ b/f2.txt파일이 새로 생성되었음을 나타내고 그 내용은
+hi git!임을 나타낸다.
이번엔 diff을 통해서 버전을 살펴보자
gt log를 통해서 버전을 살펴보면 각각 commit뒤에 고유의 id가 있음을 알아 볼 수 있다. 각 id는 commit메시지가 가리키고 있는 버전의 고유한 주소를 가리키고 있다.
이 때 git diff뒤에 [ 커밋 메시지 아이디 .. 다른 버전 커밋 메시지 아이디 ] 를 입력하면 커밋 버전사이의 소스의 차이점을 보여준다.
버전 4와 버전2를 입력하면서 버전4에 비해서 버전2에서는 f_word = 0이 존재하지 않고, f2.txt와 f3.txt파일이 존재하지 않았음을 알아볼 수 있었다.
이전 포스팅과 설명한대로 git diff는 버전관리 뿐만 아니라 현재 작업중인 파일의 수정 내용도 확인 가능하다.
========================( Reset vs Revert)=======================
과거의 버전으로 복귀하는 방법
1. Reset
최신 커밋부터 목적 커밋까지의 커밋을 삭제한 후 목적 커밋을 최신 커밋으로 바꾼다.
git reset (목적 커밋 id) --hard
git reset을 통해 버전4가 삭제되고 버전3이 최신 버전으로 업데이트 된 것을 확인 할 수 있다.
reset에서는 hard뿐만 아니라 다양한 옵션이 존재한다.
hanjaemin@hanjaemins-MacBook-Air Jam-git % cat f1.txt
Hello git!
Hello HanJaemin!
Hello World!
버전 4는 f1.txt에 f_world를 추가하여 commit한 형태인데 버전 3으로 초기화되면서 추가한 텍스트 내용이 사라진 것을 확인 할 수 있었다. 하지만 버전 4는 완전히 삭제된 것이 아니라 복구 가능한 형태로 저장되어 있다.
그러나 협업을 위한 클라우드 서비스에서의 버전 관리에서는 자신이 복구 가능한 파일을 가진 것에 대해서 이전 버전으로 초기화하여야 한다. 그렇지 않으면 삭제되어진 버전들에 대해 복구의 확실성이 떨어지기 때문이다.
2. Revert
커밋을 취소하면서 새로운 버전을 생성한다. 또한 특정 버전으로 되돌아갈 수 잇지만, 되돌린 버전 이후의 버전들의 이력이 남아 있다는 점에서 Reset 명령어와의 차이가 있다.
git checkout | |
. | working directory에서 수정한 모든 파일(git add이전)을 현재 버전으로 되돌린다. |
--{file} | working directory에서 수정된 지정하는 파일(git add이전)을 현재 버전으로 되돌린다. |
git reset | |
. | 현재 버전으로 되돌리기 = add 내용을 초기화한다. |
(commit id} | 특정 버전으로 되돌리고 , 커밋 이력(history) 삭제 , 파일 내용은 유지 |
hard {commit id} | 파일 내용까지 되돌린다. |
soft {commit id} | 파일 내용은 그대로 유지하면서 staging area에 올린다. |
merge ORIG_HEAD | 바로 이전 병합 취소 |
git revert | |
{commit id} | 특정 버전으로 되돌리고, 파일 내용 유지, 버전 이후 모든 커밋 이력(history)유지 |
--mainline 숫자 | 과거 병합을 취소하고 숫자로 명시된 브랜치 라인 기준으로 복귀 |
'Infra > GIT&GIT HUB' 카테고리의 다른 글
Git (7) : branch & merge (0) | 2021.07.17 |
---|---|
Git (6) : branch (0) | 2021.07.12 |
Git (4) : 버전관리 (0) | 2021.07.08 |
Git (3) : git 기본 명령어 (0) | 2021.06.30 |
Git (2) : git의 workflow (0) | 2021.06.30 |