JINWOOJUNG

[GIT] dev branch 생성 및 main branch 병합 본문

Git

[GIT] dev branch 생성 및 main branch 병합

Jinu_01 2025. 12. 19. 11:33
728x90
반응형

Background

Git Repository를 생성하면 다음과 같이 main branch 밖에 없다. 하지만 협업 과정에서 일부 개발 후 main branch로 push하는 것은 비효율적이다. 따라서 dev branch에서 개발을 한 뒤 필요한 파일들만 main branch로 push하는 것이 일반적이다. 

 

실제 로컬 저장소(Working Directory)에서도 main branch 하나 밖에 없는 것을 확인할 수 있다.

jinwoo@jinwoo-System-Product-Name:~/test$ git log --all
commit ee596f8a0516c33b270cdc47d97de74f8a40da4b (HEAD -> main, origin/main, origin/HEAD)
Author: Jinwoo_Jung <123054285+Jinwoo-Jung01@users.noreply.github.com>
Date:   Fri Dec 19 10:47:41 2025 +0900

    Initial commit



dev branch 추가: 1. Compare & pull request

git switch 명령어를 통해 dev branch를 생성 해 주자

jinwoo@jinwoo-System-Product-Name:~/test$ git switch -c dev
새로 만든 'dev' 브랜치로 전환합니다
jinwoo@jinwoo-System-Product-Name:~/test$ git log --all
commit ee596f8a0516c33b270cdc47d97de74f8a40da4b (HEAD -> dev, origin/main, origin/HEAD, main)
Author: Jinwoo_Jung <123054285+Jinwoo-Jung01@users.noreply.github.com>
Date:   Fri Dec 19 10:47:41 2025 +0900

    Initial commit

 

해당 명령어를 통해 현재 HEAD가 dev를 가르키고 있음을 확인할 수 있다.

 

개발을 한다고 가정했을 때, 아무 python 파일을 만들고 push를 해 보자. 현재 test1.py, test2.py 2개의 파일이 새롭게 추가되었지만, 그 중 일부 파일만 push 하고 싶으면 git add <파일명> 명령어로 처리할 수 있다. 

jinwoo@jinwoo-System-Product-Name:~/test$ git status
현재 브랜치 dev
추적하지 않는 파일:
  (커밋할 사항에 포함하려면 "git add <파일>..."을 사용하십시오)
	test1.py
	test2.py

커밋할 사항을 추가하지 않았지만 추적하지 않는 파일이 있습니다 (추적하려면 "git
add"를 사용하십시오)
jinwoo@jinwoo-System-Product-Name:~/test$ git add test1.py 
jinwoo@jinwoo-System-Product-Name:~/test$ git commit -m "test1"
[dev c855d31] test1
 1 file changed, 1 insertion(+)
 create mode 100644 test1.py

 

처음 push 하는 거라 upstream을 지정해 준 상태에서 push 하면 dev branch에 "test1"이라는 이름으로 push 된 것을 확인할 수 있다. 

jinwoo@jinwoo-System-Product-Name:~/test$ git push --set-upstream origin dev
오브젝트 나열하는 중: 4, 완료.
오브젝트 개수 세는 중: 100% (4/4), 완료.
Delta compression using up to 16 threads
오브젝트 압축하는 중: 100% (2/2), 완료.
오브젝트 쓰는 중: 100% (3/3), 277 바이트 | 277.00 KiB/s, 완료.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
remote: 
remote: Create a pull request for 'dev' on GitHub by visiting:
remote:      https://github.com/Jinwoo-Jung01/test/pull/new/dev
remote: 
To https://github.com/Jinwoo-Jung01/test.git
 * [new branch]      dev -> dev
'dev' 브랜치가 리모트의 'dev' 브랜치를 ('origin'에서) 따라가도록 설정되었습니다.
jinwoo@jinwoo-System-Product-Name:~/test$ git log --all
commit c855d31e5acd863bedee5ccb06fed1a29cac6e78 (HEAD -> dev, origin/dev)
Author: Jinwoo <wjdwlsdn8520@gmail.com>
Date:   Fri Dec 19 11:11:22 2025 +0900

    test1

commit ee596f8a0516c33b270cdc47d97de74f8a40da4b (origin/main, origin/HEAD, main)
Author: Jinwoo_Jung <123054285+Jinwoo-Jung01@users.noreply.github.com>
Date:   Fri Dec 19 10:47:41 2025 +0900

    Initial commit

 

그렇다면 main branch에는? 원격 저장소에는 바로 반영이 될까?

 

dev branch가 생성되어 test1.py가 올라간 것을 확인할 수 있지만, main branch에는 아직 아무것도 없다. 이는 dev branch에서 push했기 때문에 main에는 반영이 안되었기 때문이다. 따라서 보이는 것 처럼 Compare & pull request 과정을 거쳐야 한다. 

 

 

이 과정에서는 다른 User가 dev에서 개발한 변경 사항을 확인할 수 있고, Create pull request를 통해 main branch로 합치는 것을 요청할 수 있다. 

 

 

아래와 같이 요청되는 것을 확인하면 main branch에서도 정상적으로 반영됨을 확인할 수 있다.

 

 

dev branch 추가: 2. git checkout

두번째 방법은 로컬 저장소에서 git 명령어로 처리하는 방법이다. 

 

다음과 같이 test2.py, test3.py를 포함하는 "test2, 3"을 dev branch에서 push 했다고 가정하자.

jinwoo@jinwoo-System-Product-Name:~/test$ git log --all
commit ea2a02571204abc2f0b5f23599261395e8f3652a (HEAD -> dev, origin/dev)
Author: Jinwoo <wjdwlsdn8520@gmail.com>
Date:   Fri Dec 19 11:23:48 2025 +0900

    test2, 3

commit 585d53a334b8c29ba1c56b3cb4f2392fce1b14cd (origin/main, origin/HEAD)
Merge: ee596f8 c855d31
Author: Jinwoo_Jung <123054285+Jinwoo-Jung01@users.noreply.github.com>
Date:   Fri Dec 19 11:18:39 2025 +0900

    Merge pull request #1 from Jinwoo-Jung01/dev
    
    test1

 

우리는 Configure & pull request 과정에서 main branch를 원격 저장소에서 직접 병합했었다. 따라서 로컬 저장소에서의 main 해당 commit을 가르키고 있지 않다. 

jinwoo@jinwoo-System-Product-Name:~/test$ git switch main
'main' 브랜치로 전환합니다
브랜치가 'origin/main'보다 2개 커밋 뒤에 있고, 앞으로 돌릴 수 있습니다.
  (로컬 브랜치를 업데이트하려면 "git pull"을 사용하십시오)
jinwoo@jinwoo-System-Product-Name:~/test$ git log --all
commit ea2a02571204abc2f0b5f23599261395e8f3652a (origin/dev, dev)
Author: Jinwoo <wjdwlsdn8520@gmail.com>
Date:   Fri Dec 19 11:23:48 2025 +0900

    test2, 3

commit 585d53a334b8c29ba1c56b3cb4f2392fce1b14cd (origin/main, origin/HEAD)
Merge: ee596f8 c855d31
Author: Jinwoo_Jung <123054285+Jinwoo-Jung01@users.noreply.github.com>
Date:   Fri Dec 19 11:18:39 2025 +0900

    Merge pull request #1 from Jinwoo-Jung01/dev
    
    test1

commit c855d31e5acd863bedee5ccb06fed1a29cac6e78
Author: Jinwoo <wjdwlsdn8520@gmail.com>
Date:   Fri Dec 19 11:11:22 2025 +0900

    test1

commit ee596f8a0516c33b270cdc47d97de74f8a40da4b (HEAD -> main)
Author: Jinwoo_Jung <123054285+Jinwoo-Jung01@users.noreply.github.com>
Date:   Fri Dec 19 10:47:41 2025 +0900

    Initial commit
jinwoo@jinwoo-System-Product-Name:~/test$

 

이때, git pull 명령어를 통해 main branch의 최신 commit으로 바꿔줄 수 있다.

하지만, 여기서 문제는 로컬 저장소도 main branch의 최신 commit을 가르키기 때문에 test1.py 밖에 없는 것을 확인할 수 있다. 

jinwoo@jinwoo-System-Product-Name:~/test$ git log --all
commit ea2a02571204abc2f0b5f23599261395e8f3652a (origin/dev, dev)
Author: Jinwoo <wjdwlsdn8520@gmail.com>
Date:   Fri Dec 19 11:23:48 2025 +0900

    test2, 3

commit 585d53a334b8c29ba1c56b3cb4f2392fce1b14cd (HEAD -> main, origin/main, origin/HEAD)
Merge: ee596f8 c855d31
Author: Jinwoo_Jung <123054285+Jinwoo-Jung01@users.noreply.github.com>
Date:   Fri Dec 19 11:18:39 2025 +0900

    Merge pull request #1 from Jinwoo-Jung01/dev
    
    test1

commit c855d31e5acd863bedee5ccb06fed1a29cac6e78
Author: Jinwoo <wjdwlsdn8520@gmail.com>
Date:   Fri Dec 19 11:11:22 2025 +0900

    test1

commit ee596f8a0516c33b270cdc47d97de74f8a40da4b
Author: Jinwoo_Jung <123054285+Jinwoo-Jung01@users.noreply.github.com>
Date:   Fri Dec 19 10:47:41 2025 +0900

    Initial commit
jinwoo@jinwoo-System-Product-Name:~/test$ ls
README.md  test1.py

 

 

하지만, 우리는 이미 dev branch에서 push 한 상태이기에 dev branch로 전환하면 정상적으로 존재하니 걱정하지 않아도 된다.

jinwoo@jinwoo-System-Product-Name:~/test$ git checkout dev
'dev' 브랜치로 전환합니다
브랜치가 'origin/dev'에 맞게 업데이트된 상태입니다.
jinwoo@jinwoo-System-Product-Name:~/test$ git log --all
commit ea2a02571204abc2f0b5f23599261395e8f3652a (HEAD -> dev, origin/dev)
Author: Jinwoo <wjdwlsdn8520@gmail.com>
Date:   Fri Dec 19 11:23:48 2025 +0900

    test2, 3

commit 585d53a334b8c29ba1c56b3cb4f2392fce1b14cd (origin/main, origin/HEAD, main)
Merge: ee596f8 c855d31
Author: Jinwoo_Jung <123054285+Jinwoo-Jung01@users.noreply.github.com>
Date:   Fri Dec 19 11:18:39 2025 +0900

    Merge pull request #1 from Jinwoo-Jung01/dev
    
    test1

commit c855d31e5acd863bedee5ccb06fed1a29cac6e78
Author: Jinwoo <wjdwlsdn8520@gmail.com>
Date:   Fri Dec 19 11:11:22 2025 +0900

    test1

commit ee596f8a0516c33b270cdc47d97de74f8a40da4b
Author: Jinwoo_Jung <123054285+Jinwoo-Jung01@users.noreply.github.com>
Date:   Fri Dec 19 10:47:41 2025 +0900

    Initial commit
jinwoo@jinwoo-System-Product-Name:~/test$ ls
README.md  test1.py  test2.py  test3.py

 

다시 main branch로 돌아와서 병합 해 보자. git checkout [가져올 브랜치명] -- [파일 경로] 명령어로 특정 파일을 가져와 main branch에 업데이트 할 수 있다. 

jinwoo@jinwoo-System-Product-Name:~/test$ git checkout main
'main' 브랜치로 전환합니다
브랜치가 'origin/main'에 맞게 업데이트된 상태입니다.
jinwoo@jinwoo-System-Product-Name:~/test$ git checkout dev -- test2.py
jinwoo@jinwoo-System-Product-Name:~/test$ git status
현재 브랜치 main
브랜치가 'origin/main'에 맞게 업데이트된 상태입니다.

커밋할 변경 사항:
  (스테이지에서 제외하려면 "git restore --staged <file>..."을 사용하시오)
	새 파일:       test2.py

jinwoo@jinwoo-System-Product-Name:~/test$ git add test2.py 
jinwoo@jinwoo-System-Product-Name:~/test$ git commit -m "main branch update test2.py"
[main 07d628a] main branch update test2.py
 1 file changed, 1 insertion(+)
 create mode 100644 test2.py
jinwoo@jinwoo-System-Product-Name:~/test$ git push
오브젝트 나열하는 중: 4, 완료.
오브젝트 개수 세는 중: 100% (4/4), 완료.
Delta compression using up to 16 threads
오브젝트 압축하는 중: 100% (2/2), 완료.
오브젝트 쓰는 중: 100% (3/3), 318 바이트 | 318.00 KiB/s, 완료.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
To https://github.com/Jinwoo-Jung01/test.git
   585d53a..07d628a  main -> main
jinwoo@jinwoo-System-Product-Name:~/test$ git log --all
commit 07d628ad9071e1663d3944ac1a37714d42fe8d9e (HEAD -> main, origin/main, origin/HEAD)
Author: Jinwoo <wjdwlsdn8520@gmail.com>
Date:   Fri Dec 19 11:31:59 2025 +0900

    main branch update test2.py

 

728x90
반응형

'Git' 카테고리의 다른 글

[GIT] Github에 올라간 파일 삭제  (0) 2025.12.19
[GIT] Git/GitHub  (1) 2025.04.11