티스토리 뷰
(17/10/20 honux의 특강 후 추가 내용)
- git을 제대로 이해하기 위해서는 참조에 대한 개념이 필요하다.
자식은 부모를 찾아갈 수 있는 이유는 부모 링크를 가지고 있기 때문이다.
git commit하면 HEAD(현재 branch, 즉 가장 마지막 commit을 참조)에서 commit 생성된다. branch 는 객체의 참조를 의미할 뿐이다. (commit의 이름이 너무 어렵기 때문에 branch를 사용하는 것이라고 봐도 될듯)1. commit하면 commit 생성2. HEAD 갱신3. HEAD가 가르키는 branch가 있을 x`x경우 branch 갱신
- git branch -f jake C5 -> (강제로 브런치를 commit으로 이동시킴)- git tag jina C5 -> (버전관리) tag와 branch의 차이는 tag는 움직이지 않는다.
- push 할 경우 branch에 연결되어 있는 의미있는 commit들만 push한다.
- git-flow는 요새는 안 쓰며, github flow를 따르자 https://guides.github.com/introduction/flow/
- merge와 rebase의 차이점은 merge는 부모가 두명, rebase는 내 branch와 의 차이점을 얹혀준다고 보면 된다. (rebase는 왠만하면 로컬에서만 하자. 원격일 경우 충돌날 수도 있다.)
추가적으로 학습해야 할 부분 : cherrypick, rebase -i, stash
Link
연습하기 좋은 Site : learngitbranching
누구나 쉽게 이해할 수 있는 git 입문
Pro Git
일반적인 작업시 사용하는 명령어
$ cd [깃 로컬 저장소 경로]
$ git checkout -b [브랜치 이름]
$ git add .
$ git commit -m "[커밋 메시지]"
$ git push origin [브랜치 이름]
웹에서 merge 요청
$ git merge master (내 branch로 받아오는 작업)
새로운 로컬 저장소 만들기
$ cd Desktop
$ mkdir sample
$ cd sample/
$ git init
git init을 잘못한 경우엔 .git을 삭제하면 된다.
git 저장소 상태 보기
$ git status
Add to Index
$ git add .
or
$ git add [커밋할 파일명]
Commit
$ git commit -m "[커밋메시지]"
- 의미있는(논리적인 한가지) 작업을 한가지 했으면 commit을 해라
.gitignore
*.o
*.sqlite
*.bak
*.old
.DS_Store
logs/
- 무시해야 하는 바이너리 파일 등을 .gitignore 파일에 기술하면 커밋에서 제외된다.
Log 확인
$ git log --oneline --decorate --graph
이전 상태로 변경 예
$ git reset -- [파일이름]
$ git reset --hard [커밋아이디]
$ git reset --hard -> 마지막 commit으로 돌아갈때
$ git reset --hard HEAD^ 한단계 앞
$ git reset --hard HEAD^^ 두단계 앞 (git reset --hard HEAD~2)
$ git reset --hard HEAD^2 (두번째 부모)
- (파일 변경사항은 그대로 두고) add 혹은 commit을 뒤로 돌아가게 하는 용도
원격 저장소 연결
1. 원격 저장소 확인
$ git remote -v
2. github에서 repository 생성
3. local과 remote repository 연결 (일반적으로 원격저장소 이름은 origin으로 세팅함)
$ git remote add origin [깃 원격 저장소 주소]
git branch
1. branch 생성(HEAD 에 생김)
$ git branch [브랜치이름]
1-1. 특정 위치에 branch 생성
$ git branch -f [브랜치이름] [커밋아이디]
2. 로컬 브랜치 확인
$ git branch
$ git branch -v (해당 브랜치의 commit ID도 보임)
3. 원격 브랜치 확인
$ git branch -r
4. master로 이동 후 merge
$ git checkout -f master
$ git merge [브랜치이름]
git push
$ git push origin master
$ git push --force
git pull
$ git pull
git clone
$ git clone [깃 원격 저장소 주소] [로컬 원격 저장소 경로]
- remote 주소 설정이 자동으로 세팅됨
git tag
$ git tag [태깅] [커밋아이디]
$ git push origin [태깅]
- 실 배포버전을 위한 용도
- 태깅하고 push하면 github의 release에 올라감
- 태깅하고 commit해도 HEAD위치가 갱신되지 않는다.
'Programming > .common' 카테고리의 다른 글
'객체 지향과 디자인 패턴' 후기 (0) | 2017.10.02 |
---|---|
blocking vs non-blocking / synchronous vs asynchronous (0) | 2017.09.01 |
Travis CI 적용하기 (0) | 2017.08.24 |
테스트 환경 구축하기 (0) | 2017.08.01 |
개발자가 갖추어야 할 9가지 기술 (0) | 2017.07.16 |
댓글