본문 바로가기
자바 , 기타 공부/GIT

GIT BRANCH

by 임지혁코딩 2024. 1. 16.

 

BRANCH ? = 나무의 가지라고 할 수 있다. 

 

EX) REPORT.XSL이라는 파일이 있다. 이는 1,2,3버전으로 막 수정되었다.

현재 REPORT3.XSL이 되었다! . 이를 고객들에게 제공하려면 

REPORT3_CLINET.XSL이 되었다. 

그이후, 그건 두고 REPORT3을 REPORT4로 바꾸고 싶다. .. 

 

1)

그렇다면 REPORT3_CLIENT는 수정되면서, 

REPORT3는 REPORT4로 수정되는 요구가 존재할 것이다.

 

2) 

그러다보면, REPORT3_CLINET+REPORT4 -> REPORT5인 경우도 존재할 것이다. 

 

이 과정에서, 작업이 분기되는 현상 -> REPORT3,REPORT3_CLINET 이걸 BRANCH 라고 한다.

 

--실제 예시 --

 

고객들에게 기능은 냅두고, 내 기능을 개발한다.

어떤 기능을 만들었는데, 여기까지를 서버에 반영해서 test 팀에 냅두고, 작업을 더 진행해야한다.

 

(git checkout -b branch2라하면, 생성과 checkout이 동시에 일어난다)

 

 

현재까지를 설명하자면, exp branch를 생성하고, 그 branch로 내가 이동했다 . 

 

exp branch에서 commit을 하고, log를 보았다 

 

master로 가서 , 다시 log를 확인하였다 .

 

보이지 않음이, 당연하다 .

 

(exp로 이동하면 , 파일 또한 바뀜에 주의하자)

 

내가 branch를 사용할때는, 이 분기되는 그림을 항시 생각하자. 

 

git log --branches --decorate를 하면, checkout 된 branch아니고 master branch도 확인이 가능하다.

git log --branches --decorate --graph -- oneline -> 한눈에 다 볼 수 있다.

git log branch명..branch명2 -> 1에는 없고, 2에는 있는 것을 비교해서 불러주고 , 이때 -p를 추가하면없는 commit이 무엇이고, 있는 파일은 무엇인지 까지를 추가해준다. 

 

이런 식의 비교 또한 가능하다. 

 

 

** 잠깐 적고가는 git reset 팁!

민재가 알려준 정보대로 검색을 해보았다. 

내용의 핵심은. git은 모든 정보를 저장한다. 그렇기 때문에 reset이 이루어지기 전으로도 돌아갈 수 있다.

다만, 실제 업무에서는 history가 꼬이므로 reset 사용은 지양하는 것은 동일하다고 한다 .

 

 

그럼 이제, branch들을 병합해야 하면 어떻게할까 ? 병함하는 것을 MERGE라고 한다! 

 

현재 상태 :

exp에서 진행한내용을 , masterbranch에 merge 한다( 누가 어디에 들어가는지가 중요하다 ) 

 

master로 checkout하여, git merge exp(일리와!) 이렇게 해야한다. 헷갈리네 

 

그 이후 merge를 진행한다. 

 

commit을 많이 진행하지 않아서 쉬웠고, 유튜브 생활코딩 님의 예시를 따라 진행한 후 결과도 보이겠다. 

 

Fast - forward는 무엇일까? -> master가 branch이후 어떠한 작업도 진행하지 않았다. 이럴때는 

빠르게 (빨리감기)해줄 수 있다.  *이때는 별도의 추가 commit이 발생하지 않는다

master에서, 본인이 진행했던 일 + exp에서 진행한 이후 내용을 모두 가진다. 

*이떄는 별도의 commit이 발생한다. (합쳐질때)

 

그 이후, exp에서도 그렇게 합쳐진 결과를 받고 싶다면? 

exp에서 또 merge받아오면 되지 ! 

 

 

**주의할점! 

내가 생각하기에도, 그렇게 master에서 합친 이후에 master에서 한번 더 작업하면 exp는 어떡하지? 란 고민이 들었다.

그러나 exp에서도 merge를 합병하면, 둘은 이제야 완벽히 하나의 branch가 되었다고 할 수 있다. 

 

exp는 제거 ! 

 

 

 

**BRANCH 충돌! 

 

exp branch를만들고, main branch에선 원본을 6단계까지 수정.

그 이후 exp branch에서 원본2를 7단계 까지 수정했다. 

그 이후 main에서 git merge branch가 있다면 , 어떻게 될까? 

 

exp의 commit"7" + master"6"의 결과가 나온다. -> 파일이 다르다면 괜찮다. 

 

하지만 exp와 main 모두 같은 원본 파일에 대해 수정했다면 어떡하지 ?

*같은 파일이더라도, 위치가 다르면 자동으로 합쳐진다. 

 

*같은 부분, 같은 위치를 수정하면 어떡하지 ? -> MERGE CONFLICT가 발생한다. 

BOTH MODIFIED로 표현된다. 

<<HEAD

현재 내 BRANCH의 변경내용

====== 이것을 중심으로 

합병할 BRANCH의 변경 내용

>>EXP 

 

즉, 너가 알아서 이충돌을 해결하라는 의미이다. 

변경한 이후 재 COMMIT하면, 자연스럽게 완료된다. 

 

 

'자바 , 기타 공부 > GIT' 카테고리의 다른 글

GIT REBASE / GIT을 이용한 흐름 파악  (1) 2024.01.21
깃 활용 2 , GITHUB  (0) 2024.01.20
깃 개념  (0) 2024.01.16
깃 활용 -1 기초  (0) 2023.12.25