Git_Branch - 8BitsCoding/RobotMentor GitHub Wiki

명령어 핵심 정리

$ git branch
# branch 모두 확인

$ git branch <Branch명>
# <Branch명>의 Branch를 생성

$ git branch -d <Branch명>
# <Branch>삭제

$ git checkout <Branch명>
# <Branch명>으로 checkout

$ git log --branches --decorated --graph
# 모든 branch의 commit 전시

$ git log master..exp
# master와 exp사이의 차이점이 뭔지 알려달라
# master에는 없고 exp에는 있는것을 보여달라는 말!

$ git log -p master..exp
# 소스코드 단위로 보여달라

$ git revert <commit ID>
# 커밋을 날리지 않고 되돌린다.

$ git merge exp
# master에 exp내용을 추가하겠다.

$ git status
# 현재 merge에 어떤문제가 있는지 확인

$ git push origin <branch명>
# branch로 push
# 참고로 여기서 말하는 origin이란 내가 소스코드를 가져온 저장소의 위치를 의미한다. 역시 수정이 가능!

왜 Git에서만 Branch가 강조되나?

기존 SubVersion시스템에서는 Branch가 느리고 용량이 크고 안전성이 많이 떨어졌음.

Subversion에서의 Branch의 불편함을 Git에서 획기적으로 개선했음.

Branch는 언제쓰나?

이미지

위 그림과 같이 특정 작업을 분기 후 재 다시 합치고 싶을때 사용하게된다.(경우의 수는 무한정 많겠지?)

작업을 두 개로 (혹은 그 이상으로) 나눠서 하고 싶다고 생각하자.

Branch 만들기

이미지

# 쉬운 부분은 설명을 생략하고 Branch와 관련된 부분 위주로 설명을 진행한다.

$ git branch
# 현재 소유한 Branch를 출력해준다.

$ git branch <Branch명>
# <Branch명>의 Branch를 생성한다.

$ git checkout <Branch명>
# <Branch명>으로 checkout한다.

$ git branch -d <Branch명>
# <Branch>삭제

$ git log
# master branch에서 분기했기에 git log를 확인 시 master branch와 동일 함을 확인한다.

이미지

여기서 기억할 점은 HEAD인데 현재 사용중인 Brach를 의미한다. (현 커멘드는 exp를 사용 중)

이미지

exp Branch에서 새로운 commit을 위와 같이 했다고 가정해 보자.

이미지

Mater Branch를 checkout하고 git log를 확인 시 최종 commit이 2임을 알 수 있다.

이미지

다시 한 번 Branch에 따라서 commit이 다름을 확인하자.

Branch 상태 확인 방법

$ git branch
# 현재 어떤 Branch가 있는지 확인

$ git log --branches --decorated
# 모든 Branch의 커밋이 어디까지 됐는지 볼 수 있다.(아래서 설명)

$ git log --branches --decorated --graph
# 흐름을 좀 더 시각적으로 표현해 준다.

$ git log --branches --decorated --graph --oneline
# 한줄로 commit을 표현

$ git log master..exp
# master와 exp사이의 차이점이 뭔지 알려달라
# master에는 없고 exp에는 있는것을 보여달라는 말!

$ git log -p master..exp
# 소스코드 단위로 보여달라

이미지

현재(HEAD) 의 commit은 2이고 exp branch의 commit은 4임을 알 수 있다.

이미지

이미지

이미지

(참고) 예전 커밋으로 돌아가고 싶다면?(커밋을 취소하고 싶다)

방법은 두 가지

  1. reset
  2. revert

이미지

다음과 같이 Commit을 진행 했다고 가정하자.

현재 5인데 2로 돌아가고 싶다면?

$ git reset <commit ID> --hard

이미지

$ git revert <commit ID>
# 커밋을 날리지 않고 되돌린다.

이미지

병합하기

이미지

현재 branch의 commit 상태는 다음과 같고 병합을 하려 한다.

병합의 방법은 exp에서 작업했던 내용을 master로 병합하고 싶다

$ git merge exp
# master에 exp내용을 추가하겠다.

$ git checkout exp
$ git merge master
# exp에 master내용을 추가하겠다.

충돌이 발생한다면?

파일이 다르면 무조건 merge가능

파일이 같을경우 충돌이 발생한다.

이미지

이미지

$ git status
# 현재 merge에 어떤문제가 있는지 확인

이미지

a
<<<<<<< HEAD
=======
b
c
>>>>>>> exp

결국 위를 해결해야한다.

=======를 기준으로 위가 현재의 변경사항 아래가 branch의 변경사항을 의미한다.

나는 모두 합치기를 원하기에 아래와 같이 수정

a
b
c
$ git add f1.txt

수정 후 git add

이미지


참고사이트

⚠️ **GitHub.com Fallback** ⚠️