공부 자료/Git

[Git] 버전 관리

뚜루뚜루세니 2021. 8. 25. 14:30
728x90

버전 생성

working tree : 파일을 만들고 수정하지만, 버전으로 만들어지기 전 단계를 working tree 라고 할 수 있다.

즉, 워킹 트리는 파일을 수정하는 곳, 수정한 파일들을 의미한다.

staging area : 파일이 10개라고 가정. 그 중 파일 2개만 하나의 버전으로 만들고 싶을 때, staging area에 2개의 파일을 올려놓는다. 즉, 버전을 만들려고하는 파일들을 뜻한다.

repository : 깃이 staging area 위에 있는 2개의 파일을 골라 버전을 생성하여 repository에 넣는다. 즉, repository는 만들어진 버전이라고 생각을 하면 쉽다.

 

 

Untracked 와 Tracked 상태

워킹 디렉터리에 있는 여러가지 파일들은 git의 추적 관리 여부에 따라 크게 두가지로 나뉠 수 있다.

Tracked는 git이 해당 파일을 추적 및 관리하는 상태

Untracked는 git이 해당 파일을 추적 및 관리하지 않는 상태를 의미한다.

 

  • 워킹 디렉터리에 있지만 git add나 commit 하지 않은 파일은 Untracked 상태
  • git add나 commit 했던 적이 있는 파일들은 Tracked 상태
  • Tracked 상태인 파일들은 Git이 저장 및 관리하며, Untracked 파일은 Git이 신경쓰지 않는다.

Unmodified 와 Modifed 상태

파일의 변경 여부에 따라 modified와 unmodified로 나눌 수 있다. 

변경 발생 기준은 파일이 staged 또는 commit 된 시점 이후로 변경되었는 가?이다.

Staged는 git add 명령어를 통해 Staging Area에 내역을 추가한 상태이며, git commit 명령을 통해 Commit한 경우는 Committed 상태

Git이 관리하지 않는 상태인 Untracked 파일은 두 가지 변경 관련 상태를 갖지 않으며, 곧 Unmodified 또는 Modified 상태인 파일은 곧 Tracked 상태라는 것과 동일하다.

 

 

git init

새로운 git 저장소를 생성할 때, 사용하는 git 명령어 이다. git init 명령어를 실행하면 현재 디렉토리를 기준으로 git 저장소가 생성된다.

git status

git 프로젝트의 상태를 확인할 수 있는 명령어이다.

git add

작업 디렉토리(working tree)상의 변경 내용을 스테이징 영역에 추가하기 위해 사용하는 git명령어라고 할 수 있다.

다음 commit을 기록할 때 까지 변경분을 모아 놓기 위해 사용하게 된다. 

git commit

git commit -m [설명] 명령을 실행하고 git status 명령을 실행해 저장소의 상태를 확인해 보면 모든 변경내용이 적용되어 저장소와 워킹트리가 동기화 됨을 알 수 있다.

버전간의 차이점 비교

버전 관리를 하게 되면 버전과 버전 사이의 비교를 할 수 있다.

git diff

파일의 어떤 내용이 변경되었는지 차이점을 비교할 수 있는 명령어 이다.

Working directory와 staging area 간의 비교도 가능하고 commit 간의 비교, branch 간의 비교도 가능하디.

// 삭제된 부분은 빨간색, 추가된 부분은 초록색으로 표시된다.

 

checkout과 시간여행

git  커밋 이후 파일을 수정했을 때, 수정하기 전으로 되돌려야할 때 git checkout <파일 명> 으로 파일을 수정 전으로 되돌릴 수 있다.

 

버전 관리 삭제

git reset

reset의 개념을 간략하게 나타내면 시간을 아예 과거의 특정 사건(commit)으로 되돌린다는 점이다.

git reset --hard를 사용하면 현재 작업 위치인 head의 포인터를 특정위치로 변경해버릴 수 있다. 

--hard 옵션은 현재 head에 추가된 변경사항들을 모두 되돌려준다. 

즉, head의 위치를 바꿔버려서 로컬 저장소의 상태를 커밋 이전 상태로 강제로 변경 시킨다.

이력을 남기지 않기 때무에, 원하는 시점으로 완전히 돌아가고 싶을때 사용하면 된다.

버전 관리 되돌리기

git revert

revert의 특징을 간략하게 나타내면 현재 있으면서 과거의 특정 사건(commit)들만 없던 일로 만든다는 점이다.

revert는 커밋의 내용을 되돌리는 커밋을 새로 만든다. 원격 저장소에 삭제하고 싶은 내용을 push했어도 revert 커밋을 추가해주면 된다.

과거로 돌아간다는 이력을 남겨두고 원하는 시점으로 돌아가게 된다. 

중간에 무슨 문제가 있었는지, 왜 돌아갔는지 등의 기록이 가능하다는 장점이 있다. 다른 사람과 같은 브랜치에서 함께 작업을 할 때 코드 충돌을 최소화할 수 있다는 장점이 있다. 

 

728x90