본문 바로가기
DevelopmentTools/Git

지옥에서 온 문서관리자 2

by 수짱수짱 2022. 1. 13.

Day2

03. 깃과 브랜치


  • 브랜치 사이 이동하기 - git checkout
    • git checkout apple = apple 브랜치로 이동 = apple 브랜치로 체크아웃 한다.
    • apple, ms, google을 work 3 커밋에서 브랜치 생성하고 master브랜치에서 work 4를 커밋햇다면 apple 브랜치로 체크아웃하여도 master 브랜치에서 분기된 이후에 master 브랜치에 추가된 커밋은 apple 브랜치에 영향을 미치지 않는 것을 확인할 수 있다.  
  • 브랜치 사이 차이점 알아보기 - git log branch1..branch2(브랜치이름) 
    • 왼쪽에 있는 브랜치를 기준으로(branch1) 오른쪽 브랜치와 비교한다.
    • git log master..apple : master 브랜치엔 없고 apple 브랜치에만 있는 커밋 출력
    • git log apple..master : apple 브랜치엔 없고 master 브랜치에만 있는 커밋 출력
  • 브랜치 병합하기 - git merge branch name
    • 서로 다른 파일 병합하기
    • git merge 브랜치 이름 단, 브랜치를 병합하려면 먼저 master 브랜치로 체크아웃 해야한다.
      • 빨리 감기 병합 (fast-forward merge) : master 브랜치에서 브랜치를 분기한 후에 master 브랜치에 아무 변화가 없다면 (새로운 커밋을 만들지 않았다면) 분기한 브랜치를 병합하는 것은 간단하다. 분기한 브랜치에서 만든 최신 커밋을 master 브랜치가 가리키게 하면 된다. 단순히 포인터를 움직인 것이기 때문에 따로 커밋 메시지 창은 열리지 않는다. 
    • 같은 문서의 다른 위치를 수정했을 때 병합하기  
      • 문제없이 수정 내용이 자연스럽게 하나의 파일에 합쳐질 수 있다. 브랜치를 자동으로 합쳐주는 기능이 있어 매우 강력하다.
    • 같은 문서의 같은 위치를 수정했을 때 병합하기
      • 깃에서는 줄 단위로 변경 여부를 확인한다. 각 브랜치에 같은 파일 이름을 가지고 있으면서 같은 줄을 수정했을 때 브랜치를 병합하면 브랜치 충돌(conflict)가 발생한다
      • merge conflict
      • 충돌이 생긴 문서는 자동으로 병합될 수 없으므로 사용자가 직접 충돌 부분을 해결한 후 커밋해야 한다.
  • 병합이 끝난 브랜치 삭제하기 - git branch -d 브랜치 이름 
    • 병합한 후 더 이상 사용하지 않는 브랜치는 깃에서 삭제 가능
    • 단, 브랜치가 완전히 지워지는 것이 아니라 다시 같은 이름의 브랜치를 만들면 예전 내용을 다시 확인 가능하다.
    • 저장소의 기본 브랜치는 master이므로 브랜치를 삭제하려면 master 브랜치에서 수행해야 한다.
    • -d 옵션을 사용하여 브랜치를 삭제할 수 있다. 

<브랜치 관리하기>

  • 브랜치에서 checkout과 reset의 작동 원리
    • HEAD와 브랜치의 개념
    • HEAD : 현재 작업 트리가 어떤 버전을 기반으로 작업 중인지를 가리키는 포인터
    • 기본적으로 master 브랜치를 가리킨다.
    • 그리고 브랜치는 브랜치에 담긴 커밋중에서 가장 최근의 커밋을 가리킨다.
    • HEAD는 git checkout 명령어를 통해 제어할 수 있다. 
  • 브랜치가 여러 개일 때 reset 명령을 사용하는 방법
    • 현재 브랜치가 아닌 다른 브랜치에 있는 커밋을 골라서 최신 커밋으로 지정할 수 있다.
    • git reset (원하는 커밋의 해시) : HEAD가 가리키고 있는 브랜치의 최신 커밋을 원하는 커밋으로 지정
    • 어떤 브랜치에 있는 커밋이든 지정 가능하며 원래 가리키던 커밋은 연결이 끊기면서 삭제된다.
  • 수정 중인 파일 감추기 및 되돌리기 - git stash (save)           * save는 생략 가능
    • 브랜치에서 파일을 수정하고 커밋하지 않은 상태에서 급하게 다른 파일을 커밋해야 할 경우 사용
    • 이럴 때 아직 커밋하지 않고 작업 중인 파일들을 잠시 감춰둘 수 있다.
    • 단, git stash 명령을 사용하려면 파일이 trached 상태여야 한다. 즉 한 번은 커밋한 상태여야 한다. 
      • 감춘 파일들은 git stash list 명령어로 확인 가능하다.
      • 가장 최근에 보관한 것이 stash@{0}에 담긴다. 먼저 감춘 것을 아래에, 가장 최근에 감춘 것을 위에 쌓기 때문에 stash stack이라고도 표현한다.
      • 감춰둔 파일을 꺼내와 수정하거나 커밋하려면 git stash pop 명령어를 사용한다. 이는, 가장 최근 항목부터 되돌려온다.

*

git log --oneline : --oneline옵션을 추가하면 한 줄에 한 커밋씩 나오도록 함

git log --oneline --branches  : --branches 옵션을 사용하면 각 브랜치의 커밋을 함께 볼 수 있다.

git log --oneline --branches --graph : 브랜치와 커밋의 관계를 그래프 형태로 표시하여 볼 수 있다.

git init 디렉터리 이름 : 새로운 디렉터리를 만들고 저장소를 초기화하는 과정을 한꺼번에 처리함.

 

git merge o2 --no--edit : 편집기 창을 열지 않고 깃에서 지정하는 커밋 메시지를 그대로 사용하겠다.

git merge o2 --edit : 브랜치를 병합할 때 편집기 창이 나타나지 않도록 설정한 경우, 커밋 메시지를 추가하거나 수정하고 싶을때 사용하는 옵션

 

git stash apply : stash 목록에서 가장 최근 항목을 되돌리지만 stash list에 저장한 내용은 그대로 유지한다.

git stash drop : stash 목록에서 가장 최근 항목(stash@{0})을 삭제한다.