Git Graph를 설치하면 GUI로 깃 버전을 관리할 수 있다.
1.처음 커밋을 했던 설명 파일 추가 를 보면 README.md 파일이 커밋 된것을 확인 할 수 있고
2.문어의 커밋 을 보면 app.js 파일을 커밋 한것을 확인 할 수 있다.
3.index.html 파일은 아직 커밋하지 않았음으로 Uncommitted Changes에 있는것을 확인할 수 있다.
작업 공간에서 작업한 파일은 추척 안되는 파일이다.(아직 깃허브에 올린적이 없음으로)
git add를 사용해 stage에 등록해둔다.
git commit을 사용해 로컬 저장소에 등록하고
push를 이용해 원격 저장소에 등록한다.
작업 공간에서 새로 업데이트한 파일을 다시 stage에 등록하고 커밋을 한 후 push한다.
한 번 커밋을 한 파일은 수정 없음 상태로 돌아가서 다시 파일을 수정할 수 있다.
-> 깃의 핵심적인 원리 , 즉 수정을 할 필요가 없는 파일들은 수정 없음이란 상태로 등록되어서 다음에 커밋을 할 때에 변경 없음으로 commit되고 push된다.
Git으로 추적하는 파일의 4가지 상태
1.untracked -> 추적안됨
2.tracked -> 수정 없음 , 수정함 , 스테이지됨
작업 공간에 있는 수정함 , 추적 안됨 파일을 스테이지로 올려 스테이지됨으로 변경한다.
커밋을 하면 수정 없음 상태로 돌아가서 다시 파일을 수정할 수 있다.
1.git graph를 설치 후 변경 사항에서 + 버튼을 눌러 add를 한다.
2.메시지 에서 커밋할 내용을 작성한 후 commit을 한다.
3.git graph에는 아직 원격 상태에 push된 것은 아님으로 푸쉬를 해준다.
주의할 점 -> master/origin 은 원격에 푸쉬된 상태이고 master는 로컬에만 저장된 상태임으로 git graph 사용시 master에만 걸려 있다면 원격에 push를 해주어야 한다.
커밋을 여러줄로 쌓는다 ?
같이 작업하려면 충돌을 피하기 위해서 여러줄로 커밋을 생성한다. (브랜치로 나누어서)
브랜치는 이미 있다.
-> git push origin master
기본적으로 만들어져 있는 master 브랜치에 커밋을 푸시해라 라는 뜻
브랜치 만들기
->git branch cat (cat 브랜치를 현재 시점에 만들어라)
만든 브랜치로 이동하기
->git checkout cat
cat 브랜치에 커밋을 추가하게 되면
master 브랜치는 아직 과거 커밋을,
cat 브랜치는 새 커밋을 가리킴
master로 이동하고 , oct브랜치 커밋을 만들고, 커밋
->master 브랜치의 최신 커밋(고양4)을 기점으로 oct브랜치 , cat 브랜치가 나뉘어짐
master 브랜치의 최신 커밋(base)에 oct 브랜치의 최신 커밋(compare)을 합치려고 한다.
1.먼저 base가 될 master 브랜치로 이동
2.compare 브랜치인 oct를 나와 합치고 싶다고 명령
->git merge oct
3.합쳐진 결과는 문어A 커밋
->oct랑 master 브랜치 모두 문어A를 가리킨다.
case1. 빨리감기 된 머지
case2. 새로운 커밋 만들어지는 머지
case3. 만약 충돌이 발생한다면?
머지할 때 두 버전이 같은 곳을 수정했다면 이를 수동으로 고쳐줘야 한다.
충돌이 해결된 머지 생성
주로 오픈소스에 기여할때 사용한다.
저장소를 통째로 복사하는것을 말한다.
1.고양,문어의 boxiting 저장소를 통째로 너구리의 계정에 복제해와서
2.그 저장소에 자유롭게 커밋,푸시를 하고
3.내 저장소의 브랜치와 고양,문어 저장소의 브랜치를 머지해달라고 요청한다.
브랜치와 포크의 차이점
이 커밋이랑 저 커밋을 합치는걸 허락해줘
1.머지하고 싶은 두 브랜치를 선택하고
2.어떤 변경을 했는지 제목과 내용에 쓰면 된다.
3.단일 저장소에서 보낼 수도 있고, 포크한 저장소에서도 보낼 수 있다.
주의할점
1.코드를 함께 작성하는 팀원이 있다면, 직접 머지하는건 피하고 모든지 머지를 풀 리퀘스트를 통해서 한다.
2.동료가 내 pr을 보고 코드를 리뷰할 수 있다.
3.동료의 pr에 수정이 필요하면 댓글을 달아 change request를 보낼 수 있다.
4.오픈소스 pr을 보낼때는 기여 안내문서를 참고한다.
TIP: 브랜치 관리하기
1.보통 feat/기능이름 으로 한 사람이 개발하는 기능 브랜치를 만든다.
(혹은 fix/버그이름 , hotfix/급한버그)
2.작업이 끝나면 dev(혹은 master)브랜치로 PR을 보낸다.
4.직접 커밋은 feat 브랜치에만 한다.
깜빡하고 수정 못한 파일이 있는데 방금 만든 커밋에 살짝 추가하고 싶을때
1."짱 글자 추가" 커밋 생성
2.코드 업데이트
3.기존 커밋에 amend해서 커밋 수정 & push
4.커밋 메세지만 수정
5.force push
변경사항을 잠시 킵해두고 아직 커밋은 안 만들때
1.여러 파일 변경사항 만들기
2.stash로 서랍에 넣어두기(tracked인것만 들어감)
3.브랜치 왔다갔다
4.pop해오기
옛날 커밋으로 브랜치를 되돌리고 싶다.
1.feat/b 브랜치의 커밋을 하나 전으로 mixed reset(복권 사기 전 과거로 돌아갔지만 복권 번호는 기억남)
2.feat/b 브랜치의 컴시을 다른 커밋으로 hard reset(복권 사기 전 과거로 돌아갔는데 복권 번호 기억까지 깔끔하게 날려버림)
이 커밋의 변경사항을 되돌리고 싶다.
1.사이트 제목 삭제 커밋 생성
2.방금 만든 커밋 revert하는 새로운 커밋 생성(소스트리 명령은 Reverse)
저 커밋 하나만 떼서 지금 브랜치에 붙이고 싶다.
1.feat/a 브랜치 생성 -> 커밋 3개 추가
2.master로 체크아웃
3.feat/b 브랜치 생성 -> 커밋 1개 추가
4.feat/b에 feat/a에서 만든 2번째 커밋을 체리픽