1. 다운로드, 이론, 명령어
Git 설치 과정
git bash here 체크
💡 Git bash : Window 에서도 유닉스 커맨드를 사용할 수 있도록 해주는 프로그램
Launch git bash 체크, View relase notes 체크 해제
Git 설치 후
폴더 내에서 우클릭 Git Bash Here 클릭
Sublime Text 설치하기
Sublime Text - A sophisticated text editor for code, markup and prose
실행
검색창에 sublime
Git 써보기
Repository : 저장소 .git 디렉토리
Commit : 프로젝트 디렉토리의 특정모습을 하나의 버전으로 남기는 행위 & 결과물
Git Bash 명령어 (Terminal)
mkdir MathTool
폴더 만들기
ls
파일 확인 (파랑색은 폴더?)
cd MathTool
폴더로 이동
git init
비어있는 레포지토리 생성
ls -al
레포지토리 생성됐는지 확인
cd .git
레포지토리로 들어감
cd ..
폴더 바깥으로 나가기
git config user.name "Jun"
Commit 방법
git config user.email "kimhyunjun576@gmail.com"
git commit -m "Create calculator.py and License"
-m 은 message
💡 nothing added to commit but untracked files present 깃에 의해 추적되지 않다. 버전 관리 대상이 아니다. 커밋할 파일을 미리 지정해 줘야함. 수정된 파일의 모습이 커밋에 포함될 것이라 지정하는 것!
git add calculator.py
git add License
💡 root-commit : 첫번째 커밋
Git 의 3가지 작업 영역
Working directory(working tree) → Staging area(index) → Repository
git add git commit -m
git status
프로젝트 디렉토리의 현재 상태 확인
touch day1
파일 만들기
git add .
모든 파일 Staging area 에 추가
git reset calculator.py
Staging area 에서 파일 제거
요약.
mkdir
cd
git init
git config user.name "Jun"
git add ""
git commit -m ""
2. GitHub commit 방법 및 복사붙여넣기
git help add
man git-add
도움말
q
나가기(Quit)
GitHub: Where the world builds software
깃허브 : Remote 레포지토리
내컴퓨터 : Local 레포지토리
git remote add origin https://github.com/MeA-95/Math_Box.git : 레포지토리 생성의 커맨드.
→ remote repository 에서 origin 이라는 이름으로 추가.
git push -u origin matser (깃 푸시 유 오리진 마스터) : 연결의 커맨드
→ origin 이라는 remote repository 에 master 브랜치를 생성하고 푸시.
→ -u : - -set-upstream → local repository 에 있는 master 브랜치가 origin 에 있는 master 브랜치를 tracking (추적) 하는 걸로 설정.
→ git push 와 git pull 만으로 주고받을 수 있다.
→ 하지 않을 경우 git push origin master :master 로 적어야 함. (local :remote)
Login
새로고침
Commit 을 눌러 수정된 부분 확인
💡 복사 : Ctrl + Insert 붙여넣기 : Shift + Insert
3. 권한, 탐험, README.md
git add .
git commit -m ""
git push
로컬 레포지토리(내컴퓨터) → 리모트 레포지토리(GitHub) 에 반영
💡 README 라는 파일명은 GitHub 에 바로 표시된다.
git pull
리모트 레포지토리 → 로컬 레포지토리 에 반영
cat[README.md](http://readme.md)
로컬 레포지토리 워킹 디렉토리 내용 확인
git push 권한 열기
- Setting - Manage access
Public repository 와 Private repository - invite a collaborator
- 초대장을 이메일로 받는다.
탐험하기 (Explore)
- code 의 HTTPS 복사
- 터미널에서
cd ..
로 부모폴더로 나온 후 git clone [https://github.com/numpy/numpy.git](https://github.com/numpy/numpy.git)
💡 오픈 소스
- numpy(이전 영상에서 살펴본 파이썬 수치 계산용 라이브러리, https://github.com/numpy/numpy)
- Linux(위에서 말한 리눅스, https://github.com/torvalds/linux)
- MySQL Server(데이터베이스 프로그램, https://github.com/mysql/mysql-server)
- WordPress(설치형 블로그 프로그램, https://github.com/WordPress/WordPress)
- React Native(페이스북에서 만든 모바일 UI 프레임워크, https://github.com/facebook/react-native)
- Vue.js(웹 UI 프레임워크, https://github.com/vuejs/vue)
- Tensorflow(머신러닝 프레임워크, https://github.com/tensorflow/tensorflow )
💡 오픈 소스의 장단점
장점
- 무료로 사용할 수 있다.
- 여러 개발자들이 참여하기 때문에 폐쇄적으로 코드를 관리할 때보다 코드의 신뢰도가 더 높다.(이 부분은 사람마다 의견이 다를 수 있습니다)
- 오픈 소스 프로젝트에 참여 중인 다른 개발자들에게 질문을 할 수 있다.
- 어떤 프로그램을 개발할 때 특정 분야에서 사실상 표준처럼 사용되는 오픈 소스 프로그램을 많이 활용할수록 전체 개발 속도를 단축시킬 수 있다.
단점
- 참여자 수가 많지 않거나, 참여자의 실력이 좋지 않으면 소스 코드의 신뢰성을 보장하기 어렵다.
- 해당 오픈 소스를 사용해서 문제가 생겼을 때 보상을 해주거나, 책임을 질 주체가 없다.
README.md : markdown 확장자
정의
마크다운 사용법
Online Markdown Editor - Dillinger, the Last Markdown Editor ever.
마크다운 사이트
4. history, guide, reset, tag
git log
커밋 히스토리 보기 : New Old 위 아래 순
커밋 아이디
커밋 작성자
커밋 날짜
커밋메세지
git log --pretty=oneline
커밋 히스토리 깔끔하게 보기
git show 4af1
커밋 아이디 앞 네자리 : - 해당 커밋 이전의 모습, + 해당 커밋에서의 모습
q
나가기
git commit
커밋메세지 텍스트창 실행 : I 를 누르면 입력모드. 저장 ESC - :WQ - Enter
git commit --amend
최신 커밋 수정
커밋 메세지 작성 가이드라인
💡 1. 제목과 상세 설명 사이에는 한 줄을 비운다. 2. 제목 뒤에 온점(.)을 붙이지 않는다. 3. 제목의 첫 알파벳은 대문자 4. 제목은 동사원형 (Fix it / Fixed it, Fixes it) 5. 상세 내용 → 왜 커밋을 했는지 → 어떤 문제가 있었고 → 적용한 해결책이 어떤 효과를 가지는지 6. 다른 사람들이 자신의 코드를 바로 이해할 수 있다고 가정하지 말고 최대한 친절하게 작성하세요.
ex)
Add one function
calculator.py supports 3 functions now
커밋 가이드라인
💡 1. 하나의 커밋에는 하나의 수정사항, 하나의 이슈(issue)를 해결한 내용만 남길 것 2. 현재 프로젝트 디렉토리의 상태가 그 내부의 전체 코드를 실행했을 때 에러가 발생하지 않는 상태인 경우에만 커밋을 할 것. 과거 커밋의 용도 → 과거 버전의 프로그램 사용 → 과거 커밋을 시작점으로 한 다른 방향의 별도 프로젝트 시작 → 아예 그 커밋으로 현재 프로젝트를 리셋
git 커맨드에 alias 설정하기
git config alias.history 'log --pretty=oneline'
git diff facd eea5
두 커밋사이의 변화 확인 : 커밋아이디의 앞 네 글자
→ 빨강은 변경 전, 초록은 변경 후
git history 에서
HEAD : 보통 가장 최근에 한 커밋을 가리킴
💡 cat show status 차이점? cat 은 working directory 의 상태 확인 status 는 staging area 와 lepository 비교 show 는 lepository 상태 확인
git reset --hard eea5
HEAD 를 옮김 : 그 이후 작업 모두 삭제
git reset --mixed eea5
커밋이 에러가 난 경우
git reset --soft eea5
급하게 업로드 해야 할 경우
https://whimsical.com/git-7FqFxLdoSg1gCSnvuLhDUv
git reset --hard HEAD^
이전 단계 커밋
git reset --hard HEAD~2
두 단계 전 커밋
git tag [태그이름] [커밋아이디]
git tag
태그 조회
git show [태그 이름]
태그 조회git show [태그 이름] 태그 조회
5. branch, 협업, GUI, stash
branch : 하나의 코드 관리 흐름 - 나뭇가지
git branch premium
브랜치 만들기
git checkout premium
브랜치 이동하기 : On branch premium - 피리미엄 브랜치 위에 있다.
git checkout master
마스터 브랜치 이동하기
git branch
브랜치 확인
git branch -d test
테스트 브랜치 삭제
git checkout -b test
브랜치 생성 후 이동
git merge master
현재 위치인 premium branch 에 master branch 를 합치다.
git merge --abort
merge 취소
git reset --merge
merge 취소
💡 git history 는 branch 마다 각각 갖는다.
origin/master 는 리모트 레포지토리를 나타낸다 : 없으면 연결이 되지 않았다는 의미.
git push --set-upstream origin premium
연결git push --set-upstream origin premium 연결
포인터 : 커밋을 가리키는 존재
HEAD ⇒ master ⇒ 다섯 번째 커밋 : 브랜치를 가리키는 존재
merge commit
→ 헤드가 가리키던 커밋에 다른 브랜치가 가리키던 커밋을 합쳐서 새로운 커밋을 만드는 작업
💡 git reset 의 복원
세번째 커밋에서 네번째 커밋으로도 이동할 수 있다.
💡 reset 과 checkout 의 차이
reset 은 HEAD ⇒ master ⇒ commit 에서 master 를 움직입니다.
checkout 은 HEAD 만 commit 으로 옮기고 master 는 그대로 있습니다. (Detached HEAD)
→ 과거의 특정 커밋에서 새로운 브랜치를 만들 수 있다. (git checkout 9033)
→ 브랜치를 만든 후 git checkout premium 을 해야 한다.
💡 fast-forward merge vs 3-way merge
master(2) 와 premium(4) 이 같은선인 경우 master 에 HEAD 가 있는 상태에서git merge premium
을 실행
💡 git push 전에 git pull 을 꼭 할 것!
리모트 레포지토리의 내용을 merge 하지 않고 확인
git fetch
git diff premium origin/premium
git merge
= git fetch + git merge
git blame [calculator.py](http://calculator.py)
누가 코드를 작성했는지 확인하는 명령어
git show 3a09
git revert f658
리모트 레포지토리에 푸쉬한 코드 취소
💡 revert 와 reset 의 차이
revert 는 리모트 레포지토리를 취소
reset 은 로컬 레포지토리를 취소
git revert facd..eea5
facd 부터 eea5 까지의 커밋을 facd 로 반환
git push
revert 후 push 할 것
💡 git reset 후 최신 커밋아이디를 모를 경우
git reflog
reference log 를 보여준다.git reset —hard HEAD@{1}
혹은 git reset --hard 9856
git log --pretty=oneline --all
모든 브랜치의 커밋 히스토리를 보여준다.
git log --pretty=oneline --all --graph
git GUI
Sourcetree | Free Git GUI for Mac and Windows
Tutorial: Learn Bitbucket with Sourcetree | Bitbucket Cloud | Atlassian Support
Free Git GUI for Windows, Mac, Linux | GitKraken
git rebase test
프리미엄 브랜치의 베이스를 테스트 브랜치로 재지정
git add .
git rebase --continue
컨플릭트 발생해서 제대로 진행못한 것 계속 진행하라.
💡 merge 와 rebase 차이
결과물은 같다.
rebase 가 커밋 히스토리를 깔끔하게 만든다.
git stash
긴급하게 커밋하지 않고 워킹 디렉토리 저장
git stash list
저장해놓은 워킹 디렉토리 확인
git stash apply
불러오기
6. stash 및 커맨드 사이트
git stash apply stash@{0}
작업 내용 적용
stash 활용
- 잘못된 브랜치에서 작업했을 때
- 작업 중 긴급하게 다른 브랜치 작업을 해야 할 때
git stash drop stash@{0}
stash 삭제
git stash pop stash@{0}
특정 작업 내용을 적용함과 동시에 그것을 스택에서 제거
git cherry-pick
자신이 원하는 작업이 들어있는 커밋들만 가져와서 현재 진행상황에 추가
git reset --soft 056d
로컬 레포지토리 리셋
gitignore 파일 : 리모트 레포지토리를 만들 때 설정할 수 있다.
git push --all
모든 브렌치 푸시
The difference between ls, ls -a, ls -A, ls -l, ls -al, ls -lrt - LinuxCommands.site
7. Source tree
저장소 설정 : Github 와 연결 (Clone)
모두 스테이지에 올리기
커밋
푸시
코드뭉치 버리기
우클릭 브랜치
Check out : 브랜치 이동
병합
Fast-forward : Head 에서 시작하고 Head 변경사항 없는 경우 (한 줄)
Head 에 변경사항이 있는 경우
8. 브랜치 전략
master 에 태그로 버전 정보
이동 규칙
feature
develop 에서 나와 develop 으로 들어간다.
작업이 완료되면 삭제한다.
release
배포일자가 다가오면 develop 에서 브랜치를 만든다.
기능을 더 이상 추가하지 않는다.
master 와 develop 에 동시에 merge 한다.
hotfix
master 에서 버그가 난 경우
master 와 develop 에 동시에 merge 한다.
이름 규칙
feature/[간단한기능설명] : 기능 개발 버전 ex) feature/login
release/v.X.X : 배포 준비 버전 ex) release/v.1.2
hotfix/v.X.X.Y : ex) hotfix/v.1.1.1
PR (Pull request)
최대한 자주 리모트 레포지토리의 master 와 develop 는 pull 한다.
다른 종류의 전략
- Github-flow : git flow 보다 간소화된 전략
- Gitlab-flow
- 마이크로소프트의 브랜칭 전략
default branch 바꾸는 법
Github : Settings - Branches
Git Terminal : git config --global init.defaultbranch branch_name
💡 QA (Quality Assurance) 팀이 없는데 release branch 를 유지할 필요가 없다.
9. 터미널 명령어 정리
환경설정
git config alias.n "commit -m 'nothing'"
실수 수정 : amend, reset, reflog, revert
코드 확인 : show, diff
브랜치 생성 : checkout, link
Commit guide line
- 제목과 상세 설명 사이에는 한 줄을 비운다.
- 제목 뒤에 온점(.)을 붙이지 않는다.
- 제목의 첫 알파벳은 대문자
- 제목은 동사원형 (Fix it /
Fixed it,Fixes it) - 상세 내용
→ 왜 커밋을 했는지
→ 어떤 문제가 있었고햣
→ 적용한 해결책이 어떤 효과를 가지는지
git reset file_name : 스테이지에서 제거
git restore file_name : ?
git rebase branch_name : 현재 브랜치의 베이스를 name 브랜치로 재지정
git rebase --continue : 컨플릭트 발생해서 제대로 진행못한 것 계속 진행하라.
git stash : 긴급하게 커밋하지 않고 워킹 디렉토리 저장
git stash list : 저장해놓은 워킹 디렉토리 확인
git stash apply : 불러오기
stash@{0}
git stash
drop stash@{0}
pop stash@{0}
git cherry-pick
10. 시작하기
11. 이어하기
git init
💡 Github 레포지토리에 있는 것 붙여넣기
git remote add origin http://github.com/MeA-95/test.git
git branch -M develop
git push -u origin develop
git branch master
12. 처음부터
git config user.name 'name'
git config user.email 'email'