본문 바로가기

Web Development/Github

[2장] Git 저장소만들기 & 버전관리

이전에 깃에 대해 간단히 알아보았다면, 오늘은 깃의 저장소를 만들고,

버전관리하는법 그리고 버전관리에 대한 개요를 다시한번 알아보는 시간을 가지겠습니다.

모든 실습과정은 아래 링크에 생활코딩에서 유튜브 재생목록으로 잘 정리되어있으니,

실습과정은 영상을 참조해주시면 감사하겠습니다.

 

https://www.youtube.com/watch?v=85f6tpKM5D4&list=PLuHgQVnccGMATJK16UJ9Fjay0ozrSZKiI

 

본 포스팅내용에서는 영상에서 다룬 내용 중,

핵심이라고 판단되는 것을 요약해 복습차원에서 개념적인 내용을 정리하고자 작성합니다.

실습내용을 제외하기에 내용이 다소 짧습니다.

 

 

시작합니다.

 

☞ 본 포스팅은 공부 내용을 바탕으로 정리하는 것입니다. 주관적이며 정확하지 않은 내용이 포함 되어있을 수 있습니다.

☞본 포스팅은 이지스퍼블리싱의 '깃&깃허브 입문'책을 공부한 내용을 토대로 요약한 내용입니다.

 

 

 

[저장소 만드는 법]

 

깃을 이용하기위해서는 1장에서 설치한 Git bash프로그램을 이용해,

우선 원하는 디렉토리로 이동합니다.

 

그리고 'git init' 명령어를 실행하면,

"Initialized empty Git repository in ~~~~~"

이런 메세지가 출력되고, 해당 디렉터리에서 Git을 사용할 수 있습니다.

 

 

[버전관리]

 

버전관리는 이전 1장에서 살펴본 바와 같이,

파일을 수정할 때마다 생기는 것에 버전을 부여해 관리하는 것 입니다.

 

깃에서 버전관리는 3단계로 분류됩니다.

 

 

① 작업트리(작업디렉터리, Working Tree)

파일의 생성 - 수정 - 저장 등 작업을 하는 영역입니다.

개인 컴퓨터 저장 공간입니다.

 

Example :

'Vim'으로 파일을 생성 및 수정 및 저장 등 작업을 진행합니다.

 

② 스테이지(Stage)

작업트리와 저장소단계 사이에 있는 단계로,

버전으로 만들기 전에 대기하는 대기장소라고 영역 !

Git의 디렉토리에 속합니다.

 

Example :

앞 작업트리에서 한 작업을 'git add 파일명.txt' 명령을 통해

스테이지에 올립니다.

 

③ 저장소(Repository)

'② 단계'에서 대기중인 파일 중,

버전관리가 필요한 파일이 결국 여기로 오게됩니다.

버전으로 만드는 역할을 하는 저장소 입니다.

Git의 디렉토리에 속합니다.

 

Example :

앞 스테이지 단계에 옮겨진 파일을 저장소로 옮겨오는 과정을 '커밋(Commit)'이라고 표현합니다.

그리고 이 커밋과정에서 어떤 변경사항이 있는지 간단히 기록할 수 있는 '커밋메세지(Commit msg)'기능이 있습니다.

' git commit -m "message" '

명령을 통해, 스테이지 단계에 있는 파일을 저장소로 이동시킬 수 있습니다.

 

 

그림으로 간단히 표현하자면 아래와 같습니다!

(요즘 그림 그리는게 재밌나봐요 ㅋㅋ..자꾸그리네)

내가만든 그림..

 

 

[Tracked File & Untracked File]

 

작업트리에 있는 파일의 상태를 확인하는 'git status' 명령을 통해 상태를 확인하면,

Tracked와, 혹은 Untracked로 상태로 나오게됩니다.

 

 

① Tracked File

 

깃은 한번이라도 Commit단계를 거쳐 저장소에 보관된 파일에 대해서는 지속적으로 그 파일의 수정여부를 추적합니다.

이것을 Tracked File 이라고 표현합니다.

 

② Untracked File

 

깃에서 새로운 파일을 작업영역 - 스테이지영역만을 왔다리 갔다리 했다면, 이 파일은 한번도 Commit된적이 없습니다.

깃은 해당 파일에 대해서는 버전관리를 지속하지 않습니다.

이런 파일을 Untracked FIle 이라고 표현합니다.

 

 

[수정 및 삭제]

 

깃을 이용해 작업을 하다보면, 실수할 때도 있을 것이고 때문에 되돌리고 싶은 경우도 분명 있을 것입니다.

그래서 수정 및 삭제를 어떻게 하는 것인지 한번 알아보겠습니다.

 

 

 

① 작업트리에서 이전파일 상태로 되돌리기

 

작업트리에서 파일을 수정 후, 프로그램이 고장나버렸거나 여러가지사유로 되돌려야 할 경우입니다.

스테이지단계에 올라가기 전에는 되돌리기가 매우 간단한데요.

'git checkout -- 파일명'

명령을 입력하면 화면에는 어떤 변화도 없지만, cat명령을 통해 한번 확인해보세요.

('cat 파일명' 명령어는 해당파일의 내용을 출력해줍니다.)

이전 파일의 상태로 다시 돌아간 것을 직접 확인할 수 있을 겁니다!

 

② 스테이지영역에서 작업영역으로 되돌리기

 

만약 스테이지 영역으로 올려버렸어요. 스테이지를 취소하고 작업영역으로 되돌리는 방법을 살펴보겠습니다.

'git reset HEAD 파일명'

명령을 입력하면, 스테이지에서 작업영역으로 내려갔다는 unstaged 메세지를 확인 가능합니다.

 

(스테이지영역에서 바로 삭제/수정은 불가능합니다, 스테이지영역은 대기영역으로 작업트리영역에서 수정,삭제를 수행합니다.)

 

③ 저장소영역(커밋) 되돌리기

 

저장소까지 Commit시켜버렸을 경우에는 작업트리로 다시 돌려주는 방법을 살펴보겠습니다.

'git reset HEAD^'

명령을 통해 저장소에서도 내려가고 스테이지단계에서도 내려간 작업영역으로 파일이 돌아온 것을 확인할 수 있습니다.

 

( ? : 스테이지영역으로만 내리는것 어떻게하나요?

조금 생각해보면 스테이지단계로만 내리는것은 무의미합니다.

왜냐하면 스테이지 단계에서는 수정도 삭제도 아무작업이 불가능하기에 작업영역으로 돌리는 것만이 의미가 있습니다.)

 

 

[저장소 영역에서 원하는 위치로 커밋 조정하기]

 

예를 들어, commit을 10번을 했는데, 갑자기 커밋 3번째 했을때로 돌리고 싶은 경우가 있을거에요.

아 그러면.... 언제 다 커밋을 내리고 있겠어요.

그래서 특정커밋으로 바로 되돌리는 방법이 두가지가 있습니다.

하나는 특정커밋으로 되돌리고, 그 이후버전들은 모두 삭제하는 방법

또 한가지는 특정커밋으로 되돌리고, 그 이후 버전들을 혹시몰라 남겨두는 방법입니다.

 

 

 

① 특정커밋으로 되돌리고, 이후 버전은 모두 삭제하는 법

 

'git reset --hard 커밋해시'

명령을 통해 커밋해시(ID) 부분으로 이동되고, 그 이후 버전들은 모두 삭제된 모습을 볼 수 있습니다.

다시말해, 커밋해시를 복사해 넣은 부분이 가장 최신의 버전으로 기록됩니다.

 

( ? : 커밋해시가 뭔가요?

커밋해시(git hash)는 'git log'를 통해 확인할 수 있는데요,

커밋을 구별하는 일종의 아이디 같은 고유의 값을 가지고 있습니다. 이것으로 커밋을 구분 할 수 있습니다.

또한 'git log'를 통해 보면, 커밋해시/버전정보/작성자/날짜/커밋메세지 까지 확인할 수 있습니다.

이를 '커밋로그'라 부릅니다.)

 

 

 

② 특정커밋으로 되돌리고, 이후 버전 보존하는 법

 

'git revert 커밋해시'

명령을 통해 커밋해시로 지정한 부분을 가장 최신버전으로 함과 동시에,

그 이후 버전을 삭제하지 않고 보존할 수 있습니다.

 

 

 

[필수 명령어 정리]

git config user.name "이름" : 깃에서 내 이름을 설정합니다.

git config user.email "이메일@이메일" : 깃에서 내 이메일을 설정합니다.

git init : 저장소를 생성합니다.

git status : 깃의 상태를 확인합니다.

git add 파일명 : 작업영역 파일을 스테이지에 올립니다.

git commit -m "msg" : 스테이지 영역에서 저장소로 커밋합니다. 메세지를 입력할 수 있습니다.

git commit -am "msg" : 작업영역 파일을 스테이지하고 저장소로 바로 커밋합니다. 메세지입력가능.

git log : 위에서 언급한 '커밋로그'를 확인할 수 있습니다.

git diff : 최근 버전과 이전 파일 -> 수정파일의 수정내용을 상세히 표현해줍니다. (- , +를 통해표현)

git checkout -- 파일명 : 작업영역에서 수정한 파일을 되돌릴 수 있습니다.

git reset HEAD^ : 저장소의 가장 최신 커밋을 취소할 수 있습니다.

git reset --hard 해시값 : 해시값으로 설정한 커밋으로 이동하고 이후 커밋은 모두 삭제됩니다.

git revert 해시값 : 해시값으로 이동하고 이후 커밋은 보존됩니다.

 

 

- E N D -

'Web Development > Github' 카테고리의 다른 글

[4장] Github 백업하기  (0) 2020.07.14
[3장] 브랜치(Branch)  (0) 2020.07.14
[1장] Git & Github 개요  (0) 2020.07.05