ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Git - branch
    Study/Git 2020. 3. 2. 15:27

    branch?

    branch: 작업을 나누고 합치기 위함

     

    branch를 만든다: 작업이 분기되는 현상

    새로운 branch/원래 하던 작업 branch


    branch 만들기

    git branch "branch 이름"

    "branch 이름" => 보통 접두사를 쓰는데, 조직이나 개인에 맞추어 결정할 것

    git branch: 브랜치들을 볼 수 있음, 현재 사용중인 브랜치도 확인 가능

    git branch를 입력했을 때 현재는 master를 사용중

    git checkout exp: 현재 쓰고 있는 브랜치를 나가고 exp라는 브랜치를 사용하겠다.

     

    ls -al과 git log를 사용해서 확인해보면
    master일 경우와 exp일 경우에 결과가 동일하다.
    branch를 생성하면 그 생성한 브랜치는 현재 속해있는 브랜치의 상태를 그대로 복사하기 때문

    exp에서 f1글을 수정한 뒤 확인해보면 

    exp에서는 글이 수정되어있고, master에서는 글이 수정되어있지않음.


     

    branch 정보확인

    git log --branches --decorate

    브랜치별로 log확인

    (master)라고 적힌 것이 master 브랜치의 가장 최근 commit

    (HEAD -> exp)라고 적힌 것은 exp 브랜치의 가장 최근 commit, HEAD는 현재 exp 브랜치에 체크아웃되었다란 뜻

    git log --branches --decorate --graph

    master와 exp가 각자의 길을 걷고 있을 때 활용하기 좋음

    exp브랜치는 최신 커밋이 3 이전 2  이전 1, master 브랜치는 최신 커밋이 5 이전이 2

    두 브랜치는 같은 2에서 나뉘어 진것

    git log --branches --decorate --graph --online

    한줄로 간편하게 알려줌

     

    git log master..exp: 버전과 버전 사이의 차이점을 알고 싶을 때, master에는 없고 exp에는 있는 것

    git log -p master..exp

    : -p를 입력하면 소스 코드의 차이도 알 수 있음

    git diff master exp: 각각의 브랜치에 현재의 상태들을 비교

    앞에 있는 게 master 뒤에 있는게 exp


    branch 병합

    exp => master: master로 체크아웃 해야 함

    git checkout master

    git merge exp하면 창이뜨고 :wq눌러 종료하면 merge 됨

    master로 합쳐지고 두개의 부모 commit을 가짐

     

     

    exp를 master와 똑같이 만들려고 함. 위에처럼 해서 merge함

    exp branch 삭제

    git checkout master

    git branch -d exp: exp를 d(delete)함

     

    => (HEAD -> master)라고 뜨는 거 확인 가능


    branch 수련

    https://git-scm.com/book/en/v2/ - 영어 

     

    https://git-scm.com/book/ko/v2 - 한국어

    git 홈페이지에 들어가서 documentation에 들어가서 Book을 클릭하면 책을 오픈소스로 만들어 둠.

    쉽게 공부할 수 있음

     

    ex) 3.2

    $ git checkout -b iss53: iss53이라는 브랜치를 만들고 iss53에 체크아웃한다.

    Fast-forward: 빨리감기. 별도의 commit을 생성하지 않고 가리키는 commit만 변경.(페이지 들어가서 그림과 함께 이해)

    Merge made by the 'recursive' strategy.: 독립한 브랜치가 원래 브랜치로 돌아갈 때 원래 브랜치가 변경되어 있을 때는 fast-forward를 할 수 없음. 공통의 조상을 찾은 뒤 merge하여 별도의 commit을 만들어 두개의 조상을 가짐.


    branch 충돌해결

    브랜치간 파일이 같을 경우 충돌 발생.

    같은 파일이어도 수정한 위치가 다르면 자동으로 merge가능

    같은 부분을 수정하였을 때 문제 발생

    Auto-merging

    git status입력했을 때 both modified라도 뜸(둘 다 수정하였다.)

     

    vim 충돌된 파일을 수정

    <<<<<<head : 현재 체크아웃되어있는 부분 수정사항

    =========: 아래있는 부분은 충돌이 일어나는 부분

    >>>>>>>branch

     

    이 두 공간 사이를 잘 정리해서 충돌 해결


    Stash

     

     

    stash( Stash the changes in a dirty working directory away)

    : 작업중이던 파일을 임시로 저장해두고 현재 브랜치의 상태를 마지막 커밋을 상태로 초기화 할 수 있음

    commit을 하기엔 애매(작업이 끝나지 않음)한데 checkout을 해야할 때 stash로 숨길 수 있음

     

    stash: 감추다, 숨겨두다

     

     

    git stash 

    or

    git stash save

     

    다시 작업을 시작할 때

    git stash apply: 가장 최근 stash 적용, git reset -- hard한 것도 다시 복원 가능

    git reset -- hard: 최근 commit 상태로 이동

     

    git stash list: stash를 최근 순으로 볼 수 있음

     

    git stash drop: 가장 최근 stash 삭제

     

    git stash apply; git stash drop: 가장 최근 stash 적용 후 삭제

    => git stash pop

     

     

    추적되는 파일과 추적되지 않은 파일이 있을 경우 

    추적되고 있는 파일(버전 관리되고 있는 파일)만 stash된다.

     

     

     

     

     

    'Study > Git' 카테고리의 다른 글

    Git - tag  (0) 2020.03.03
    원격저장소(Remote Repository) - Github  (0) 2020.03.02
    Git의 원리  (0) 2020.03.02
    Git - 명령의 빈도와 메뉴얼 보는 방법  (0) 2020.03.02
    Git - 과거 버전으로 돌아가기  (0) 2020.03.02
Designed by Tistory.