Git & Github

[git] 실험과 혁신을 가능케 한 Branch

2022. 8. 10. 02:42

알면 기능이고 모르면 사고다

실험과 혁신을 가능케 한 , ' Branch ' 


 

1. detached state 만들기

git checkout 5aa0ef (v삼의 commit id) 

 

2. 새로운 파일 생성 ( exp.txt )

commit하면 마스터를 남겨두고 HEAD가 새로운 버전을 독자적으로 따라간다.

더보기

* git add 파일 하지 않아도 되는 commit 코드

git commit -a -m '버전명' 

log를 보면, HEAD와 MASTER가 분리됨을 확인할 수 있다.

 

exp.txt 에 내용 추가하여 v2로 버전 변경

HEAD가 v2로 옮겨가고 master는 여전히 v삼 버전에 있는 상태

 

 여기서 HEAD가 MASTER와 분리된 상태에서 일어난 작업을 모두 버린다.

git checkout master


detached head state 에서 commit하는건 실수가 아니다. 

git이 갖고있는 풍부한 기능 안에 존재하는 것.

 다만, 잘 모르고 한다면 사고가 발생한다!

 

 commit id를 적어둔다면

일상적인 작업을 하는 master와 실험적인 작업으로 옮겨다니던 head를 왔다갔다 할 수 있다.

 

그런데 계속 바뀌는 commit id

그럼 이름을 붙여주면 편하게 옮겨다닐 수 있지 않을까 ?

 

실험적인 작업의 마지막 버전을 가리키는 master와 동급인 이름이 있다면 좋지 않을까?

 

그것이 바로

branch


 ' Branch '


1. 브랜치 생성하기

git branch 파일명

 

git branch exp에 새로운 branch인 exp가 생성되었다.

 

2. 버리기

Ο 브랜치 간 이동

git checkout branchname

GUI에서는 더블클릭하면 brach를 옮겨다닐 수 있다.

 즉, master는 default branch이다.

 

더보기

add 는 untracked를 tracked로 바꾸는 명령어

working directory에서 수정된 내용을 stage area로 옮기는 명령어

 

-a는 untrack인 애를 auto adding 해주지 않는다.

 

--amend는  commit 메시지만 아니라 내용도 바꿀 수 있는 기능인데

제약사항은 마지막 커밋만 바꿀수 있다.

 

 

3. 합치기

      새로운 디렉토리 생성해서 work1.txt 파일 생성

데이터 1,2 추가에 대한 버전 v1, v2 생성

→ 브랜치 생성 git branch feature/login

새로운 파일 login.txt 생성

  login.txt에 내용 추가해서 버전 생성 login1, login2 

 

CHECKOUT 은 HEAD를 바꾼다
RESET은 HEAD가 가리키는 BRANCH를 옮긴다.

 

→ HEAD를 feature/login 브랜치로 옮겨준다.

git checkout feature/login

 

→ feature/login 을 login2로 보낸다.

git reset --hard 44df188d

 

→ Master를 v2롤 옮기려면

① head가 master를 가리키게 한다.

② git reset --hard (v2의 commit id)

 

master에서 다시 commit

 

feature/login 브랜치에서 작업한 login2가 성공적이라

master 브랜치로 끌고 오고싶다..

 

이를 가능케 하는 것, 병합(Merge) 


Branch의  ' 병합(Merge) '  

병합은 주체 입장에서 생각하자


1. 서로 다른 브랜치에서 서로 다른 파일을 병합

HEAD가 MASTER를 가리키게 하고 ¹

MASTER가 feature/login을 땡겨오게 한다. ²

 

¹ git checkout master         

² git merge feature/login

git merge 결과 주요 설명 / 결과
병합하고자 하는 주체 branch 지정 및 병합(merge) git checkout master (HEAD가 MASTER를 가리키게 하고)
git merge feature/login (feature/login branch와 병합)
탐색기 ■
feature/login 브랜치에 있던 login2 파일이 추가됨.
Git graph  branch가 병합된 것이 표시됨