[git] branch의 생성과 삭제, 병합

jeygeon·2023년 2월 5일

이번에는 git 브랜치의 생성과 삭제에 대한 간단한 실습을 하겠다.

먼저 내가 테스트를 진행할 초기화가 된(git init) 로컬 디렉토리를 가보면 아래와 같이 test.txt를 하나 만들어 놓고 commit까지 해놓았다.

jaeygun@jaeygun-MacBookAir git_test % ls -al
total 8
drwxr-xr-x  4 jaeygun  staff   128B  2  5 19:23 ./
drwxr-xr-x  6 jaeygun  staff   192B  2  5 14:44 ../
drwxr-xr-x  9 jaeygun  staff   288B  2  5 19:22 .git/
-rw-r--r--  1 jaeygun  staff    12B  2  5 19:23 test.txt
content one [main]
~            
~           
~
~
"test.txt" 1L, 12B

git branch 명령어로 현재 branch가 어떤것이 있는지 확인 가능한데 지금 나는 main branch 하나만 있고 저기에 test.txt가 commit되어 있는 상태이다.

jaeygun@jaeygun-MacBookAir git_test % git branch
* main

git branch [브랜치명] 을 입력하면 branch가 생성이 된다.

jaeygun@jaeygun-MacBookAir git_test % git branch exp
jaeygun@jaeygun-MacBookAir git_test % git branch
  exp
* main

git checkout [브랜치명] 을 해서 새로 생성한 exp branch로 변경을 하면 저렇게 변경이 되었다는 코멘트가 나온다.

jaeygun@jaeygun-MacBookAir git_test % git checkout exp
Switched to branch 'exp'

그리고 다시 브랜치를 확인해보면 exp로 정상적으로 변경된것이 확인 가능하고

jaeygun@jaeygun-MacBookAir git_test % git branch
* exp
  main

이제 exp 브랜치에서 아까 있던 test.txt의 내용을 변경하고 새롭게 커밋을 해보면 exp브랜치에서는 내용이 보이지만

content one [main]

edit content [exp]            
~           
~
~
"test.txt" 3L, 40B

main branch에서는 아까와 똑같은 내용만 보여지게 된다.

content one [main]
~            
~           
~
~
"test.txt" 1L, 12B

그리고 git log명령어에 --branches 옵션을 주게 되면 모든 브랜치에 대한 커밋 히스토리 이력을 보여줘서 여기서 확인이 가능하다.

jaeygun@jaeygun-MacBookAir git_test % git log --branches                   
commit 4425fad69337baca2ef200aacbd2b6c5092fbc2a (exp)
Author: jaeygun <jaeygun@gmail.com>
Date:   Sun Feb 5 19:44:40 2023 +0900

    두번째 커밋 [exp]

commit 7ecd572d0e12998a2c784c2602c8f19db9746a76 (HEAD -> main)
Author: jaeygun <jaeygun@gmail.com>
Date:   Sun Feb 5 19:34:38 2023 +0900

    첫번째 커밋 [main]

그리고 --graph 옵션을 추가로 줘서 쉽게 확인이 가능한데 명확한 확인을 위해 다시 main 브랜치로 돌아와서 내용 수정 후 커밋을 했다. 그리고 다시 커밋 히스토리 내역을 보니 아까와는 없던 가지(?)가 생겼다.

jaeygun@jaeygun-MacBookAir git_test % git log --branches --graph
* commit 417de1d647ee03cc88a110f8d691d508b1da0c12 (HEAD -> main)
| Author: jaeygun <jaeygun@gmail.com>
| Date:   Sun Feb 5 19:53:31 2023 +0900
| 
|     세번째 커밋 [main]
|   
| * commit 4425fad69337baca2ef200aacbd2b6c5092fbc2a (exp)
|/  Author: jaeygun <jaeygun@gmail.com>
|   Date:   Sun Feb 5 19:44:40 2023 +0900
|   
|       두번째 커밋 [exp]
| 
* commit 7ecd572d0e12998a2c784c2602c8f19db9746a76
  Author: jaeygun <jaeygun@gmail.com>
  Date:   Sun Feb 5 19:34:38 2023 +0900
  
      첫번째 커밋 [main]

이제 현재 상태를 정리해보자면
main 브랜치의 내용은 아래와 같고

content one [main]

content third [main]
~
~
~
"test.txt" 3L, 41B

exp 브랜치의 내용은 아래와 같다

content one [main]

edit content [exp]
~
~
~
"test.txt" 3L, 40B

이제 두 브랜치를 병합해보도록 하겠다.

나는 main브랜치로 이동해서 exp 브랜치의 내용을 가져와 merge하도록 해보겠다. 그러기 위해서는 일단 다시 main브랜치로 이동 후 git merge [merge하려는 브랜치명] 명령어를 사용하면 되는데

jaeygun@jaeygun-MacBookAir git_test % git merge exp
Auto-merging test.txt
CONFLICT (content): Merge conflict in test.txt
Automatic merge failed; fix conflicts and then commit the result.

충돌이 나버렸다.

이유는 main브랜치의 test.txt파일과 exp브랜치의 test.txt파일의 3번째 라인에서 서로 다른 내용이 들어가 있으니 해당 라인에서 충돌이 나버린것인데, 실제로 파일 내용을 확인해보면

content one [main]

<<<<<<< HEAD
content third [main]
=======
edit contenet [exp]
>>>>>>> exp
~                                                  
~                 
"test.txt" 7L, 94B

이렇게 되어있는것을 확인할 수 있다. 이렇게 충돌이 났을때는 Git 이 자동으로 위와 같이 충돌 정보를 포함하여 파일 내용을 변경하게된다. 이 내용을 통해 어떤 브랜치에서 어떤 부분이 충돌되었는지 확인이 가능하며, 충돌이 일어난 부분은 이렇게 일일이 확인해서 수정해 주어야 한다.

이제 충돌이 난 상태에서 내용 수정을 한 후 다시 커밋을 해보겠다.
수정한 내용은 아래와 같고

content one [main]


content third [main]

edit contenet [exp]
~                                           
~                                
"test.txt" 6L, 63B

merge를 했다.

jaeygun@jaeygun-MacBookAir git_test % git commit
[main f87da2c] Merge branch 'exp'

로그확인

jaeygun@jaeygun-MacBookAir git_test % git log --branches --graph
*   commit f87da2c7ece7fe86faa2a5949b37e7660939c6ad (HEAD -> main)
|\  Merge: 417de1d 4425fad
| | Author: jaeygun <jaeygun@gmail.com>
| | Date:   Sun Feb 5 20:16:32 2023 +0900
| | 
| |     Merge branch 'exp'
| | 
| * commit 4425fad69337baca2ef200aacbd2b6c5092fbc2a (exp)
| | Author: jaeygun <jaeygun@gmail.com>
| | Date:   Sun Feb 5 19:44:40 2023 +0900
| | 
| |     두번째 커밋 [exp]
| | 
* | commit 417de1d647ee03cc88a110f8d691d508b1da0c12
|/  Author: jaeygun <jaeygun@gmail.com>
|   Date:   Sun Feb 5 19:53:31 2023 +0900
|   
|       세번째 커밋 [main]
| 
* commit 7ecd572d0e12998a2c784c2602c8f19db9746a76
  Author: jaeygun <jaeygun@gmail.com>
  Date:   Sun Feb 5 19:34:38 2023 +0900
  
      첫번째 커밋 [main]

이제 main브랜치에 merge까지 했으니 exp브랜치가 필요가 없어졌다.
삭제해보도록 하겠다.

삭제할때는 -d 옵션을 추가해주면 된다. git branch -d [삭제하려는 브랜치명]

jaeygun@jaeygun-MacBookAir git_test % git branch -d exp         
Deleted branch exp (was 4425fad).
jaeygun@jaeygun-MacBookAir git_test % git branch
* main

끝


References

0개의 댓글