본문 바로가기

개발자 이야기/Git, GitHub

터미널에서 git merge로 branch들 병합하기

어제는 branch에 대해서 간략하게 공부했다. branch가 무엇이고 git branch를 통해 현재 생성된 branch 목록을 확인하고 branch를 생성하는 법, 그리고 branch를 생성하고 checkout으로 branch를 이동하며 마지막으로 삭제하는 방법까지! 이제야 좀 git을 공부하는 느낌이 나는 것 같다. 그리고 branch를 들으니 예전에 학원 프로젝트를 진행할 때 git을 썼던게 새록새록 기억이 난다. 우리 팀이야 경력자가 있었기에 git으로 버전관리를 했지만, 다른 팀들을 어땠을까.. git이나 svn과 같은 버전 관리 시스템 없이 프로젝트를 진행한다는 것은 지금은 전혀 상상이 안될 정도이다. branch의 기본적인 내용들을 공부했으니 이제는 진짜 branch를 활용하는 방법을 공부할 차례이다. 



어제는 이런저런 일 때문에 바빠서 공부를 많이 못했는데 오늘도 힘든 몸을 이끌고 책상 앞에 앉아 공부를 했다. 팀장님께서 하루에 한글자라도 앉아서 쳐보라고 하신게 한 2달정도 된 것 같은데, 얼마전부터야 실천하고 있다. 특히 블로그 포스팅을 하니 이런건 하루에 공부를 얼마나 하는지는 체크가 잘 되는 것 같다. 우선 시작하기전, 지금까지 작업한 내역을 확인한다. test라는 이름의 branch를 만들었고 checkout을 해 놓은 상태라는 걸 알 수 있다. 어제 공부했던 branch의 개념으로는 어쨌든 master에 존재하는 파일들이 test branch에 그대로 옮겨왔을 것이다. test branch를 만든 이후 아무런 작업을 하지 않았기 때문에. 한번 확인해보았다.




어제 test branch를 만들기 전에 master branch에서 작업한 Hello.java 파일이 그대로 들어왔는지 확인해보았다. 정말 그대로 들어와있는 상태다. 이번에는 merge를 공부하는 것이니 현재 이 test branch의 Hello.java 파일을 우선 수정해보기로 한다. 다음과 같이 수정했다.



System.out.println("Merge"); 라는 문장을 작성하고 :wq를 누르고 저장하고 나온다. 그리고 컴파일 후 실행시켜 정상적으로 작동하는지 테스트를 해보았다.



정상적으로 싱행이 된다! 그럼 이 파일을 test branch에 우선 commit을 한다. 그래야 변경된 내용을 merge할 수 있다. git status로 현재 상태를 한번 보면 




이렇게 나온다. 이미 있는 파일들인데 수정된 파일들이니 따로 add를 해주지 않고 바로 commit을 해도 된다. 어제 공부할 때는 컴파일을 하지 않고 자바 파일만 commit을 했기 때문에 git commit을 썼는데, 모든 파일을 commit할 때는 git commit -a 명령어를 통해 한 번에 처리할 수 있다. commit을 하면 vi editor가 뜰 텐데, 배운대로 변경된 내용을 적어주고 나온다. 그럼 commit이 완료된다. 그럼 이제 변경된 내용을 master branch에 merge 해보기로 한다. 우선 git checkout master를 통해서 master branch로 이동한다. 그리고 Hello.java를 실행시켜 방금 test branch에서 수정한 내용이 master branch에 영향을 주지 않았다는 것을 확인해본다.




Hello.java를 컴파일하고 실행시켜보면 수정 전인 "Hello World!" 만 뜨게 된다. 이로써 각각의 branch들은 독립된 상태라는 것을 알 수 있었다. 그럼 이제 방금 작업한 test branch를 merge 해보겠다. git merge "merge할 branch명" 을 실행시키면 된다. 



그럼 이렇게 branch가 merge 됐다는 메시지가 뜰 것이다. 이렇게 나오면 성공이다. 어떻게 수정되었는지 간략하게 나온다. 




git branch 명령어를 이용하여 현재 master branch에 있다는 것을 확인한 뒤 Hello.java를 실행시켜보았다. 그 결과 test branch에서 작업한 내용이 merge 후에 성공적으로 반영된 것을 확인할 수 있다. 그리고 merge를 했다고 해서 그 branch는 삭제되지 않는다. 사진의 test branch처럼 그대로 branch는 유지된다.