지옥에서 온 Git(3)

branch 만들기

  • branch는 작업을 분기해서 처리하기 위한 명령어
  • 브랜치의 목록을 볼 때
git branch
  • 브랜치를 생성할 때
git branch "새로운 브랜치 이름"

# 새로운 브랜치를 생성하면 생성 시기에 속해 있던 브랜치의 상태를 그대로 복사해서 가져감
  • 브랜치를 전환 할 때
git checkout "전환하고자 하는 브랜치 이름"
  • 브랜치를 삭제할 때
git branch -d "삭제하고자 하는 브랜치 이름"

# 병합되지 않은 브랜치를 강제 삭제할 때
git branch -D "삭제하고자 하는 브랜치 이름"
  • 브랜치를 생성하고 바로 전환하고자 할 때
git checkout -b "생성 및 전환할 브랜치 이름"

branch 정보 확인

  • 브랜치 간에 비교할 때
git log "비교할 브랜치 A".."비교할 브랜치 B"

# 브랜치 A에는 없고 브랜치 B에는 있는 것들을 표기 
  • 로그에 모든 브랜치와 브랜치 명을 표시
git log --all
or 
git log --branches

# --decorate는 기본 옵션으로, 브랜치 명을 표시하지 않기 위해서는 --no-decorate 옵션을 붙여주어야 함
  • 로그에 나타는 모든 브랜치들을 그래프화 하고자 할 때
git log --all --graph

# --oneline 옵션을 추가해주어 더 간략하게 볼 수도 있음

  • 브랜치 간의 현재 상태를 비교할 때
git diff "비교할 브랜치 A".."비교할 브랜치 B"



branch 병합

  • A 브랜치로 B 브랜치를 병합할 때 (B -> A)
git checkout A
git merge B


  • merge 이후에는 -d 옵션으로 브랜치의 삭제가 가능
    • 이미 모든 수정 정보를 얻었기 때문


branch와 merge

  1. Fast-Forward: 별도의 commit을 생성하지 않고, master가 가리키는 commit을 바꾸는 방식
  2. Recursive startegy: 같은 조상에서 분기된 브랜치 A가 조상 commit으로 부터 변화가 생겼으면 'Fast-Forward'방식을 사용할 수 없음. 따라서 별도의 commit을 생성하여 merge하게 됨



    • cf. A가 가리키는 commit + B가 가리키는 commit + 공통의 조상 commit. 총 3개의 commit이 3-way Merge를 수행




branch 충돌 해결

  • 같은 파일임에도 수정한 위치가 다르다면 자동으로 합쳐버림
    • 즉, 브랜치 A에서 소스코드 상단을. 브랜치 B에서 하단을 수정하여 Merge하게 되면 Auto-Merging이 가능
  • 그러나, 수정한 위치가 같으면 충돌이 발생

  • 충돌난 소스코드 부분을 사용자가 직접 수정하여 충돌의 해결이 가능



stash

  • branch를 이용하여 작업을 하던 중 현재 branch에서 작업이 끝나지 않았는데 다른 branch로 checkout을 해야 하는 경우에 사용
    • commit을 해주지 않고 checkout을 할 경우 branch에서의 작업이 이동한 branch에 까지 영향을 미침. 그러나, 아직 작업 중인 것을 commit 하기에는 애매하기 때문
  • git stash의 적용

  • stash 해두었던 변경 사항 불러오기
git stash apply
  • stash list에 있는 stash 기록은 사용자가 명시적으로 삭제하지 않는 한 계속 존재함
    • 즉, git reset --hard를 통해 stash가 적용된 상황으로 돌아가더라도 stash 해두었던 기록은 계속 남아있음
    • git stash list를 통해 stash 한 기록을 볼 수 있음
  • git stash apply는 stash list 중 항상 가장 위에 있는 stash를 불러옴
    • 따라서, stash를 불러온 후 다음 stash를 불러오기 위해서는 이미 불러온 stash를 삭제해 주어야 함
git stash apply; git stash drop
or
git stash pop 
  • stash는 최소한 버전 관리가 되고 있는 파일에 대해서만 적용이 가능함
    • 즉, add 되지 않은 파일에 대해서는 stash의 적용이 불가


'Software Convergence > Git' 카테고리의 다른 글

지옥에서 온 Git (2)  (0) 2018.08.24
지옥에서 온 Git (1)  (1) 2018.08.22

+ Recent posts