이 글은 사내 스터디에서 pro git을 진행하며 정리한 글입니다.

git 저장소 만들기

git 저장소는 git init 명령어를 사용해 생성한다

$ git init

기존 저장소를 clone하기

리모트 저장소(github)를 클론해서 가져올 수 있다.
클론은 svn의 svn checkout 저장소경로와 비슷하다.

git clone 저장소경로
// git clone http://github.com/test/test.git

파일의 생존주기

18333fig0201-tn
파일은 크게 untracked, unmodified, modified, staged 영역을 거친다.
untracked : 파일이 있으나 한번도 add 되지 않음.
unmodified : 파일을 add 하여 commit을 1회 이상 한 이후, 수정사항 없음
modified : 바로 위 케이스에서 수정사항 있음
staged : git add한 상태

파일의 상태 확인하기

$ git status
On branch master
nothing to commit, working directory clean

위 명령어를 -s를 사용해 축약형으로 확인할 수 있다.

$ git status -s
M README // Modified 상태이나 ADD 되지 않음
MM Rakefile // stage에 올린 후 다시 수정함
A lib/git.rb // untracked상태의 파일을 ADD 함
M lib/simplegit.rb // 수정 함
?? LICENSE.txt // untrakced

M : 수정된 파일
A: 추가된 파일
AM: 추가 및 수정 파일
MM: Stage단계에서 수정상태인 파일
??: Untracked 파일

파일 무시하기

.gitignore 파일에 무시할 파일을 추가하면 된다.

// 확장자가 .a인 파일 무시
*.a
// 윗 줄에서 확장자가 .a인 파일은 무시하게 했지만 lib.a는 무시하지 않음
!lib.a
// 루트 디렉토리에 있는 TODO파일은 무시하고 subdir/TODO처럼 하위디렉토리에 있는 파일은 무시하지 않음
/TODO
# build/ 디렉토리에 있는 모든 파일은 무시
build/
// doc/notes.txt 파일은 무시하고 doc/server/arch.txt 파일은 무시하지 않음
doc/*.txt
// doc 디렉토리 아래의 모든 .txt 파일을 무시
doc/**/*.txt

git diff

git diff 명령어는 수정했지만 아직 add 하지 않은 파일의 diff를 보여준다.

$ git diff
diff --git a/index.html b/index.html
index 3cb747f..e445e28 100644
--- a/index.html
+++ b/index.html
@@ -36,6 +36,10 @@ def main
+

+ 안녕 +
+
git diff 명령어는 워킹 디렉토리에 있는 것과 Staging Area에 있는 것을 비교한다.
만약 커밋하려고 이미 staging Area에 넣은 걸 보고싶다면 git diff –cached를 사용하자
–cached는 이미 커밋한 것과 staging Area에 있는걸 비교한다

$ git diff --cached
diff --git a/index.html b/index.html
index 3cb747f..e445e28 100644
--- a/index.html
+++ b/index.html
@@ -36,6 +36,10 @@ def main
+

+ 안녕 +
+

git commit

커밋은 의미있는 한 단계의 작업을 나타낸다
매 커밋당 log와 체크섬이 남아 나중에 되돌아갈 수 있게 한다.
커밋을 어느 시점에 할 지는 개발자 마음이다.

git commit -m "로그메시지"

매번 커밋을 해줄 때마다 add를 통해 staging area에 넣어야 한다.
tracked 상태인 파일이 자동으로 추가되기를 원한다면 \-a를 추가하자

git commit -a -m "로그메시지"
// git commit -am "로그메시지"와 동일하다

파일 삭제하기

git rm 명령어를 쓸 수 있다.

git rm index.html

git rm 명령어는 파일 삭제와 git rm을 순차적으로 진행한다.
만약 파일 삭제를 하고싶지 않다면 –cached 옵션을 붙인다

git rm index.html --cached

rm 이후에는 커밋을 해주어야 한다.

파일명 변경하기

git mv 명령어를 쓸 수 있다.

git mv {대상파일} {바꾼이름}
// git mv index.html main.html

커밋 히스토리 조회

– git log

$ git log
commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon <schacon@gee-mail.com>
Date: Mon Mar 17 21:52:11 2008 -0700
이상한걸 바꿨어요

커밋로그가 많으면 많을 수록 보기 힘드니 아래 명령어를 사용하자
git log –oneline(한줄로) –decorate(이쁘게) –all(모든브랜치를) –graph(그래프형태로) 보여주세요
git log –oneline –decorate –all –graph
git alias 해두면 편하다.

$ git log --oneline --decorate --all --graph

– 조회 제한 조건도 있다. http://git-scm.com/book/ko/v2/Git의-기초-커밋-히스토리-조회하기

되돌리기

git commit –amend를 사용할 수 있다

git commit --amend -m "변경할 로그 메시지"
// 로그를 변경하지 않아도 되면 git commit --amend --no-edit

리모트 저장소

– git remote 명령으로 현재 저장소의 리모트 저장소를 조회한다

$ git remote
origin

– v옵션을 주면 자세히 볼 수 있다.

$ git remote -v
origin https://github.com/schacon/ticgit (fetch)
origin https://github.com/schacon/ticgit (push)

리모트 저장소 추가

git remote add (단축이름) (저장소경로)로 추가할 수 있다.

git remote add origin http://gitlab2.uit.nhncorp.com/choeun/test.git

리모트 저장소의 데이터 가져오기

기본적으로 master를 가져오나 모든 정보를 가져오고 싶은 경우, git fetch를 활용할 수 있다

git fetch (단축이름) // 생략시 origin을 알아서 가져온다

리모트 저장소에 커밋 올리기

git push

git push (단축명) (올릴브랜치)

올려야 하는 브랜치나 tag가 많다면 –mirror를 쓸 수 있다

git push (단축명) --mirror

리모트 저장소 이름 변경 및 삭제

git remote rm (단축명)
git remote rename (단축명) (바꿀이름)

git tag

태그는 원론적으로는 브랜치와 동일해보이나, 브랜치는 지웠다 살렸다 하는게 여러번이라면, 태그는 특정한 커밋을 가리키는 포인터 역할로 많이 사용한다.
git tag를 기점으로 checkout을 받을 수 있다.

git tag -a v.1.0 -m "버전 1.0 출시"

가벼운 tag

log 메시지를 남기고 싶지 않다면 가벼운 tag를 사용할 수 있다

git tag v.1.0

특정 커밋을 가리키는 tag

브랜치도 마찬가지지만 tag도 특정 커밋을 찍어서 뿌릴 수 있다.
아래 로그가 있다고 쳤을 때,

$ git log --pretty=oneline
15027957951b64cf874c3557a0f3547bd83b3ff6 Merge branch 'experiment'
a6b4c97498bd301d84096da251c98a07c7723e65 beginning write support
0d52aaab4479697da7686c15f77a3d64d9165190 one more thing
6d52a271eda8725415634dd79daabbc4d9b6008e Merge branch 'experiment'
0b7434d86859cc7b8c3d5e1dddfed66ff742fcbc added a commit function
4682c3261057305bdd616e23b64b0857d832627b added a todo file
166ae0c4d3f420721acbb115cc33848dfcc2121a started write support
9fceb02d0ae598e95dc970b74767f19372d61af8 updated rakefile
964f16d36dfccde844893cac5b347e7b3d44abbc commit the todo
8a5cbc430f1a9c3d00faaeffd07798508422908a updated readme
$ git tag -a v1.2 9fceb02
// 이 경우 9fceb02d0ae598e95dc970b74767f19372d61af8 updated rakefile을 기점으로 tag를 생성한다.

공유하기

push하면 된다

git push (리모트저장소) (태그명)

git alias

일종의 단축키이다

$ git config --global alias.co checkout
$ git config --global alias.br branch
$ git config --global alias.ci commit
$ git config --global alias.st status

이렇게 해두면 git co로 체크아웃을 할 수 있다 (!)
더 복잡하게도 만들 수 있다

$ git config --global alias.unstage 'reset HEAD --'
$ git config --global alias.last 'log -1 HEAD'
& git config --global alias.all 'log --oneline --decorate --all --graph'
카테고리: EnvironmentTech

0개의 댓글

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다