Notice
Recent Posts
Recent Comments
Link
«   2026/06   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Archives
Today
Total
관리 메뉴

gugaga

Git응용 - Git 브랜치의 이해 본문

모비우스 부트캠프

Git응용 - Git 브랜치의 이해

ggugga 2025. 10. 11. 19:37

branch_test라는 새롭고 비어있는 디렉토리를 생성하여 새로 만든 branch_test 디렉토리로 이동하고

현재 디렉토리(branch_test)에 새로운 Git 저장소초기화해주 branch_test 내부에 .git 디렉토리를 생성합니다.

숨김 파일을 포함하여 (-a), 자세한 형식으로 (-l) 현재 디렉토리의 내용을 나열하는 명령어 - la를 이용해서 확인한 결과 .git/ 폴더가 표시되어 git init 명령이 성공함을 확인하였습니다.

커밋을 생성하지 않으면 이 명령어를 눌러도 응답이 뜨지 않습니다!

이렇게 java코드를 작성해준 다음 git add MainService.java를 해주면 해당 파일을 스테이징 영역에 추가하고 파일의 현재 상태를 다음 커밋에 포함시키겠다고 Git에게 알리는 행위를 의미합니다. (이 명령을 실행해도 별도의 성공 메시지는 출력되지 않는 것이 일반적) 스테이징 영역의 상태를 확인하는 명령어 = git status

스테이징 영역에 있는 변경사항을 저장소에 기록 --> $ git commit -m "Commit 1 on master bransh"

[master (root-commit) 8cfc049]...

여기서(root-commit)은 이 커밋이 저장소의 가장 첫 번째 커밋임을 의미

1 file changed, 1 insertion(+)...

1개의 파일이 변경되었고, 1줄이 추가

$ git branch = 현재 저장소에 존재하는 브랜치 목록을 보여줍니다.

* master

= 현재 저장소에는 master 브랜치만 존재하며, 그 앞에 붙은 * 표시가 현재 체크아웃(작업)된 브랜치가 master임을 나타냅니다.

 

[실습] 커밋 생성

MainService.java파일에 write code 2 코드 추가하고 

하단에 있었던 (HEAD -> master)가 위로 올라간것을 확인할 수 있다!

master 브랜치는 두번째 커밋을 가리키고 있습니다

 

[실습] 브랜치 생성

feature-login이라는 branch를 생성했습니다. 하지만 아직 master 브랜치를 가리키고 있습니다.

 

[실습] 브랜치 이동

현재 작업중인 브랜치가 feature-login으로 이동했습니다!

git log으로 확인시 HEAD -> feature-login으로 뜨게 됩니다.

 

[실습] 커밋 생성

현재 작업 브랜치인 feature-login에서 LoginService.java 파일을 새로 생성 -> LoginService.java 파일을 스테이징 영역에 추가-> 스테이징된 파일을 저장소에 기록 (log 확인시 브랜치 포인터는 항상 가장 최신 커밋만을 가리키므로 feature-login 포인터는 Commit 3을 가리키는 모습)

 

[실습] master 브랜치로 이동(checkout)

commit 3은 master브랜치에서 한것이 아니기에 보이지 않음!

 

[실습] 커밋 생성

MainService.java파일에 write code 3 코드 추가 후 커밋까지 완료한 다음 log를 확인해보면

2번째 커밋 위에 바로 4번째  커밋이 생성된것을 확인할 수 있습니다!

git log --all --graph 명령

= 모든 브랜치의 커밋들을 시각화

git checkout -b issue 명령

= 새로운 issue 브랜치를 생성함과 동시에 그 브랜치로 즉시 전환

아직은 issue가 가리키는 대상은 없습니다

그래서 issue 브랜치에서도 커밋을 생성해보겠습니다

vi MainService.java 파일에 fix issue-number 1 코드를 추가 후 저장 종료 한다음

git add MainService.java 해주고 git commit-m "Commit 5 for issue number -1"

 

[실습] 브랜치 병합(merge)

(1) 기준이 되는 브랜치로 이동해서 병합해야 한다.

issue -> master

Fast-forward Merge

= 브랜치의 위치만 최신 커밋으로 이동시키는 방식

(git merge  issue)

 

[실습] 브랜치 삭제

브랜치는 삭제되지만 커밋이 삭제되는것은 아닙니다!

(전에 feature-login 브랜치에서 master 브랜치로 이동)

여기서 git merge feature-login을 해주게 되면 아래와 같이 히스토리를 확인할 수 있습니다.

제일 최근 커밋 -> mergit 커밋(성공) , 병합도 잘 되어있음

 

자 여기서 길을 잃었습니다..

( Fast-forward 와 3-Way merger 방식의 차이)

Fast-forward 머지 과정

A → B (master)  $ git checkout master

A → B → C (feature) $ git merge feature

= 새로운 커밋(Merge Commit)은 생성되지 않습니다

master 브랜치의 포인터만 C 커밋으로 앞으로 쭉 이동합니다.

A → B → C (master, feature)

히스토리는 단순한 일직선이 되어, 마치 feature 브랜치의 작업이 처음부터 master에서 진행된 것처럼 보입니다.

 

3-Way 머지 과정

master 브랜치에서 feature 브랜치를 만들었습니다.

그 이후, master 브랜치feature 브랜치 모두 각자 독립적으로 새로운 커밋을 추가했습니다.

A → B (master)master에서 독립적으로 생긴 커밋

A → C (feature)feature에서 독립적으로 생긴 커밋

master 브랜치로 이동합니다: $ git checkout master

feature 브랜치를 머지합니다: $ git merge feature

Git은 A, B, C 세 개의 커밋(3-Way)을 비교하여 변경 사항을 합친 후, 병합 커밋 메시지를 만듭니다.

 

> 변경사항의 충돌 (conflict)

1) 직접 merge하기

충돌 발생 파일안에 두가지 변경점을 확인하고 직접 수정하기

필요없는 코드 삭제한 후 저장, add 후 git commit까지 완료하면 병합 커밋이 생성되게 됩니다.

 

2) 툴을 이용해서 merge하기

git mergetool 명령어 입력

vimdiff라고 입력->(오류 발생시) git config merge.tool vimdiff

충돌 발생시 창의 4개가 생기는데 3개의 창을 비교하고 아래의 하단의 창을 (한줄 삭제 dd 명령어)를 입력해서 원하는 코드줄을 삭제하고 저장하기. 나머지 창은 저장없이 :q 해주어도 됩니다!

add 후 git commit까지 완료하면 병합 커밋이 생성되게 됩니다.

 

Git Tag란?

sw개발에서 의미있는 시점(1차 개발 완료, 중요이슈 해결, 테스트 통과, sw 배포) 정보 기록

branch 옆에 tag 정보를 확인할 수 있음

tag 버전 이름 v2.3.0(최종), v.2.3.0-rc2,  v.2.3.0-rc1, v.2.3.0-rc0 

 

- Lightweight 태그

버전명과 같은  태그명만 남기는  태그

$ git tag [태그명]

- Annotated 태그 (이걸 더 많이 사용)

Git 데이터베이스에 태그를 만든 사람의 이름, 이메일, 태그 생성 날짜, 태그 메시지 등을 저장한 태그

$ git tag -a [태그명] -m [태그 메시지]

 

ASUS@DESKTOP-3V4J6QQ MINGW64 ~/gittest/branch_test (master)
$ git tag -a v1.0 -m "Implemented login feature"

 

[실습] 특정 시점의  커밋 태그하기

1) 태깅하고자 하는 커밋의 ID값 확인

git  log --oneline

51be724 확인, 브랜치 병합이 성공된 모습도 함께 보임

태그 활용 전략 = 태그 생성 시점과 방법에 대해서 일관성 있는 규칙을 정해 정책화 해야합니다.

 

병합 충돌 해결 실습 마저 해보겠습니다.

이 파일에 write code 3 on feature login branch 코드를 추가해 새로운 커밋을 생성해주겠습니다.

master 브랜치로 병합하려고 보니

이렇게 충돌이 발생하고 merge failed 머지 실패되었습니다.

1) vi 파일명  (파일을 열어주고 직접 수정하는 방법)

 

2) mergetool 사용하기 (git mergetool)

vimdiff 입력해주어야 합니다!

위 화면을 아래의  화면처럼 수정해주고 저장하고 나갔습니다.

git add MainService.java 해준 다음, 별다른 메시지 없이 git commit을 해주게 되면 

화면처럼 Merge branch 'feature-login'이라는 머지 커밋이 생성됨을 확인할 수 있었습니다. 

'모비우스 부트캠프' 카테고리의 다른 글

현가시스템  (0) 2025.10.26
Git 브랜치 활용 전략  (0) 2025.10.12
자동차 조향 장치  (0) 2025.10.10
자동차 등화 시스템  (0) 2025.10.10
자동차 동력 전달 장치  (0) 2025.10.10