Blog

git 사용법

git설정
git config –list 설정확인
이거두개 설정은 필수.
git config –global user.name “jaewon”
git config –global user.email “j@gamil.com

remote설정
git remote add 저장소이름 https:// // 로컬에 리모트 저장소에대한 참조 추가
git remote rename 저장소이름 새저장소이름 // 로컬의 리모트 저장소 이름변경
git remote rm 저장소이름 // 로컬의 리모트저장소 삭제
git push remote저장소이름 로컬브랜치
git push remote저장소이름 로컬브랜치:뉴브랜치이름 // 리모트 브랜치생성
git pull ( fetch[저장소에서 변경사항 가져오기] + merge[가져와서 브랜치합치기] )
git clone 리모트 저장소경로 // 리모트 저장소 로컬에 받기
git checkout -t origin/리모트 브랜치 이름 // 리모트저장소의 브랜치 받기
git branch -r // 리모트 저장소 보기
git remote set-url remote저장소이름 리모트url // 리모트 저장소 변경
git push origin –delete 리모트브랜치명// 리모트 브랜치삭제
git remote update origin –prune // 리모트 브랜치 기준 로컬브랜치 싱크 맞추기

untracked 파일을 stage 에 추가 / 제거
git add . // 현재 폴더의 모든파일 stage 에 추가
git add *.css //css파일만 staging
git reset HEAD a.txt // a.txt 스테이지에서 워킹디렉토리로( tracked -> untracted )
(git reset a.txt) 도 동일한 듯

diff 보기
git diff // 워킹 디렉토리와 스테이지간 비교
git diff –cached // 스테이지와 저장소에 커밋된 파일 비교
git diff HEAD~1 // 1개 이전 커밋의 diff보기 ?

log 보기
git log로 찍히는 번호로 해당 샷으로 돌아갈수잇다
git log -p fileName // fileName을 해당 path에 맞춰 사용하면 파일에대한 diff만 확인할 수 있다.
git log –since=yyyy-mm-dd –until=yyyy-mm-dd // 날짜사이의 로그 필터링
git log –since=<date>, –after=<date> // Show commits more recent than a specific date.
git log –until=<date>, –before=<date> // Show commits older than a specific date.
git log –grep=”검색할 str”; // 대소문자구문
git log –grep=”검색할 str” -i; // 대소문자구분없음
git log –graph // 커맨드라인에서 그래프로 보여줌
git log –graph –all // 모든 branch의 그래프를 보여줌
git log –author =”jw9651″ //커미터 검색
git shortlog // 저장소에 참여한 모든 사용자가 만들어낸 커밋의 숫자를 알파벳 순서로 정렬하여 출력
git shortlog -n // 알파벳 순이아닌 커밋 횟수순
git shortlog -e // 작업자 이름옆에 이메일 메타데이터 출력
git shortlog -s // 스테이지/커밋 숫자들만 출력
ex)
git log –grep=”SDU-5054″ -i –author=”jw9651″
history | grep “push”
git reflog | grep merge | grep 5054

merge  방식 개념
*Fast Forward 
Fast Forward는 Merge할 브랜치가 가리키는 commit이 현재의 (기준)브랜치보다 앞선(뭔가가 더 수정된) commit이기 때문에 현재 브랜치의 최신 커밋(HEAD)이 merge할 브랜치의 최신 커밋을 가르키는 merge를 말한다.
*Non Fast Forward 
master(기준)브랜치가 merge할 브랜치가 생성된 시점 이후로 새로운 commit이 발생하여 merge할 브랜치와 master브랜치와의 merge commit가 실행되어 master브랜치로 통합되는 것
fast forward가 가능한 경우라도  non fast forward옵션을 지정하여merge할 브랜치를 그대로 보존할 수 있다.

브랜치 통합 참조

merge
일반적인 master의 HEAD 포인터를(컨플릭트시 병합하여) 가장 앞의 커밋으로 옮기는 fast-forward 방식의 머지, 변경 이력을 모두 확인할 수 있음.

rebase
merge할 토픽브랜치를 master브랜치 기반의 새로운 패치를 만들어 기준브랜치에 맨 앞으로 병합한다. // git rebase master기준브랜치
그다음 master브랜치로 checkout한 다음 git rebase 토픽브랜치(master브랜치에 젤 앞에 있는 커밋 == 임시패치)를 하면 master가 rebase의 패치로 HEAD를 가리키게된다.
이 방법은 전체적인 이력을 확인하기가 어렵다.
rebase는 예를들어 non fast forward한 경우 topic브랜치에서 git rebase master를 할 경우 master의 HEAD를 new base로 지정하고 topic브랜치에서 발생한 커밋들을 쌓아가는것. 
자르고 붙이는 느낌이 강하다. 

reset
git reset –hard 7bde5c // 해당 식별 id 이후의 모든 변경사항을 리셋
그 이후 샷으로는 git reflog를 보면 모든 로그가 나오거 거기서 샷으로 갈 링크를 알 수 있음
git reset 파일명 // stage -> unstage로변경, add취소
git reset –hard하면 이전으로만 돌아감
git reset 종류는,
git reset –soft 식별id: add 는 된상태로 
git reset –mixed 식별id: add하기 전 untracted 로 
git reset –hard 식별id: 해당 커밋 로그 untracted 파일 까지 삭제

commit
git commit -m “blabla”;
git commit –amend // 커밋했는데 빠진 파일있거나 수정하고 다시 커밋, 모두 하나의 커밋으로 샷이남게됨됨

branch
git branch // 사용가능한 브랜치 목록
git branch 브랜치명 // 브랜치생성 헤더는 기존 브랜치에 유지
git checkout -b 브랜치명 // git branch 브랜치명 + git checkout 브랜치명 과동일
git checkout 브랜치명 // 해당 브랜치로 이동
git checkout commit id // 치면 해당 커밋시점으로 돌아감
git branch -d 브랜치명 //브랜치삭제
git push origin –delete 브랜치명 // 리모트 브랜치 삭제

gitignore
버전관리에서 제외하고싶은 파일 관리
.gitignore 파일 생성 후 아래와 같이 추가하여 버전관리 대상에서 제외할 수 있다.
*.js // 해당 확장파일 모두 제외
tmp/ //해당 폴더하위 모두 제외

파일삭제 (버전관리에서도 제외됨)
git에서 파일 삭제시 그냥지우면(rm -rf) 해당파일은 Tracted인데 존재하지 않기때문에 Change but not updated라고 계속뜰것이다.
git에서 Tracted되고 있는 파일의 삭제시 git rm a.txt를 사용하여 삭제하면 워킹디렉토리에서 삭제되고 삭제된 파일은 git의 deleted 목록에 있다.
이 상태에서 commit하면 Tracted 목록에서 삭제된다.
이미 파일을 stage에 추가했다면 다음과 같은 애러가 출력된다. error: the following file has changes staged in the index:
이럴경우 -f옵션을 주어( git rm -f a.txt ) 강제로 삭제할 수 있다.

stash (워킹 디렉토리에 unstaged 파일들을 백업하고 워킹디렉토리를 깨끗한 상태 즉 HEAD의 상태로 만든다.)
git stash // unstaged파일 백업, 워킹디렉토리 head 상태
git stash list // stash 리스트 보기
git stash apply // stash 꺼내서 적용
git stash drop stash@{0} // stash삭제
git stash pop // 스태시 적용하고 적용한 스태시 삭제
git stash clear // 전체 stash list를 삭제

 


gitk ( gui확인하는 클아이언트  )
gitk –all 하면 싹다 보여줌
그냥 gitk하면 현재 브렌치의 마지막 커밋부터 최총커밋까지 보여줌

기타 
.config 파일의 alias 사용
.config 는 .git 디렉토리에 있으며 프로젝트/저장소의 정의 설정파일이다.
여기서 자주사용하는 명령에 대한 alias를 생성할 수 있다.
터미널에서 아래와같이 치면
git config –local alias.ad add
git config –gloabl alias.st status
.config 파일안에
[alias]
    ad = add
    st = status
라고 추가돼 있고 축약어로 git 명령어를 사용할 수 있다.
git clean -xdf하면 최근 생성된 add안된 파일까지 지움
git clean -f // add되지않은 untracked 파일들 삭제

하고싶은 github repository 에 포크하고
내꺼에서 pull하고 수정한다음 내꺼에 push하고 거기서 리퀘스트 요청하면 상대방이 수락하는 step // command line으로 도보기
git