git 의 일반적인 명령어들은 다른 사이트를 참조하면 되고, 여기는 git 을 사용하면서 내가 필요에 의해서 사용하거나 찾아보았던 명령어를 위주로 정리하려고 한다. 나중에 시간이 되면 각각의 git 명령에 대해서 좀 자세히 알아보아야 겠다.
1. git alias
참고 : https://git.wiki.kernel.org/index.php/Aliases#Aliases_with_arguments
위 사이트를 참고하면 alias 의 다양한 사용법을 확인할 수 있다.
간단하게 $HOME/.gitconfig 파일을 직접 수정하거나, git config --global alias.<alias name> <command> 형식으로 alias 를 만들 수 있다.
우선 git config 명령을 사용해보자. 아래 명령은 git checkout 을 git co 로 alias 해준다.
# git config --global alias.co checkout
위 명령을 수행한 후에 $HOME/.gitconfig 를 확인해보자. co=checkout 이라는 alias 항목이 생긴 것을 확인할 수 있다. 앞에서 말한 것처럼 아래 [alias] 영역에 추가하면 해당 alias 를 사용할 수도 있다.
# cat ~/.gitconfig
[color]
ui = auto
[user]
name = xxx
mail = xxx
email = xxx
[merge]
tool = vimdiff
[core]
editor = vim
[alias]
co = checkout
2. git rebase
기존 commit 메시지를 수정하기 위하여 git rebase 사용하는 방법.
commit 을 4번 하였고, 4개에 대해서 모두 commit message 를 바꾸고 싶은 상황이 발생하였다.
그래서 git rebase -i (interactive mode) 를 사용하여 다음과 같이 시도하였다.
# git rebase -i HEAD~4
그럼 editor 화면에 최근 4개의 commit 에 대한 정보가 다음과 같이 보여진다.
pick e37aff5 [Patch 1/ ] : Define time macro
pick 7a8010a [Patch 2/ ] Apply time macro .......................
pick 5da2997 [Patch 3/ ] Optimize xxxx function ...............
pick 0ad7148 [Patch 4/ ] Add Simulation ..........................
내 경우에 총 4개 commit 내용을 수정하고 싶었기 때문에 앞 쪽의 pick 이라고 쓰여진 부분을 모두 edit 이라고 바꾸고 editor 를 빠져나온다. 그럼 아래와 같은 메시지가 출력된다.
Stopped at e37aff5... [Patch 1/ ] : Define time macro
You can amend the commit now, with
git commit --amend
Once you are satisfied with your changes, run
git rebase --continue
자 이제 git log 를 해보자. 그러면 현재 commit 이 HEAD 에서 이전 4번째 commit 을 가리키고 있는 것을 확인할 수 있다. git add 등을 통해서 추가하고 싶은 내용을 더 추가하고 git commit --amend 를 통해서 commit 메시지를 수정하여 4번째 commit 을 수정한다.
수정이 완료되면 git rebase --continue 를 통해서 다음 edit 항목으로 진행한다. 이렇게 반복하면서 git rebase --continue 를 수행하면 제일 마지막에 다음과 같은 메시지가 나오면서 rebase 가 완료된다.
Successfully rebased and updated refs/heads/master.
rebase 의 interactive option 의 경우 다양한 명령을 사용할 수 있다. edit 의 경우, 앞에서 설명한 것과 같이 해당 commit 을 사용하되, 중간에 멈춰서 해당 commit 의 내용을 추가/수정할 수 있도록 해주는 명령이다.
squash 는 이전 commit 과 합치는 명령이고, fixup 도 squash 와 유사하게 합치는 명령이지만, 현재 commit log 메시지를 무시한다. 아래는 git rebase 시 사용할 수 있는 명령들이다.
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell
참고: ^ 과 ~N
^ : ^ 는 이전 Commit(리비전) 을 나타낸다. ^를 여러개 사용가능하다. HEAD^^^ 는 HEAD 의 3번째 앞 commit 을 나타낸다.
~N : ~N은 정수를 나타낸다. N번째 이전 commit 을 나타낸다.
위 두가지 표현은 중복해서 사용이 가능하다. 따라서 다음 4개의 명령은 모두 동일한 리비전을 보여준다.
# git log -1 HEAD^^^^
# git log -1 HEAD^~3
# git log -1 HEAD~3^
# git log -1 HEAD~4
3. git reset
git reset HEAD <file> : staging 되어 있는 파일을 working tree 로 내려보낸다.
4. git cherry-pick
특정 commit 만을 반영하고 싶을 때, cherry-pick 명령을 사용한다.
branch A 에서 commit 한 코드중에서 일부만을 master branch 에 반영하고 싶은 경우에, 우선 반영하고 싶은 branch A 의 commit id 를 확인한다. 그리고 master branch 로 현재 working tree 를 옮긴 후에 git cherry-pick <commit-id> 를 실행하면 된다.
# git log (wroking tree : branch A)
# git checkout master
# git cherry-pick <commit-id>
< conflict 발생시 해당 파일을 열어서 conflict 를 해결한다. 그리고 git commit 을 수행한다. >
# git commit
5. git format-patch -n / git am
현재 commit 을 patch format 형태로 만들어 주는 명령. n 만큼의 commit 수만큼 patch 를 생성해준다.
아래와 같은 명령을 수행하면, 0001-<마지막 commit 제목>.patch / 0002-<마지막에서 두번째 commit 제목>.patch 파일이 생성된다.
# git format-patch -2
이렇게 생성된 patch 를 적용하려고 할 때는 am 명령을 사용한다.
# git am <patch file>
6. git log
많은 사람들이 git log 를 자주 사용할 것 같은데, graph 라는 좋은 옵션이 있다.
내 경우에는 구글링으로 찾은 내용을 살짝 수정해서 사용하고 있다.
git log --graph --decorate=full --pretty=oneline --abbrev-commit
각각의 옵션에 대해서 간단하게 알아보자
--graph : 화면 왼쪽에 commit history 에 대하여 text 기반의 graphical 한 표현으로 그려준다.
* 이 오른쪽에 설명된 commit 이 일어난 branch 를 표시해 준다.
--decorate[=short|full|no] : commit 의 refs 이름을 표시해준다. 기본값은 short 이고, short 으로 설정되면, refs/heads/, refs/tags/, refs/remotes/ 등과 같은 prefix 들은 표시하지 않는다. full 은 그러한 prefix 까지 모두 표시해준다.
--pretty[=<format>] 또는 --format=<format>
commit log 내용을 format 에 맞춰서 출력해준다. 다양한 포맷형식이 있을 수 있는데, oneline, short, medium, full, fuller, email, raw, format:<string> 등이 올 수 있고, 세부적인 내용은 직접 man page 를 확인해보면 된다. 내가 사용한 oneline 은 commit log 를 한줄로 title 만 보여준다.
--abbrev-commit
commit 은 보통 40 바이트 hexdecimal 로 표현되는 commit object name 으로 표현되는데, 일부만 표시해준다. 표시개수는 --abbrev=<n> 이란 옵션으로 설정할 수 있다. 보통 80 컬럼 터미널에서 가독성을 높여주기 위해서 --pretty=oneline 옵션과 함께 사용한다.
위 내용을 모두 추가해서 명령을 내리면 아래와 같은 방식으로 출력된다. 매번 이 명령을 타이핑하기 귀찮기 때문에 alias 를 이용해서 ~/.gitconfig 파일에 다음과 같이 추가한다.
~/.gitconfig
[alias]
lol = log --graph --decorate=full --pretty=oneline --abbrev-commit
이제 git lol 을 치면 아래 그림과 같은 출력을 확인 할 수 있다.
출처 : http://stackoverflow.com/questions/1057564/pretty-git-branch-graphs
7. git branch 이름 변경하기
git branch -m old_branch new_branch
'IT 기술 > 개발환경_유틸 관련 팁' 카테고리의 다른 글
[Ubuntu] minicom serial 설정 (0) | 2013.09.11 |
---|---|
[vi] cscope update db (0) | 2013.08.01 |
flashbench 사용법 (0) | 2013.01.11 |
git clone 의 두가지 옵션 --bare / --mirror 의 차이점 (0) | 2012.12.03 |
repo 를 사용하여 프로젝트 관리하기 (5) | 2012.12.03 |