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. 원격 브랜치 관리
master 브랜치를 rebase하고 원격 branch에 push하려고 하면 에러 git push -f가 가능해야 함.
git push origin newb : origin 에 해당하는 repo에 newb 브랜치를 올림.(없으면 생성함)
git push origin :newb : origin 에 해당하는 repo에 newb 브랜치를 지움.
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
11. 지워진 파일들을 모두 git rm하기
git status --porcelain | awk '/^.D .*$/ {print $2}' | xargs git rm
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
출처 : http://bunhere.tistory.com/37