초기작업

사용자 정보 생성하기

   git config --global user.name "Firstname Lastname"
   git config --global user.email "your_email@example.com"
   vi ~/.gitconfig

계정 SSH Key 생성하기

   ssh-keygen -t rsa -C "[이메일]"

새로운 저장소 만들기

폴더를 만든 후

   git init

저장소 받아오기

원격저장소를 로컬로 가져오기

   git clone git@github.com:JaewoongMoon/[Git저장소이름] 

ssk key 가 있어야 하는 위치

   ~/.ssh

버추얼 머신에는 저 폴더를 통째로 복사해두면 된다.

작업의 흐름

로컬브랜치는 3개의 나무로 구성

1) 작업 디렉터리 (Working Directory) 또는 Working Tree

실제 파일들

2) 인덱스 (Index)

준비영역 (Staging area)

3) 헤드 (HEAD)

최종확정본(Commit)

추가와 확정

변경된파일 추가하기

개념 : WorkingTree에 있던 파일을 인덱스에 추가

git add [파일경로/파일명]					

변경된 파일을 확정하기

개념 : Index에 있던 파일을 HEAD에 반영

git commit -m "커밋 메세지"

버전 컨트롤에서 제외하기 ex) class 파일

git rm --dry-run *.class

제외될 파일 리스트 확인

git rm *.class

버전컨트롤에서 제외하기 (하드디스크에서도 지우기)

git rm [path]

저장소에는 삭제되지만 작업 공간에는 삭제되지 않도록

git rm --cached [path]

저장소, 작업공간에는 삭제되지 않지만 변경을 추적하지 않도록

git update-index --assume-unchanged [path]

변경내용발행(push)하기

개념 : 로컬저장소를 원격저장소에 push 하기

git push origin [브랜치명]

차분만 올릴경우 (거의 이쪽을 많이 쓴다.)

git push -u origin [브랜치명]

로컬 변경사항 취소하기 (가장 마지막의 커밋상태로 되돌리기)

git reset --hard HEAD

커밋메세지 변경

git commit --amend

꼬리표(tag) 달기

git tag 1.0.0 1b2e1d63ff

가지(branch)치기

브랜치로 이동하기

git checkout [브랜치명]

브랜치를 만들면서 새로 만든 브랜치로 이동하기

git checkout -b [브랜치명]

브랜치 수정사항 commit 후 원격 저장소에 push

git push –set-upstream origin [브랜치명]

브랜치 목록보기

git branch -a

브랜치 삭제하기

git branch -d [브랜치명]

수정된 파일과 내용을 확인하기

git diff
git diff [원래가지] [비교 대상 가지]

갱신과 병합(merge)

개념 : 로컬저장소를 원격저장소에 맞춰 갱신

원격저장소의 변경 내용이 로컬 작업 디렉토리에 받아지고(fetch), 병합(merge)된다.

원격 master를 현재가지에 병합

git pull

원격의 특정 브랜치를 현재가지에 병합

git fetch
git merge [브랜치명]

현재의 로컬 master브랜치에 feature브랜치 병합

git checkout master
git merge --no-ff [브랜치명]

충돌해결

1. 로컬에서 병합을 시도한다. (충돌상태가 되도록)

git fetch
git merge master

2. 충돌이 발생한 파일을 열어보면 충돌영역이 표시되어 있다. 수동으로 충돌을 처리한다.

3. 충돌이 발생한 로컬 브랜치에서 커밋한다.

git commit -am "Fix conflict"

4. 로컬 마스터 브랜치에 로컬브랜치 내용을 병합한다.

git checkout master
git merge --no-ff [충돌을 해결한 브랜치명]

5. 원격 저장소 마스터 브랜치에 발행한다.

git push origin master

git 관리대상에 제외하기

git rm [파일명]

원격저장소 관련

원격 저장소 주소가 ssh 주소로 되어있지 않으면 푸쉬할 때마다 인증정보를 물어본다!!

원격 저장소 주소 확인

git remote -v

원격 저장소 주소 변경

git remote set-url origin [변경될 주소]

리모트 브랜치 삭제

git push origin :[브랜치명]

리모트 브랜치 상황 보기

git remote show origin

원격저장소에서 삭제된 브랜치를 로컬저장소에 동기화하기

git remote prune origin   #이 커맨드가 먹히지 않는다면 아래의 커맨드를 수행한다.
git branch --merged master | grep -v '^[ *]*master$' | xargs git branch -d

상태/로그

Git 상태보기

   git status

로그확인

-p는 patch의 약자다.

git log 
git log -p 숫자
git log -p 커밋ID 

커밋메세지로 검색

git log --grep=키워드

특정 기간의 로그 확인

git log --since=2008-01-15 --until=2023-11-15
git log --since=2022-10-01 --until=2023-11-01 --pretty=oneline

특정 커밋 시점의 로그 확인

git reset --hard [COMMIT_ID]

로그의 차분을 확인하고 싶을 때

git log --pretty=short
git log --graph

현재의 수정사항과 과거의 로그 모두 확인

   git reflog

실행 로그 자세히 보기 (트러블슈팅시에 유용)

~GIT_CURL_VERBOSE=1 GIT_TRACE=1~ 을 앞에 붙이고 실행한다.

GIT_CURL_VERBOSE=1 GIT_TRACE=1 git pull origin master

설정 관련

설정(config) 정보 보기

git config --list

설정 정보 삭제

git config --global --unset [설정명]

유저 설정 관련 (복수의 유저로 운용할 때)

  • git config --list 로 현재 설정된 유저를 확인한다.
  • user.email, user.name 등을 보면된다.
  • 만약 유저를 변경하고 싶으면 아래 커맨드를 사용
    git config --global user.name "Firstname Lastname"
    git config --global user.email "your_email@example.com"