Software Workshop

svn과의 차이점

  1. 로컬저장소가 존재함
  2. 커핏 이전에 스테이지 영역에 추가하는 과정이 존재함
  3. 각각의 버전을 snapshot으로 저장함

svn의 trunk == git의 master

git에 파일 커밋하기

  1. git add
  2. git commit
    1. —amend 옵션을 사용하여 커밋 메시지를 수정할 수 있음
  3. git push

1번과 2번을 같이 하려면 git commit -a

git_add_commit_push.png

git에서 파일 가져오기

  1. git fetch
  2. git merge
  3. git pull == git fetch && git merge FETCH_HEAD

git_pull.png

git의 브랜치 관리

브랜치 만들기

  1. git branch 이름
  2. git checkout 이름

1번과 2번을 동시하는 것은 git checkout -b 이름

브랜치 지우기

git branch -d 이름

브랜치 병합

  1. git branch issue1: 브랜치 생성
  2. git checkout issue1: 브랜치를 issue1로 변경하기
    1. 특정 브랜치에서 변경작업을 할 때는 반드시 해당 브랜치로 체크아웃하고 commit해야 함
  3. git checkout master: 브랜치를 master로 변경하기
  4. git merge issue1: 브랜치 issue1을 master에 병합하기
  5. git branch -d issue1: 병합 후에 필요없는 브랜치 제거

브랜치 목록

현업에서의 브랜치 구조

안정적인 브랜치가 뒤쳐지는 게 현실임
develop과 같은 long-running branch가 존재하기도 하고, topic같은 topic branch가 존재하기도 함

git_branch.png

리모트 브랜치

(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가 나뉘게 된다.

git_fetch_origin.png

rebase와 merge의 차이점

rebase는 병합 히스토리를 깔끔하게 남겨줌
merge에 비해 flat한 브랜치 태깅

Stashing

  1. 완료하지 않은 작업을 커밋하기가 부담스러울 때 임시 스택에 넣어 사용하는 방법 (stash: 안전한 곳에 넣어둠)
  2. 코드 변경작업
  3. git status —> Changes to be committed, Changes not staged for commit 등의 지저분한 내용이 존재함
  4. git stash
  5. git status —> 깨끗해짐
  6. 브랜치 변경이 가능해짐
  7. git stash list
  8. git stash apply —> 어떤 브랜치에서건 꺼내올 수 있지만 당연히 충돌이 발생할 수 있음
    • apply할 때 —index 옵션을 붙여주면 staged 상태에 있는 파일을 복원해줌
  9. git stash pop —> stash를 제거해줌
  10. git stash show -p stash@{0} | git apply -R —> stash를 적용하고 나서 원복하고 싶을 때
  11. git stash branch 브랜치이름 —> stash할 당시의 커밋을 checkout한 후 새로운 브랜치를 만들고 여기에 적용하고 stash 삭제

태그

태그 만들기

git tag 이름

태그 지우기

git tag -d 이름

태그 목록

git tag

Diff

패스워드 저장하기

도구 설치하기

요즘은 대부분의 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/

git_command_overview.jpg