git clone "ADDRESS" .git . : 원격 저장소의 버전을 로컬 저장소로 복제함, 마지막 .은 현재 폴더를 의미하며 이걸 안 붙이면 폴더 아래에 생성
다른 사람이 push한 내용을 pull하지 않고 clone 후 push하면 reject됨
pull은 fetch(원격 저장소의 내용을 가져옴) + merge(기존 저장소의 내용과 pull한 내용을 합침)를 통해 각 저장소의 마지막 버전을 합친 새로운 commit 생성
conflict 발생 시 수정 후 merge
새로운 기능은 master branch가 아닌 new branch에서 작업 후 병합함
master branch가 가리키는 마지막 버전은 언제나 테스트/실행 가능해야 함
git checkout -b add-comment : comment라는 이름의 브랜치를 추가하고 checkout
fast forward : master에서 추가 작업 사항이 없을 때 실험 branch를 merge하면 새로운 commit은 생성되지 않고, master branch가 최근 실험 branch에서 작업한 버전을 가리킴
git merge --no--ff "BRANCH_NAME" : fast forward 가능해도 명시적으로 merge commit을 만듦
개념 상 merge requset라고 이해하면 됨
내가 작업한 내용을 master branch에 합쳐달라고 공문 발송
Reviewers : 내 코드 리뷰를 맡김
Assignees : 담당자를 지정
Conversation : branch에서 일어나는 일을 종합적으로 알려주는 timeline
Files changed : branch에서 변경된 내용을 보여줌
. 입력 시 vscode로 연결되어, 원격 저장소로 바로 커밋 가능(다시 지역 저장소에 반영하려면 git pull)1) 책임자가 깃허브 홈페이지에서 merge pull request 버튼 입력
2) git checkout master 후 merge

사진출처 : https://techblog.woowahan.com/2553/
master branch : 언제든 실행/테스트 가능
release branch : release를 위한 branch
hot fix branch : 급한 수정사항을 위한 branch
develop : 일반적인 개발을 위한 branch
features : 실험적인 기능을 위한 branch
병합 후 브랜치 삭제
특정 버전을 지정해 부분 merge
git cherry-pick "COMMIT ID"
버전 흐름을 알기 쉽게 하기 위해 해당 브랜치의 base를 조작함
merge에 비해 간단하지만 거짓이고, 이해하기는 쉽지만 구현은 어려움
git이 익숙해지고, 필요해질 때 사용 권장
이미 push한 내용을 수정하기 위해 사용
여전히 3 way merge 방식(삼자대면)이지만 revert 대상인 버전을 베이스로 함
프로젝트 폴더를 만든다.
저장소를 만든다.
git init
파일을 만들고 2개의 커밋을 만든다.
work1.txt => 1
work2.txt => 2
work3.txt => 2
git status
git add FILE_NAME
git commit -m "COMMIT MESSAGE"
tracked & untracked 상태
base
1
2
3
4
master
1
m2
3
m4
exp
1
2
e3
e4
git checkout master;
git merge exp;
1
m2
e3
<<<<<<< HEAD
e4
EXP
아래와 같이 수정
1
m2
e3
me4
git add common.txt
git commit -a
3 way merge를 이해한다.
left
base
right
merged
1
1
1
1
L2
2
2
L2
3
3
R3
R3
L4
4
R4
Conflict
원격 저장소에 연결
github.com에 원격 저장소를 만든다.
로컬 저장소에서 실행
git remote add origin REMOTE_URL
git push -u origin master
원격 저장소를 로컬 컴퓨터에 복제
git clone REMOTE_URL .
서로 다른 로컬저장소에서 서로 다른 파일을 수정
git push를 늦게한 저장소는 rejected 됨
git pull (== git fetch + merge origin/master)
git push
서로 다른 로컬저장소에서 같은 파일을 수정
git push를 늦게한 저장소는 rejected 됨
git pull => conflict 발생
git add CONFLICT_FILE
git push
병합도구를 이용해서 문제 해결
kdiff3 : http://kdiff3.sourceforge.net/ (비교 프로그램)
windows
git config --global --add merge.tool kdiff3
git config --global --add mergetool.kdiff3.path "C:/Program Files/KDiff3/kdiff3.exe"
git config --global --add mergetool.kdiff3.trustExitCode false
git config --global --add diff.guitool kdiff3
git config --global --add difftool.kdiff3.path "C:/Program Files/KDiff3/kdiff3.exe"
git config --global --add difftool.kdiff3.trustExitCode false
macos
git config --global --add merge.tool kdiff3
git config --global --add mergetool.kdiff3.path /Applications/kdiff3.app/Contents/MacOS/kdiff3
git config --global --add mergetool.kdiff3.trustExitCode false
git config --global --add diff.guitool kdiff3
git config --global --add difftool.kdiff3.path /Applications/kdiff3.app/Contents/MacOS/kdiff3
git config --global --add difftool.kdiff3.trustExitCode false
pull request
git checkout -b BRNAHC_NAME
git commit -am COMMIT_MSG
git push
github.com에서 pull request 생성
리뷰를 참고해서 코드 개선
github.com에서 merge pull request
브랜치 전략
github flow
github.com에서 만든 브랜치 운영전략
git flow
https://techblog.woowahan.com/2553/