svn과의 차이점
- 로컬저장소가 존재함
- 커핏 이전에 스테이지 영역에 추가하는 과정이 존재함
- 각각의 버전을 snapshot으로 저장함
svn의 trunk == git의 master
git에 파일 커밋하기
git addgit commit- —amend 옵션을 사용하여 커밋 메시지를 수정할 수 있음
git push
1번과 2번을 같이 하려면 git commit -a

git에서 파일 가져오기
git fetchgit mergegit pull==git fetch && git merge FETCH_HEAD

git의 브랜치 관리
브랜치 만들기
git branch 이름git checkout 이름
1번과 2번을 동시하는 것은 git checkout -b 이름
브랜치 지우기
git branch -d 이름
브랜치 병합
git branch issue1: 브랜치 생성git checkout issue1: 브랜치를 issue1로 변경하기- 특정 브랜치에서 변경작업을 할 때는 반드시 해당 브랜치로 체크아웃하고 commit해야 함
git checkout master:브랜치를 master로 변경하기git merge issue1: 브랜치 issue1을 master에 병합하기git branch -d issue1: 병합 후에 필요없는 브랜치 제거
브랜치 목록
git branchgit branch -vgit branch —no-merge: 병합되지 않은 브랜치만 조회git branch —merged: 병합된 브랜치만 조회
현업에서의 브랜치 구조
안정적인 브랜치가 뒤쳐지는 게 현실임
develop과 같은 long-running branch가 존재하기도 하고, topic같은 topic branch가 존재하기도 함

리모트 브랜치
(remote)/(branch) 형식의 이름으로 사용됨
ex) origin/master: 리모트 저장소 origin의 master 브랜치를 지칭함
issue1을 push하면 서버의 issue1 브랜치는 로컬에서 origin/issue1이 지칭하는 것과 동일함
보통 git clone을 하게 되면 로컬의 master 브랜치가 생기고 리모트 저장소의 master 브랜치를 가리키는 origin/master 브랜치가 생김
git clone github.com/testproject.git
다른 사용자가 push한 것을 fetch하게 되면 origin/master와 master가 나뉘게 된다.

rebase와 merge의 차이점
rebase는 병합 히스토리를 깔끔하게 남겨줌
merge에 비해 flat한 브랜치 태깅
Stashing
- 완료하지 않은 작업을 커밋하기가 부담스러울 때 임시 스택에 넣어 사용하는 방법 (stash: 안전한 곳에 넣어둠)
- 코드 변경작업
git status—> Changes to be committed, Changes not staged for commit 등의 지저분한 내용이 존재함git stashgit status—> 깨끗해짐- 브랜치 변경이 가능해짐
git stash listgit stash apply—> 어떤 브랜치에서건 꺼내올 수 있지만 당연히 충돌이 발생할 수 있음- apply할 때 —index 옵션을 붙여주면 staged 상태에 있는 파일을 복원해줌
git stash pop—> stash를 제거해줌git stash show -p stash@{0} | git apply -R—> stash를 적용하고 나서 원복하고 싶을 때git stash branch 브랜치이름—> stash할 당시의 커밋을 checkout한 후 새로운 브랜치를 만들고 여기에 적용하고 stash 삭제
태그
태그 만들기
git tag 이름
태그 지우기
git tag -d 이름
태그 목록
git tag
Diff
- modified와 stage 비교
git diff
- unmodified(HEAD)와 stage 비교
git diff —staged(cached)
- 리비전끼리 비교
git diff rev1 rev2
- modified와 remote repository 비교(HEAD~18은 버전)
git diff HEAD~18
- stage와 remote repository 비교
git diff —staged HEAD~18
- remote와 modified를 비교해서 변경된 파일의이름만 비교
git diff —name-only HEAD~4
- HEAD와 origin/master를 비교
git diff origin/master
패스워드 저장하기
도구 설치하기
요즘은 대부분의 OS 환경에 이미 git과 함께 설치가 되므로 생략 가능함
git credential-osxkeychain
curl -s -O https://github-media-downloads.s3.amazonaws.com/osx/git-credential-osxkeychain
chmod u+x git-credential-osxkeychain
sudo mv git-credential-osxkeychain "$(dirname $(which git))/git-credential-osxkeychain"
다음 설정 중 각자의 OS 환경에 맞는 걸 선택하여 실행하면 됨
git config --global credential.helper osxkeychain
git config --global credential.helper wincred
Linux는 credential 매니저를 지정할 수 없어서 다음과 같이 지정해야 함
git config --global credential.helper 'store --file ~/.git-credentials'
참고 자료
페이스북 빅데이터 스터디 그룹에 올라온 git 명령어 개요 이미지
https://www.facebook.com/bigdatastudy/photos/a.110625387093056/272139340941659/
