'Git, GitLab의 이해와 실무 활용' 란 강의를 듣고 정리
$git init
원격저장소 연결
$ git clone 연결할 git주소
$ git remote add origin 연결할 git주소
$ git remote -v
작업디렉토리의 파일 상태
1) Untracked
: 변경점을 발생했으나 git에 의해 관리되지 않은 파일, 단 한번도 staging area에 포함되지 않은 파일
$ git add TestService.java
$ git status
On branch master
No commits yet
Changes to be committed:
(use "git rm - cached …" to unstage)
new file: TestService.java
$ git commit
$ git commit -m ""
로컬저장소에 영구 저장
$ git commit - amend
마지막 반영한 커밋메시지 수정하고 싶을때
$ git revert commitID
원복
$ git pull origin master
원격저장소에 반영
$ git push origin master
원격저장소의 내용이 로컬저장소에 먼저 반영(update)
브랜치 branch
branch는 일종의 포인터, 커밋지점을 가리킨다.
$ git branch
현재 브랜치를 확인하는 명령어
$ git checkout feature-login
브랜치 변경(이동)
$ git log - all - graph
$ git checkout -b issue
브랜치 생성과 동시에 이동
$ git merge issue (master와 병합)
브랜치 병합
: 기준이 되는 브랜치로 이동해서 병합해야 한다!
- 3-Way Merge 방식으로 병합한다
$ git branch -d issue
브랜치 삭제
$ git branch -v
$ git mergetool
브랜치 충돌(conflict) 해결하기
1) 직접 merge하기
2) 툴사용하기
tag : 특정 시점의 소스코드 정보를 기록함
$git tag [태그명]
lightweight 태그 생성
$git tag -a [태그명] -m [태그메시지]
annotated 태그 생성
$git tag -a v1.0 -m "Implemented login feature"
$git log
commit 56d68d751873b5a68216e1278fef7de78c608958 (HEAD -> master, tag: v1.0, origin/master)
$git show v1.0
태그 상세정보 확인하기
$git log - online
태깅하고자 하는 커밋의 ID값 확인
$git tag -a v0.1 24b56ff -m "fix issue number-1"
커밋ID값을 인자로 태깅하기
GitFlow 모델
1) feature
: 기능을 개발하는 브랜치
- 기능개발 완료 or 스프린트 주기 종료시, develop 브랜치로 merge후 삭제됨
2) release
: 배포준비 브랜치
- 배포가능 상태가 되면 master 브랜치로 병합 & tag명시
- 이슈에 대한 수정사항은 반드시 develop 브랜치에 병합해야 함
3) hotfixs
: 긴급용(장애 및 버그발생 대응) 브랜치
- master 브랜치로부터 분기, 이슈에 대한 수정후 master, develop 브랜치에 최종 반영되어야 함
feature
$git flow feature start [개발할 기능명]
$ git branch
develop
git add LoginService.java
git commit -m "Commit#1 on feature/login branch"git log
$git flow feature finish [개발할 기능명]
기능개발 완료
Fast-forward
gitflow_test/LoginService.java | 1 +
1 file changed, 1 insertion(+)
create mode 100644 gitflow_test/LoginService.java
Deleted branch feature/login (was 694c031).
Summary of actions:
release
$git flow release start [버전명]
$ git branch
develop
master
$git flow release finish [버전명]
Switched to branch 'master'
Merge made by the 'recursive' strategy.
gitflow_test/LoginService.java | 1 +
gitflow_test/MainService.java | 2 ++
2 files changed, 3 insertions(+)
create mode 100644 gitflow_test/LoginService.java
create mode 100644 gitflow_test/MainService.java
Already on 'master'
Switched to branch 'develop'
Merge made by the 'recursive' strategy.
gitflow_test/MainService.java | 1 +
1 file changed, 1 insertion(+)
Deleted branch release/1.0 (was af83558).
Summary of actions:
$ git log - oneline
a3dd93a (HEAD -> develop) Merge tag '1.0' into develop
7e90a02 (tag: 1.0, master) Merge branch 'release/1.0'
af83558 Commit#3 on release/1.0 branch
668d973 Commit#2 on develop branch
694c031 Commit#1 on feature/login branch
62f2db4 A Developer : Commit 1 for AService
hotfix
$git flow hotfix start issue#1
$git flow hotfix finish issue#1
Switched to branch 'master'
Merge made by the 'recursive' strategy.
gitflow_test/MainService.java | 1 +
1 file changed, 1 insertion(+)
Switched to branch 'develop'
Merge made by the 'recursive' strategy.
gitflow_test/MainService.java | 1 +
1 file changed, 1 insertion(+)
Deleted branch hotfix/issue#1 (was 7242e4c).
Summary of actions: