Git, GitHub 입문2

JR_min·2022년 6월 20일
1

Git GitHub시작하기

목록 보기
2/7

git commit 원리 정리

  1. 변경 사항의 모음이 아니고, 하나의 최종 코드모음이다.
  2. 다만 기존 커밋과 비교해서 변경된 파일이 아니면 '변경되지 않았다' 라는 정보만 저장해서 용량이 무겁지 않다 (파일 상태를 관리)
    • svn은 바로 이전 커밋과 + 변경사항만 저장
    • svn이 git보다 커밋당 버전 용량은 가벼울 수 있지만 한 버전을 보려면 맨 처음 커밋부터 계산해야 한다 -> git보다 속도가 느리다
    • git은 이전 커밋만 보면 된다 -> svn 보다 속도가 빠르다


작업 공간에 파일 생성 후 파일 상태 -> 추적 안됨

git add를 하면 스테이지에 올라가게 됨

git commit을 하면 파일 상태 수정 없음으로 변하고

git push를 하면 원격 저장소에 올라감

app.js 수정하고 app.css 새로운 파일 추가하면 app.js는 파일 상태 수정, app.css는 아직 stage에 올라가지 않아서 추적 안됨

app.js와 app.css파일만 상태가 변하고, 스테이지에는 같이 올라감

git commit시 모든 파일의 상태가 수정 없음으로 돌아감

Git으로 추적하는 파일의 상태는 4가지

untracked (git에 한번 도 올리지 않은 파일)
1. 추적안됨

tracked
2. 수정 없음
3. 수정함
4. 스테이지 됨

내 작업공간에 있는 수정한 파일이나 새로 생성한 파일을 add를 통해 스테이지에 올려 '스테이지 됨' 상태로 변경하고 commit을 하면 '수정 없음' 상태로 돌아간다.
'수정 없음' 상태가 된 파일은 다시 수정할 수 있다.

소스트리(SourceTree)설치

버튼 클릭으로 git 명령 실행하는 툴 소스트리 설치하기
https://www.atlassian.com/ko/software/sourcetree
(google 소스트리 다운로드 검색 통해 진행)

소스트리 -> 새로 만들기 -> 로컬 저장소 추가하기 -> 로컬 레포지토리 열기 -> 더블클릭

소스트리에서 파일 상태
? -> untracked
... -> 수정함


위의 파일상태처럼 새로 생성하거나, 수정한 파일을 소스트리의 gui를 통해 스테이지에 올린다.
아래 커밋메세지에 본인 이름이 뜨지 않는다면 소스트리 설정 -> 계정(인증) -> 추가-> 인증방식(OAuth) -> 프로토콜(HTTPS) -> 계정연결 -> github 로그인 후 진행

커밋 진행 시 다음과 같은 브랜치를 볼 수 있다
origin/master -> 원격 저장소에 push된 코드
master -> 아직 로컬에만 존재하는 코드
push 통해 원격 저장소에 올리고 브랜치 관리

MAC 소스트리 push 오류
저장소 설정 -> 원격 -> 저장소 url 변경
https://<토큰 값>@github.com/<사용자명>/<레포지터리명>.git


내 상태 로컬상태인 master가 origin즉 원격 저장소에 저장된 커밋보다 1개 뒤 라는 것을 알 수 있다.
pull로 해당 커밋 받아오기

Git branch에 대해서

앞에서 실습한 것 처럼 순차적으로 commit push pull 할수는 없다.

여러 개발자가 함께 작업을 하게되면 위 그림과 같이 충돌 할 수 있는 상황이 대부분이다.

이와 같이 여러 가지로 커밋을 만들면 된다.

이렇게 나무의 가지가 여러갈래로 뻗어나가는 것 같이 생겨서 branch라고 한다.
한 가지에서 작업하면 충돌이 날 수 있다. 똑같은 코드를 동시에 고칠 가능성도 있다.
여러 가지로 각자 작업을 하고 합치는 시점에서 명시적으로 충돌을 해결할 수 있다.

git push origin master -> master 브랜치(기본 브랜치)에 커밋을 푸시해라

git branch cat -> cat 브랜치를 현재 시점에 만들어라

git checkout cat -> cat 브랜치로 이동해라

cat 브랜치에 커밋을 추가한다면
master 브랜치는 과거 커밋을, cat 브랜치는 새 커밋을 가리키게 됨

보통 브랜치는 새로운 기능을 추가할 때 만들게 됨

두 버전 합치기 merge


master브랜치의 최신 커밋(base)에 oct브랜치의 최신 커밋(compare)를 합치려고 한다.
먼저 head를 base가 될 master브랜치로 옮겨줘야 한다. -> master 브랜치로 이동
git checkout master
git merge oct -> compare 브랜치인 oct를 나와 합치고 싶다

문어A는 고양4 + a(알파)니까 두 브랜치가 합쳐지면 결과물은 당연히 문어A
oct와 master 브랜치 모두 문어A를 가리킨다.

이렇게 병합을 하게 되면

나의 로컬 master는 인덱스 수정 commit으로 이동한 것을 알 수 있다.
원격 저장소의 origin master는 아직 남아있다.

git push origin master -> 마스터에 merge했으니 master에 push 한다.

원격 저장소에도 적용 완료

0개의 댓글