Open Source/git / svn / bazaar

Git 사용법(Manual)

소혼 2010. 1. 10. 11:09
반응형
여기저기서 줏어모은 제가 자주 쓰는 git에 대한 명령어들입니다.
아래 참고 URL을 보시면 더 많은 정보가 있습니다.
git manual

http://www.slideshare.net/saharabeara/advanced-git-tutorial

git tutorial 
http://www.funit.net/git

http://gitimmersion.com/ (영어로 되어 있음. 따라하다가 포기 ^^;; )

기타

http://noiseandheat.com/blog/2012/02/lazy-one-liners-%60git-rm%60-all-deleted-files/




git 설명을 위한 이미지


1. 시작하기
git init
git clone {remote repo}
ex1 - git clone https://github.com/bunhere/git-study.git
ex2 - git clone ../anotherGitRepo
ex3 - git clone git://github.com/bunhere/git-study.git


(추가글1)

방화벽등으로 SSL접속이 안된다면 (https)

GIT_SSL_NO_VERIFY=true git clone https://...


(추가글2)
git 관련 환경 설정 (http://live.gnome.org/Git/Developers  참조)


- 자신의 이름과 이메일 설정
git config --global user.name "Rupert Monkey"
git config --global user.email rupert@example.com
- color 설정
git config --global color.ui auto

2. 작업 내용 확인하고 커밋하기
git add [파일 또는 폴더 명]   : git에 파일 또는 폴더 추가  (. 을 적으면 현재 폴더 이하를 추가)
git rm [파일 또는 폴더명] : git에서 파일 또는 폴더 제거
git status : 현재 git 상태 보기
git commit -m "로그 메시지" : 위에서 add/rm한 상태를 git repo에 메시지와 함께 저장
git commit --amend 

(이미 commit한) 마지막 commit에 추가로 수정한 내용을 반영한다.(물론 그 전에 git add등을 해야 함)

3. 작업 내용 꺼내오기
git checout [파일 또는 폴더명] : 현재 git repo기준 마지막 commit상태로 돌림
git checkout 4ab18a1 [파일 또는 폴더명] : git repo 로그중 4ab18a1으로 시작하는 commit id로 돌림
git reset --hard master : git repo를 master branch의 최종으로 원복함

4. 가지 만들어 옮겨 다니기
git branch newb (master) : (master) branch로부터 newb 라는 이름의 브랜치를 만듬
git checkout newb : newb 브랜치의 내용을 보기 시작함

git branch -a : 현재 생성된 모든 로컬 브랜치와 원격 브랜치를 확인함

git checkout master : master 브랜치로 전환
git merge newb  : newb브랜치의 내용을 가져와 현재 브랜치에 합침


5.  원격 저장소 추가하기.

git remote add upstream git://github.com/WebKit/webkit.git


예) master (ref origin/master)에 upstream/master를 가져와 merge할때. (github에서 mirror repo를 sync할 때 사용)

git checkout master (현재 브랜치를 마스터로 바꿈)

git fetch upstream (remote branch인 upstream branch 의 인덱스를 갱신함)
git merge upstream/master (현재 브랜치에 머지함)


git rebase newb  : newb브랜치의 내용을 가져온 후, 현재 브랜치에만 있는 커밋들을 그 뒤에 붙임.(주의)

 예를 들어 master와 newb가 아래와 같다면,
(1) - (2) - (3) - (4)                 -------------- master (현재 working branch)
           \ _ (5)                    -------------- newb
git rebase newb를 수행하고 나면 아래와 같이 됨.
(1) - (2) - (5) - (3) - (4)          -------------- master (현재 working branch)


git branch -d newb : newb 브랜치를 지움 (로컬 브랜치만 가능)

6. 원격 브랜치 관리

git fetch origin : origin 이라는 remote 브랜치의 정보를 갱신함

git fetch -p origin : origin이라는 remote 브랜치를 갱신할 때 삭제된 리모트 브랜치의 정보를 로컬에서도 지움
git remote prune origin : 상동
( git config remote.origin.prune true : fetch할때마다 자동으로 정리)

master 브랜치를 rebase하고 원격 branch에 push하려고 하면 에러 git push -f가 가능해야 함.
git push origin newb : origin 에 해당하는 repo에 newb 브랜치를 올림.(없으면 생성함)
git push origin :newb : origin 에 해당하는 repo에 newb 브랜치를 지움.
git push origin --delete newb : origin 에 해당하는 repo에 newb 브랜치를 지움.( git 1.7 이상)

7. merge fail시 내용 수정
git commit -a -m "~~"  : 수정된 상태로 commit

8. 이전 작업 내용 보기
git log -p -m : 현재까지 changeset을 모두 추출
git log --decorate {branch} : tag, branch정보등을 같이 보여준다.
git log --author=bunhere | git shortlog
 : bunhere가 작업한 commit들을 보기
git show qsz01ad:src/t.cpp : qsz01ad commit 시점의 src/t.cpp파일 내용을 확인한다.

git log -Ssource_change { -- filename } : filename의 이전 변경에서 source_change를 찾는다

git shortlog -s -n --since="YYYY-MM-DD" : author별로 커밋의 수를 모아서 보여준다.

8. git에 tag 달기
git tag -a mytag : mytag란 이름으로 로컬 브랜치에 태그 추가 (현재 위치(현재 브랜치, 현재 commit)에 반영됨)
git push origin tag mytag : remote 브랜치에 tag 반영

8. 마지막 commit을 삭제하기
git reset --hard HEAD^ : ^가 한개면 하나의 commit을 삭제하고 두개면 두개의 commit을 삭제함. 원격 repository는 당연히 수정되지 않음.

9. patch 만들기
git format-patch -M -C --output-directory {patch directory} start..end :


10. git commit 순서 바꾸기

A-B-C-D => A-C-B-D

git reset --hard A
git cherry-pick B
git cherry-pick C
git cherry-pick D

또는 git rebase -i 로도 가능


11. 지워진 파일들을 모두 git rm하기
git status --porcelain | awk '/^.D .*$/ {print $2}' | xargs git rm


12. git commit count

git rev-list HEAD --count

git log --pretty=oneline | wc -l


기타

git 방화벽 이슈

git config --global http.proxy http://xxx.xxx.xxx.xxx

이것만으로 안될 경우 proxy wrapper를 이용

export GIT_PROXY_COMMAND="/usr/bin/proxy-wrapper"

sudo vi /usr/bin/proxy-wrapper

#! /bin/bash
(echo "CONNECT $1:$2 HTTP/1.0"; echo; cat ) | nc 168.219.61.252 8080 | (read a; read a; cat ) 


git branch --set-upstream-to=origin/master master


반응형

'Open Source > git / svn / bazaar' 카테고리의 다른 글

[GIT] windows에서 invalid username (wincred)  (0) 2016.10.18
commit.template - default commit message  (2) 2012.07.12
resume in github  (2) 2012.02.15
github에 내 사이트 만들기.  (1) 2012.01.17
svn과 proxy  (0) 2010.08.11