제육's 휘발성 코딩
반응형

Git 장점

버전 관리 방식 (델타 vs 스냅샷)

image

VCS (Version Controll System) 은 델타 방식스냅샷 방식으로 버전을 관리한다.

델타 방식은 SVN 등에서 사용하는 방식으로 수정사항이 발생한 버전만 따로 관리가 된다. 즉, 변경점들만 저장이 되기 때문에 누적되어서 관리가 된다.

스냅샷 방식은 Git 등에서 사용하는 방식으로 새로운 버전이 만들어질 때, 해당 버전의 최종 파일로 관리가 되고 있다.

델타 방식은 프로젝트의 규모가 커질 수록 변경 사항을 계산해야 되니까 느려지는 반면, 스냅샷 방식은 현재 버전만 사용하면 되므로 편리하다. 또한 Git은 분산 버전 관리를 하고 있어서 원격 저장소에 의존적이지 않게 작업할 수 있다. (다른 사람의 브랜치를 가져와 동기화하여 사용하는 등)

Git의 3가지 공간

image

working directory

  • untracked : ADD 된 적이 없는 파일 또는 ignore 된 파일
  • tracked : ADD 된 적이 있고, 변경 내역이 있는 파일
  • git add 명령어를 사용하면 Staging area로 이동한다.

Staging area

  • 커밋을 위한 준비 단계로 작업을 위해 선택된 파일들이 있는 영역이다.
  • git commit 을 사용하여 레포지토리로 이동시킨다.

Repository

  • .git directory 라고 불리며 커밋된 상태를 의미한다.

파일 삭제와 이동

git rm

  • tigers.yaml를 삭제해본 뒤 git status로 살펴보기
    • 파일의 삭제가 working directory에 있음
    • git reset --hard로 복원
  • git rm tigers.yaml로 삭제하고 git status로 살펴보기
    • 파일의 삭제가 Staging area에 있음
    • git reset --hard로 복원

git mv

  • tigers.yamlzzamtigers.yaml로 이름변경 뒤 git status로 살펴보기
  • 복원 후 git mv tigers.yaml zzamtigers.yaml로 실행 뒤 비교

staging area 에서 working directory로 이동

git restore --staged (파일)
  • --staged 를 빼면 working directory에서도 제거 된다.
  • 예전에는 git reset Head (파일명) 으로 사용했다.

reset의 세 가지 옵션

  • --soft: repository에서 staging area로 이동
  • --mixed (default): repository에서 working directory로 이동
  • --hard: 수정사항 완전히 삭제

HEAD

현재 속한 브랜치의 가장 최신 커밋을 HEAD 라고 부른다.

image

  • 다음과 같이 브랜치가 여러 개를 갖고 있는 프로젝트를 준비하자. HEAD는 각 브랜치별 마지막 위치를 가리킨다. 즉, main 브랜치의 HEAD는 063a9b9 커밋 기록을 가리키고 있는 것이다.
git checkout HEAD^
  • ^ 또는 ~의 갯수만큼 이전으로 이동 (reset 처럼 사라지는 것이 아닌 HEAD만 이동하는 것이다.)
    • git checkout HEAD^^^ 또는 git checkout HEAD~5
  • git checkout (커밋해시) 를 사용해서 이동 가능하다.
  • git checkout - 는 HEAD 이동을 한 단계 되돌린다.

image

  • 다음과 같이 하나의 브랜치에서 과거 커밋으로 이동한 후 새로운 브랜치를 생성하여 커밋하는 경우에 사용한다고 볼 수 있다.

image

  • beta-branch 에서 한칸 전으로 이동한 뒤 새로운 gamma-branch 분기가 생긴 것을 볼 수 있다.

HEAD를 사용하여 reset 하기

git reset HEAD(원하는 단계)(옵션)
  • git reset --hard HEAD~2 다음과 같이 원하는 분기에서 HEAD 기준으로 제거를 할 수 있다.

fetch vs pull

  • fetch: 원격 저장소의 최신 커밋을 로컬로 가져오기만 함
  • pull: 원격 저장소의 최신 커밋을 로컬로 가져와 merge 또는 rebase

원격 저장소에 아무 커밋을 추가한 후 git checkout origin/main 을 해보자. 그럼 현재 새로운 해시의 브랜치로 이동하지만 변화는 없다. git fetch 를 통해 로컬로 정보를 가져오고 git checkout origin/main 을 하면 가져올 수 있다.

 

원격의 새 브랜치도 마찬가지로 fetch 후 git checkout origin/(브랜치명) 을 사용하여 가져올 수 있다. 로컬에도 해당 브랜치를 적용시키고 싶은 경우 git switch -t origin/(브랜치명) 을 사용하여 로컬에 적용시킬 수 있다.


본 포스팅은 '인프런 - 제대로 파는 Git & GitHub - by 얄코' 강의를 보고 정리한 내용입니다.

반응형
profile

제육's 휘발성 코딩

@sasca37

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요! 맞구독은 언제나 환영입니다^^