깃 사용법
설정
터미널을 열고
-
git config –global user.name “Your Name Here”
-
git config –global user.email “your_email@youremail.com”
Git에 가입할 때 썼던 이메일을 적어준다.
-
git init - init은 initialize를 의미하는데 지금 이 디렉토리를 로컬 Git저장소라고 알려준다.
-
git add . - 이 디렉토리의 수정된 파일들을 모두 올린다.
(특정 파일만을 올리고 싶다면, git add 파일이름)
-
git commit -m “first commit” - “” 안은 commit하고 싶은 임의의 내용(수정했다 등의)
-
git push -u origin master master branch에 push한다.
출처: https://zeddios.tistory.com/4
소스트리
기본 기능
- commit : 수정 내역을 사용자 기준 단위로 기록(보통 1개의 기능단위)
- branch : 내 원래 소스코드와 독립된 작업 공간, 여기서 무슨짓을 해도 괜찮음
- checkOut : Branch간의 이동
- Merge : Branch와 Branch를 병합
참고
https://www.slideshare.net/flyskykr/github-46014813
프로깃 가이드
https://git-scm.com/book/ko/v2
주요 명령어
- git init: 깃 저장소를 초기화해준다.
- git config: 깃을 설정한다.
- git help: 깃 도움말.
- git status: 저장소 상태를 체크.
- git add: 깃 커밋 전 수정파일들을 체크한다.
- git commit: 깃에 올리기전에 commit한다.
- git branch: 새로운 브랜치를 만들고, 자신만의 변경사항과 화일 추가 등의 커밋 타임라인을 만든다. 명령어 브랜치이름 으로 만든다.
- git checkout: 체크하길 원하는 저장소로 옮겨가게 해주는 탐색 명령이다. master 브랜치를 보고 싶으면, git checkout master로 사용한다.
- git merge: master 브랜치로 병합한다. git merge 브랜치이름 으로 브랜치에서 만든 모든 변경사항을 master로
- git push: 로컬에서 작업한 것을 깃허브 레포짓에 push한다.
- git pull: 최신화 하기위해 온라인에서 로컬로 pull한다.
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=, –after= // Show commits more recent than a specific date.
- git log –until=, –before= // 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 // 스테이지/커밋 숫자들만 출력
- 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 하면 모두 보여줌
기타
.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 private repository clone 방법
$ git clone https://사용자의NAME:비밀번호@github.com/저장소를판유저이름/저장소이름
이때 특수문자가 들어간다면 url encoding 해서 넣는다.
출처
https://kim-daeyong.github.io/2019-01-04-git%EC%82%AC%EC%9A%A9%EB%B2%95/