본문 바로가기

QA 업무

[CI/CD] [git&github] 7.4 브랜치 관리하기

7.4 브랜치 관리하기

브랜치의 개념에 대해서는 4장에서 이미 설명, 이 절에서는 명령어로 브랜치를 나누고 체크아웃하고 병합하고 재배치하는 방법에 대해 알아봄

 

 

 

현재 내가 어떤 브랜치에 작업 중인지 알 수 있는 방법은 (master) 라고 적혀져 있음, 현재 작업 중인 브랜치가 master 브랜치임을 나타냄
또는 git branch 라는 명령어 입력 시에 master 라고 나타남

 

7.2.1. git branch <브랜치> : 브랜치 나누기

브랜치 만드는 명령 : git branch <브랜치>

foo 라는 브랜치 만드는 명령 : git branch foo

 

7.2.2 git checkout <브랜치> : 체크아웃하기

체크아웃 :  브랜치를 전환하는 것을 의미.

현재 작업 중인 브랜치에서 다른 브랜치로 이동하는 과정입니다.

이 명령을 실행하면, 해당 브랜치에서의 코드나 파일 상태가 현재 작업 중인 디렉토리에 적용되며, 그 브랜치에서 작업한 내용으로 바뀌게 됨

 

foo 브랜치로 체크아웃하는 명령은 git checkout foo 임

깃배시에서 master가 foo로 변경되면 올바르게 체크아웃한 거임

 

체크아웃
foo_d 파일을 커밋
foo_e 파일을 커밋
checkout 하면 c 드라이브의 test 폴더에 a, b, c.txt 파일만 세 개 남음
git diff <브랜치> <브랜치> : 두 브랜치의 차이를 확인할 수 있음, master 브랜치에 비해 foo 브랜치가 다른 점을 확인하고 싶으면 git diff master foo 명령을 입력하면 됨

 

브랜치를 만듦과 동시에 체크아웃하기

새로운 브랜치를 만드는 명령은 git branch <브랜치>

특정 브랜치에 체크아웃하는 명령은 git checkout <브랜치> 

git checkout -b <브랜치>

git checkout -b bar (이 부분은 실습하지 않아도 무방)

 

 

7.2.3 git merge <브랜치> : 브랜치 병합하기

foo 브랜치를 master 브랜치에 병합

git merge <병합할 브랜치> 

만일 foo 브랜치를 master 브랜치에 병합하고 싶다면 master 브랜치로 체크아웃한 뒤 git merge foo 명령을 입력하면 됨

 

git merge foo 입력 시 foo 브랜치가 master 브랜치로 병합됨, Vim 편집모드 진입함..(?)

 

foo 브랜치에서 만들었던 foo_d.txt와 foo_e.txt 파일을 master 브랜치에 볼 수 있음

 

7.2.4 충돌 해결

명령어로 브랜치를 병합하는 과정에서 충돌이 발생할 경우, master 브랜치에 있는 a.txt파이 

 

 

a.txt 파일에서 master로 내용 변경 후 master commit 으로 커밋 메세지 변경 후 저장
foo 브랜치로 체크아웃함

*해당 커밋은 foo 브랜치에서 한 커밋임

*a.txt 파일의 내용을 foo 로 변경 후 저장 후 커밋하기

foo 브랜치에서 커밋하기
다시 master 브랜치로 체크아웃, 현재 master 브랜치와 foo 브랜치는 같은 파일을 서로 다르게 수정
git merge foo 명령으로 foo 브랜치를 master 브랜치로 병합하면 현재 충돌이 발생했으니, 이를 해결하고 다시 커밋하여 병합을 완성하라 라고 나타남
<<<<<<, ======, >>>>>> 기호는 일종의 영역 표기 기호임

====== 기호의 윗 부분은 HEAD가 가리키는 브랜치, 즉 MASTER 브랜치의 내용 적혀있음

====== 기호의 아랫 부분은 foo 브랜치의 내용이 적혀 있음 

 

여기서 병합의 결과로 master 브랜치의 내용 <<<<<< 기호와 ===== 기호를 선택할지 

foo 브랜치의 내용(==== 기호와  >>>>> 기호 사이의 내용)을 선택해야 함

=> master 브랜치의 내용을 선택

 

a.txt 파일의 내용을 master로 수정 햐

git add a.txt

git commit 입력 후 아래와 같아짐

 

:wq 입력 후 Vim 창 닫기
반영하려던 브랜치의 내용, 즉 master 브랜치의 내용이 반영되어 있음

 

정리 : 충돌이 발생했을 경우, 충돌이 발생한 브랜치 중 어떤 브랜치의 내용을 최종적으로 반영할지 직접 선택해야 함

어떤 내용을 반영할지 직접 선택한 뒤 충돌이 발생한 팡리을 스테이지에 추가하고 커밋하면 병합 완료됨

 

7.2.5. git branch -d <브랜치> : 브랜치 삭제하기

브랜치 삭제하는 명령은 git branch -d <브랜치> 또는 git branch --delete <브랜치> 임.

 

foo 브랜치 삭제하려면 foo가 아닌 브랜치로 체크아웃해야 함

foo 브랜치에 체크아웃되어 있다면 master 브랜치로 체크아웃함

 

foo 브랜치 삭제 후 git branch 명령으로 브랜치 목록을 확인하면 ㄹoo 브랜치가 삭제됐음을 확인

 

7.2.6 git rebase <브랜치> : 브랜치 재배치하기

브랜치의 재배치란? 브랜치가 뻗어나온 기준점을 옮기는 방법

 

git log --oneline 명령으로 커밋 목록 확인 가능함
master 브랜치에서 bar 브랜치 만든 뒤 체크아웃함

 bar 브랜치에서 몇 가지 커밋 쌓기

bar_b는 B 텍스트 파일, bar_a는 A 라는 문구가 들어간 txt 파일
git log --oneline --branches 입력해 지금까지 커밋 확인됨
master 브랜치로 체크아웃함
d.txt와 e.txt 파일을 git add 함
문자 E가 저장된 e.txt 파일을 만든 커밋 만듦
지금까지의 커밋 확인

브랜치를 재배치하는 명령은 git rebase <브랜치> 임

bar 브랜치를 master 브랜치로 재배치하려면 bar 브랜치로 체크아웃한 뒤 git rebase master 명령을 입력하면 됨

bar 브랜치를 master 브랜치로 재배치하려면 bar 브랜치로 체크아웃한 뒤 git rebase master 명령을 입력
bar first와 bar second 위치 달라짐, rebase한 후 bar first와 bar second 는 FOO 브랜치가 아니라 tenth commit 위에 쌓여있음

 

bar 브랜치의 기준점이 tenth commit으로 옮겨간 것임

 

cf. bar 브랜치를 master 브랜치로 재배치한 결과를 커밋당 한 줄로 출력된 그래프 형태로도 확인할 수 있음

 

cf. 명령어 정리 노트

git diff : 최신 커밋과 작업 디렉터리 비교하기

git diff --staged : 최근 커밋과 스테이지 비교하기

git diff <커밋> <커밋> : <커밋>끼리 비교하기

git diff <브랜치> <브랜치> : <브랜치> 끼리 비교하기

 

git reset

git reset --soft <되돌아갈 커밋> : <되돌아갈 커밋> 으로 soft reset하기

git reset --mixed <되돌아갈 커밋> : <되돌아갈 커밋> 으로 mixed reset하기

git reset --hard <되돌아갈 커밋> : <되돌아갈 커밋>으로 hard reset하기

 

git revert <취소할 커밋>

 

git stash : 변경 사항 임시 저장하기

git stash --message "<메시지>" : <메시지>와 함께 변경 사항 임시 저장하기

git stash -m " <메시지>" : <메시지>와 함께 변경 사항 임시 저장하기

git stash list : 임시 저장된 작업 내역 조회하기

git stash apply <스태시> : 임시 저장된 작업 내역 조회하기

git stash drop <스태시> : 임시 저장된 작업 삭제하기

 

git branch

git branch : 브랜치 목록 조회하기

git branch <브랜치> : <브랜치> 만들기

git branch --delete <브랜치> : <브랜치> 삭제하기

git branch -d  <브랜치> : <브랜치> 삭제하기

 

branch checkout  <브랜치> : <브랜치>로 체크아웃하기

git checkout -b <브랜치> : <브랜치> 생성하고 체크아웃하기

git rebase <브랜치> : <브랜치>로 재배치하기