깃 사용법

  • 설정

  • git version - 버전확인

터미널을 열고
  • git config –global user.name “Your Name Here”

  • git config –global user.email “your_email@youremail.com”

  • Git에 가입할 때 썼던 이메일을 적어준다.

  1. git init - init은 initialize를 의미하는데 지금 이 디렉토리를 로컬 Git저장소라고 알려준다.

  2. git add . - 이 디렉토리의 수정된 파일들을 모두 올린다.

    특정 파일만을 올리고 싶다면, git add 파일이름

  3. git commit -m “first commit” - “” 안은 commit하고 싶은 임의의 내용(수정했다 등의)

  4. 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 해서 넣는다.