- Blob: 파일 하나의 내용에 대한 정보.
- Tree: Blob이나 subtree의 메타데이터(디텍토리 위치, 속성, 이름 등)
- Commit: 커밋 순간의 스냅샷.
- Giihub
- bitbucket
- GitLab
git config --global user.name "{name}"
git config --global user.email "{email}"
git config --global core.editor "{vim}" // 기본값 nano
git config --global core.pager "{cat}" // 기본값 less
설정 상태는 git config --list로 확인 가능하고, ~/.gitconfig에서도 수정, 확인 가능하다.
global을 local로 변경하면 해당 디렉토리에서만 사용하는 설정으로도 세팅이 가능하다.
alias 의 설정도 가능하니 자주 쓰는 기능(git log --pretty --graph.. 같은)을 alias로 등록해도 좋다.
git config --global | local alias.${alias} 'og --graph'
1. commit의 제목은 commit을 잘 설명하는 하나의 구나 절로 완성.
2. Importance of Capitalize
3. prefix 꼭 달기
- feat: 기능 개발 관련.
- fix: 오류 개선 혹은 버그 패치.
- refactor: 리팩토링.
- docs: 문서화 작업.
- test: test 관련.
- conf: 환경설정 관련.
- build: 빌드 관련.
- ci: Continuous Integration 관련.
- BREAKING CHANGE: 툭정 버전이나 api 등이 동작하지 않게 되는 변경사항(Drop support /api/v1)
Conventional Commits 은 팀마다 다르기 때문에 이를 참조해야 한다.
-
commit은 동작 가능한 최소단위로 자주 할 것.
-
해당 작업 단위에 수행된 모든 파일 변화가 해당 commit에 포함되어야 함.
-
모두가 이해할 수 잇는 log를 작성할 것.
-
오픈 소스에서는 영어가 강제되지만, 그렇지 않을 경우 팀 내 언어를 사용할 것.
-
제목은 축약형으로 쓰고(50자 이내), 내용은 문장형으로 작성하여 추가 설명.(이유, 작업 내용)
-
제목과 내용은 한 줄 띄워 분리할 것.(마크다운 언어.)
-
내용은 commit 의 구성과 의도를 충실히 작성할 것.
-
add .,commit -m ""사용 지양.
-
blob을 working directory 에서 staging area 에 올린다.git add ${file}git add *로 모든 파일 add 가능git add .현 디렉토리 모든 파일.(권장하지 않음.)git add ${dir}
-
- git commit 명령어 실행시 뜨는 에디터 창에서 message를 입력(권장.)
- git commit -m "message"를 사용해도 된다.
- git commit -am "message" : git add 와 git commit을 한번에
-
- null 은 마지막 버전이 없다는 의미.
- git log —all : Show All branch.
- git log —graph: Show branch graph.
- git log —oneline: 정보를 한줄로 간략하게 표기.
-
- add 하기 전에 실행. 마지막 버전과 현재 변경사항을 비교.
-
- 임시적으로 해당 버전으로 옮김. → head가 옮겨감
-
- head와 master branch모두 옮겨감. 옮겨간 이후의 버전들이 삭제됨. 그러나 내가 지우더라도 해당 파일이 다른 사람에게 있다면 계속 돌아온다.
git reset —-hard {commit id}: reset current changesgit reset HEAD {fileName}: unstaging(add 취소) 그냥 git reset, 모든 파일을 대상으로.git reset HEAD^: commit 취소git commit --amend: commit message 변경
-
git revert --no-commit HEAD~n- : 여러개의 사항을 돌릴때 커밋을 한번만 하기 위해
--no-commit을 사용한다.
- : 여러개의 사항을 돌릴때 커밋을 한번만 하기 위해
- version 1, version 2, version 3, version 4 가 있고, version 4가 최신 버전일 때
- version 3 로 revert 하고 싶다면 git
revert ${version 4 id}. version 4는 삭제되지 않고. version 3로 되돌아가게 된다. - version 1 으로 되돌아가고 싶다면 version 4, version 3, version 2 를 순서대로 revert하면된다. revert는 해당 버전 이후의 모든 버전의 변경사항을 되돌리는 것이 아니라 해당버전의 변경사항만을 되돌리기 때문.
- 역순을 따르지 않을경우 충돌이 발생할 수 있음.
💡 버전관리 하고싶지 않은 파일이 있다면 .gitignore 에 파일명을 작성.- git init {dir} : git으로 관리할 디렉토리
-
git mv ${file} ${newFile}git mv가 아닌mv로 변경하게 되면 파일을 제거한 후 생성하는 것으로 추적된다.
-
변경사항을 마지막 커밋 시점으로 철회.
git checkout -- ${file}- 최신 버전에서는
git restore로 변경되었다.
-
git remote -v: 원격 저장소 리스트 + 주소git remote add ${name} ${remotePath}: 원격 저장소 추가.(관습적으로 origin으로 이름을 정한다.)git remote remove {name}: 원격 저장소 제거.
-
git push --set-upstream remote branch: 기본적인 push 저장소와 branch 설정.
이 다음부터는 git push 만으로 설정된 저장소와 브랜치로 push 가능.
-
- 기본적으로 repository의 이름으로 directory가 생성.
- 다른이름으로 지정하고 싶다면
git clone ${address} ${dirName}
브랜치를 생성할 때에는 해당 브랜치에서 어떤 일을 할 것인지를 이름으로 명시한다.
-
- 새로운 브랜치를 생성한다.
git branch {name} -m생성과 동시에 브랜치로 이동
-
- 브랜치를 이동한다
- 최신 버전부터는 checkout이 swtich와 restore로 나누어 진다.
-
- 대상 브랜치의 작업 내용을 현재 브랜치로 병합시킨다.
-
- 대상 브렌치를 제거한다.
-
Merge 실행시 각각의 브랜치에서 같은 라인을 수정할 때 발생한다. 사용자가 직접 어떤 코드를 남길지 선택하고, 필요없는 부분을 지운 뒤 add, commit 다시 실행.
-
https://danielkummer.github.io/git-flow-cheatsheet/index.ko_KR.html
-
가장 많이 사용되는 모델, 각 단계가 명확하게 구분된다.
-
(hotfix) -
master- (release) -develop- feature- develop: 다음 개발이 진행될 branch
- master: 사용자가 보게될 버전.
-
develop 브랜치에서 또 feature 브랜치를 생성하여 안정적으로 병합될 수 있도록 설꼐.
-
-
MacOs 설치:
brew install git-flow-avh -
초기화: git 저장소 내에서
git flow init -
새 기능 시작:
git flow feature start ${featureName}브랜치를 생성하고 해당 브랜치로 전환.
-
기능 완료:
fit flow feature finish ${featureName}feature 브랜치를 develop 에 병합, feature 브랜치를 삭제하고 develop 브랜치로 전환.
-
릴리즈 시작:
git flow release start ${version}version ex) v1.0.00220113001 ( 년,월,일 몇 번째)
-
릴리즈 종료:
git flow release finish ${version}- 종료시 에디터가 3번 나온다.
- 첫 번쨰: main(master)으로 들어가는 merge commit message.
- 두 번쨰: 릴리즈 노트. 무엇을 했는지.(중요).
- 세 번째: develop으로 들어가는 merge commit message.
- 종료시 에디터가 3번 나온다.
-
릴리즈가 종료 되면
- develop 브랜치에서 remote develop 브랜치로 push.
- main 브랜치에서 remote main 브랜치로 push.
git push --tags로 태그도 pushgit tag로 버전 태그 확인 가능.
-
-
-
- master - feature
- 브랜치 모델을 단순화 CI 의존성이 높음, pull request로 잘못된 push를 방지.
-
- production - pre-production - master - feature
- deploy, issue에 대한 대응이 가능하도록 보완.
- 관리자가 Repository를 생성.
- 관리자가 develop 브랜치 생성.
- 팀원이 해당 Repository를 fork.
- 팀원이 해당 Repository를 clone 하고 git flow init 하면 develop에 관리자가 초기화한 파일이 들어옴.
- 팀원이 작업 후 자신의 remote에 push
- pull requests 생성.
- 팀원이 추가 작업 후 자신의 remote에 push
- 팀장이 pull request 수락.
- 팀장은 자신의 local에
git pullorgit fetch origin develop+git merge FETCH_HEAD - 팀원은 자신의 local에
git remote add upstream ${url},git fetch upstream develop+git merge FETCH_HEAD
- Jira: Issue Tracking Service
- Issue 를 생성하고, Commit 메시지에 jira 티켓을 맨 앞에 명시하면 자동으로 해당 이슈에 커밋.
git rm -r --cached .
- 저장소를 생성할때 README 파일이나, .gitignore파일을 생성해서 발생하는 문제 먼저 파일을 가져와야 한다.
- git pull origin master --allow-unrelated-histories






