먼저 github.com에서 레파지토리 생성
git init
git add *
git commit -m "message"
git remote add origin 주소
git push origin master
<1강>
local repository : 내 로컬 컴퓨터 레파지토리
.git : 버전들이 저장됨
commit : 버전을 생성함
History : 버전에 대한 설명들이 들어있음
remote repository : 원격 저장소. 깃헙 서버에 있는 저장소.
push origin : 내 컴터에서 원격저장소(github.com)로 전송함.
pull : 원격저장소에서 내 컴터로 땡겨옴.
협업 방법:
작업->commit->push origin
pull origin -> 작업 -> commit -> push->.....
남의 파일 덮어쓰기하면 어떡함? -> 깃이 알아서 처리
git log : 버전들의 목록을 보여줌
git status : 어떤 파일이 수정되었는지 알려줌
git commit -am "message" : 버전 추가
git push : 푸쉬
<2강>
git init . : 현재 디렉을 깃 버전관리 시작
working tree : 파일을 만들고 수정하는 곳. 버전으로 만들어지기 전 단계
staging area : 버전을 올리는 곳. 깃이 여기 올라와있는 파일들을 버전으로 만들어서 repository에 넣어줌.
repository : 버전이 저장되어있는곳(= .git)
git add 'filename' : 이 파일을 working tree에서 staging area에 올려라(status 가 committed로 바뀜)
git commit -m "message" : staging area 에서 버전이 생성되어서 repository에 올라감
git log : 버전과 메세지를 보여줌
untracked files : 깃이 모르는 파일(아직 한번도 버전관리 안한 파일)
git log --stat : 어떤 파일이 이 버전에 연루되어있는지 볼 수 있음
git diff : working tree의 파일과 reposit의 마지막 버전간의 다른 점들을 볼 수 있음
git reset --hard : 작업한걸 버리고 마지막버전으로 되돌려줌
git log -p: 뭐가 바꼈는지를 log에서 볼 수 있음
git checkout "커밋id " : 이 커밋id가 가리키는 시점으로 돌아감
git checkout master : 가장 최신상태로 돌아감(★ checkout은 HEAD가 가리키는 곳을 바꿔줌)
git add . : 모든 파일 add
git commit -am : add랑 commit한꺼번에 해줌( 단, untracked file은 추가되지 않음)
git reset --hard "커밋 id" : 해당 커밋아이디가 가리키는 시점으로 감(현재 기존꺼 강력하게? 지워버림)
※ checkout은 현재버전은 지워지지않지만 reset은 현재버전이 지워져버림
git revert "commit id" : 기존 커밋을 내버려두고(삭제하지 않고) 그 커밋에서의 변화를 취소함 이때 커밋아이디로는 내가 취소하고싶은 커밋의 아이디 적기. 그러나! 현재 버전에서 옛버전으로 바로 점프할 수 없고 현재에서 역순으로 차례대로 revert하면서 가야함.
<3강>
git branch : 브랜치의 목록을 보여줌(*이라고 되어있는게 현재 우리가 속한 브랜치)
git branch 'name' : name이라는 브랜치를 새로 만들어줌(현재 브랜치의 내용들이 복붙됨)
git checkout 'brance name' : 그 브랜치가 속해있던 버전으로 돌아감
merge : 여러 브랜치가 합쳐진 버전. 브랜치들의 조상은 base라고 함.
o2브랜치의 내용을 master브랜치로 병합하려고 할때, ★마스터 브랜치 상태가 되어야함(git checkout master)
-> git merge o2
conflict: 각 브랜치에서 같은 파일의 같은 부분을 수정하고 머지했을때 충돌이 발생함
3 way merge: 두 자식 브랜치 중 바뀐 부분만 반영해줌.
git mergetool : 병합을 전문적으로 해주는 도구를 불러옴
git flow : 유명한 방법들 소개
cherry pick : 예전버전들을 픽해서 부분적으로 병합가능..
rebase : 머지와 비슷한데, 타임라인을 더 깔끔하게 할 수 있음
checkout = head를 제어
reset = branch를 제어
checkout master : 현재 헤드가 master를 가리키게함(마스터가 가리키는 버전으로 바뀜)
reset master : 다른 브랜치가 마스터가 가리키는 버전을 가리키게함(그 브랜치가 가리키던 버전은 삭제된다는 느낌)
<4강>
Local Repository ---push----> remote repository (백업)
clone : 완전 같은 버전을 다운받음(복제)
http(보안쪽으로는 살짝 부족. 배우기는 쉬움)
ssh(보안쪽으로 좋은데 배우기 어려움)
origin이라는 이름의 원격저장소 주소에다가 우리 로컬 저장소를 연결 : ★git remote add origin 주소★
git remote : 원격저장소의 이름이 나옴 git remote -v 원격저장소의 이름과 주소가 나옴
★ git push -u origin master : origin master라는 브랜치에 푸시가 됨
(git push --set-upstream origin master) : 이거 한번만 입력하면 그 다음부터는 git push만 해도 자동으로 올라감
add -> commit -> push 절차 반복함.
git clone 주소 : 현재 버전을 그대로 복붙해서 가져옴
git pull -> 작업 -> git commit -> git push
<5강>
" git fetch -> git merge FETCH_HEAD " -> commit -> push : git pull과 똑같은 일이 일어남
git pull = git fetch; git merge origin/master
git fetch를 하면 .git/FETCH_HEAD 를 만듬. 원격저장소에 가장 최근에 패치한 내용을 가지고 있음
그걸 origin /master와 머지 시켜줌.
git fetch는 정확하게 말하면 원격저장소를 가지고만 오는것임. 결합은 X.
이걸 쓰는 경우는 무작정 합치기에는 조심스러운 경우에 쓴다.
git patch : 원격저장소에 대한 권한이 없는 사용자가 새로운 코드를 반영하고 싶을 때 쓸 수 있음.
git format-patch "버전" : 현재 가장 최근 버전과 "버전"과의 차이점을 patch라는 파일에 기록하여 생성함.
git am -3 -i *.patch : 패치를 3 way merge로 반영함.
pull request : 내가 작업한 내용을 원격저장소로 당겨주십시오
Fork : 그 사람의 계정으로 해당 저장소가 복제됨. 그럼 이 저장소는 그 사람이 마음대로 수정할 수 있게됨(원본은 X)
fork를 하게되면 compare랑 pull request라는 메뉴가 생김
compare누르면 오리지널 저장소와 사용자가 수정한 내용의 저장소를 비교해줌.
여기서 create pull request를 누르면 원본 계정한테 내 내용을 pull해달라고 요청함.
그럼 원본 저장소에서 pull requests메뉴에 들어가면 거기 본인이 받은 pull request를 볼 수 있음
-> Merge pull request를 누르면 합쳐짐. 즉, 요청한 내용을 원본과 병합함.
<6강>
cherry pick: 다른 브랜치에 있는 버전이 만들어졌을 때 생긴 "변화"만을 적용하겠다(병합해서 새 버전 만듬)
git cherry-pick '버전'
base ; 두 브랜치의 공통 조상
rebase ; 조상을 바꾸겠다.
git rebase topic : topic 브랜치가 현재 가리키고 있는 버전으로 base를 바꾼다
merge : 브랜치들을 합쳐서 새 버전을 만듬
rebase : 브랜치의 베이스를 옮겨서 가지 형태가 아닌 linear한 형태로 그래프를 바꿔줌
단, push한 이후에 rebase하면 안됨!! 엉망진창될수 있음. 로컬에 있을때만 해야됨
그리고 merge와 rebase의 결과는 궁극적으로 같음. 그러나 과정이 다를뿐.
추가로 참고하면 좋을 사이트
https://sunnykwak.tistory.com/97
Git 관련 학습 자료 모음
Git, GitHub 초보자를 학습 사이트 및 자료 모음. (제보해주시면 추가합니다.) Git - 생활코딩 : Git 독학을 위한 강의/학습 사이트. GitHub 실습 교육 : GitHub 과 SourceTree 를 이용한 실습 교육. 누구나 쉽게..
sunnykwak.tistory.com
'Undergraduate > Programming' 카테고리의 다른 글
[python] enumerate 함수 (0) | 2020.05.09 |
---|---|
[coding test] 2019 카카오 개발자 겨울 인턴십 문제 (0) | 2020.05.09 |
[Python] 리스트(list)에서 '조합' 찾기(product,permutations,combinations) (0) | 2020.05.08 |