본문 바로가기
인턴/준비

Git #2 Basics

by 사향낭 2022. 12. 29.
 

Git Theory - 2 - Basics

This part of Git series covers the basics like config, init, add, rm, .gitignore, commit, log, blame, diff, tag, describe, show and stash

bobbydreamer.com

 

 

이번에는 local repository 안에서의 operation에 대해 다룬다.

(basic이라기에는 너무 방대한 것 같은데;;)

 

stash가 뭐죠..

 

보고 이해하고 외우자

 

  • git help [-a | command (e.g. add, commit) | everyday]
    • Command를 설명해주는 command 이다. 특히 'git help everyday'는 일반적으로 자주 쓰이는 command에 대한 manual을 web에 띄워준다.

 

  • git config [--local | --global | --system] [--list | user.name "name" | user.email "email@email"]
    • metadata인 configuration information을 설정할 때 사용한다. (이를 통해 누가 어떤 commit을 했는지 알 수 있음)
    • system은 pc의 모든 사용자에게 적용되는 configuration 이다.
    • global은 현재 사용자에게 적용되는 configuration 이다.
    • local은 현재 사용자, 현재 repo에 대해 적용되는 configuration 이다.
    • local > global > system 순으로 configuration이 적용된다.

 

  • git init
    • git repository로 현재 폴더를 initialization 한다.
    •  .git  파일을 만들어 모든 git object를 저장한다.
    • default로 master라는 이름의 branch를 생성한다.

 

  • git add
    • 어떤 파일을 staged, tracked 상태로 만든다.
    • 즉 파일의 변화에 대한 추적을 시작한다.
    • add 하는 시점에서의 파일의 변화만을 staging 한다.
      (파일을 add 후 수정하고 commit 하였을 때 수정본이 아닌 add 하기 바로 직전의 상태가 저장됨)
    • 파일을 INDEX에 더했다는 표현을 사용하기도 한다.

 

  • git status
    • git status (default): tracking 중이며 변화가 생긴 파일 (그 변화가 staging 되지 않았을 때), 변화가 모두 staging된 파일, untracked 파일 등을 보여준다.
    • git status --ignored: 무시되는 파일들까지 보여준다 (이 파일들은 default git status에서는 보이지 않음)
    • git status -s: default git status의 결과를 short form으로 보여준다.

 

  • .gitignore
    • working directory 안에 있으면서 무시되는 파일, 폴더의 list를 저장하는 파일이다.

 

  • git rm [file_name]
    • 어떤 파일을 working directory에서 삭제하면서 staging area 에서도 삭제한다.
    • -f : force, -n : dry run, -r : recursive
    • git rm --cached [file_name] : 파일을 unstage, untrack만 시키며 삭제는 하지 않는다.

 

  • git commit
    • staged 파일들만으로 commit object를 만들어 local repository에 올린다.
    • 각 object는 유일한 SHA-1 hash를 가진다.
    • commit에 대한 설명을 message를 통해 작성하여야 한다.
    • 그냥 git commit을 하였을 때 default로 vim이 열리면서 message를 작성해야한다.
    • 이를 git commit -m "message" 로 단축시킬 수 있다.
    • commit message는 개발팀마다 format이 다를 수 있겠지만 위 article에서는 다음과 같은 format을 제시한다.
    • Format =  <ACTION> : <WHEN> : Description (50 chars max) 
    • git commit --amend -m "New commit message" : 가장 최근의 commit message를 수정한다
    • git commit --amend --no-edit : commit 내용을 바꾸고 (git add같은 command를 통해) 같은 message로 최근의 commit을 덮어쓴다
    • git commit --allow-empty -m 'Initial branch empty commit' : dummy commit

 

  • git log
    • commit log를 확인할 수 있다.
      (log는 최신순으로)
    • 각 commit은 SHA-1 hash, author name, timestamp, comments, 어떤 branch에 head가 붙어있는지와 같은 정보들을 포함한다.

 

  • git blame [file_name]
    • command 이름과 같이 어떤 파일을 누가 마지막으로 수정했는지 범인을 찾을 때 사용한다.

 

  • git diff
    • working directory와 staging area의 차이를 확인한다.
    • git diff -cached (--staged) : staging area와 last commit의 차이를 확인한다.
    • git diff <old-hash> <new-hash> : 두 commit point 사이의 차이를 확인한다.

 

  • git tag
    • commit point의 hash ID는 기억하기 어렵기 때문에 쉬운 이름으로 표시한다.
    • Lightweight tag : git tag <tagname> / git tag <tagname> <hash>
    • Annotated tag : git tag -a <tagname> (tag에 대한 여러 metadata를 붙일 수 있다)

 

  • git show
    • object에 대한 상세 정보를 보여준다.
    • 목적어로 commit이 들어왔을 때는 log message와 textual diff를 보여준다.
    • tag가 들어왔을 때는 commit의 output과 tag 자체에 대한 정보를 보여준다.
    • tree는 이름들을 보여준다 (여기서 tree가 뭐지)
    • plain blob은 plain content를 보여준다.
    • (tree랑 plain blob에 대한 설명은 없다;; 필요하면 찾아볼듯)

 

  • git stash
    • 음 이건 진짜 감이 안잡힌다,
    • 공식 문서를 대충 봤을 때 현재 working directory의 상태를 저장하고 clean한 상태, 즉 가장 최근에 commit한 상태로 working directory를 되돌릴 때 사용한다고 되어있다.
    • 설명이 꽤나 긴데 어떤 변화를 저장은 하고 싶은데 commit을 남기고 싶지 않을 때 사용하는건가 싶다.
    • 큰 프로젝트에서 내 마음대로 코드를 짜고 저장은 하고 싶은데 commit으로 남기기에는 조금 부끄러울 때 사용하는 용도인가?
    • 지금 봤을 때에는 그리 사용할 이유를 모르겠는데 이렇게 설명을 상세하게 하는거 보면 자주 쓰는것도 같다.

 

  • Things to remember
    • git에 큰 파일은 넣지 마라.
    • master/main branch는 production을 위해서만 사용해라
      (development는 branch를 따로 만들어서 사용)
    • Destructive commands in git
git checkout -- .
git reset --hard
git clean -f

 

휴 길었다.

'인턴 > 준비' 카테고리의 다른 글

Git #4 Branching  (0) 2022.12.31
Git #3 Revert, reset and restore  (0) 2022.12.30
Git #1 Origins story and terms  (0) 2022.12.27
Go Language #1  (0) 2022.12.16
속성 SQL  (0) 2022.02.28

댓글