이번에는 local repository 안에서의 operation에 대해 다룬다.
(basic이라기에는 너무 방대한 것 같은데;;)
- 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가 붙어있는지와 같은 정보들을 포함한다.
- commit log를 확인할 수 있다.
- 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 |
댓글