프로젝트를 진행할 때, 주로 몇 명이서 작업을 하나요? 혼자만의 프로젝트를 진행할 수도 있겠지만, 대부분은 본인을 포함한 두 명이상으로 인원이 구성될 것입니다. 그리고 여러 명이 개발로 협업을 해야 할 경우, 대부분은 git을 사용하여 진행합니다.
브랜치를 통한 효율적인 협업을 진행할 수 있다는 것이 git을 사용하는 큰 이유입니다. 저도 이전 회사에서는 commit, push, pull 등의 아주 기본적인 명령어들 밖에 사용하지 않았지만, 이직을 한 뒤에는 초면인 git 명령어들을 많이 만나게 되었고 지금은 친해지려고 노력 중에 있습니다.
그들과 절친이 될 수 있게, 이번 포스팅에서는 협업할 때 쓰이는 여러 가지 Git 명령어들에 대해 알아보겠습니다.
[stash & apply] commit을 사용하지 않고 저장하고 싶어요.
개발자 기덕이는 feature/board 브랜치에서 게시판을 만드는 작업을 하고 있습니다. 그러나 기덕이에게 갑자기 개발 팀장님이 오시더니 말합니다.
회원 비밀번호 변경을 지금 급하게 만들어야 하니까 그거 중단하고 이 작업 진행해!
팀장님의 요구를 따르려면 브랜치를 전환해야 하는데, 기덕이는 지금 작업 중인 내역을 commit으로 저장하기에는 아직 진행 중이라 애매하다고 생각합니다. 그러나 브랜치를 변경하려면 현재 변경사항을 빼두긴 해야 합니다.
이럴 때, git stash 라는 명령어를 쓰면 현재의 변경사항을 별도의 스택 공간에 빼두게 만들 수 있습니다.
기덕이는 이제 회원 비밀번호 변경을 마치고 돌아와서 다시 게시판 작업을 진행하려고 합니다. 아까의 임시 저장한 변경사항을 다시 불러오고 싶으니, git stash apply 라는 명령어를 남겨봅시다. 아까 작업했던 내역을 다시 불러올 수 있습니다.
이제 기덕이는 다시 즐겁게 작업을 할 수 있게 되었습니다.
[cherry-pick] 다른 브랜치에 있는 커밋을 현재 브랜치로 가져오고 싶어요!
기덕이는 이제 게시판 만드는 작업을 완료하고, 공지사항 만드는 작업을 진행하고 있습니다. 그러나 결국은 비슷한 작업을 하는 일이기 때문에, 아까 작업할 때 만들었던 공통 기능 A가 필요해 보입니다.
아까 브랜치에서 A 만드는 커밋을 이미 했는데, 다시 만들기는 귀찮은데...
이럴 때 cherry-pick 명령어를 사용할 수 있습니다. 다른 브랜치의 변경사항을 복사해서 현재 브랜치로 가져오게 합니다.
우선 A커밋의 해시를 확인해 봅시다. git log 를 사용하면 확인할 수 있습니다.
$ git log --online
76ae30e A 기능을 만든다
이제 A의 해시가 76ae30e 라는 것을 알았습니다. 이제 공지사항 브랜치에서 git cherry-pick 76ae30e 라는 명령어를 입력하면, 기덕이가 원하는 A 기능의 커밋을 공지사항 브랜치로 가져올 수 있습니다! 이제 중복되는 작업을 진행하지 않아도 되겠군요.
[revert] 이전 커밋을 되돌리고 싶어요!
기덕이는 게시판 브랜치에서 다음과 같이 세 개의 작업을 하였습니다.
$ git log --online
920185c C 기능을 만든다
8715a0f B 기능을 만든다
76ae30e A 기능을 만든다
그러나 개발 도중, B 기능에 문제가 있다는 것을 알아차렸습니다. 그러나 B기능은 이미 remote repository 공간에 올라가 있고, git reset 을 하기에는 다른 동료들의 작업과 충돌이 날까 봐 걱정이 됩니다.
이럴 때 사용하는 명령어가 git revert 입니다. 기존 커밋들을 지우지 않고, 현재 커밋 위로 이전 커밋 내용을 다시 되돌리는 커밋을 만드는 명령어입니다. 기덕이는 git revert 8715a0f 를 사용하였습니다.
$ git log --online
d02253b This reverts commit 8715a0f3839cdd0ada557df823609f234610a.
920185c C 기능을 만든다
8715a0f B 기능을 만든다
76ae30e A 기능을 만든다
협업할 때 쓰이는 여러 가지 깃 명령어들을 살펴보았습니다. 물론 아주 기본적인 상황이고, 실무에 들어가면 더 복잡한 상황이 많이 발생합니다. 그래도 이러한 지식들을 알고서 해결하려고 시도하는 것과 모르고 해결하려고 시도하는 부분의 차이는 존재할 것 같습니다. 기본적인 git 명령어에 익숙해지면 분명 복잡한 상황에도 창의적인 방법을 생각해낼 수 있을 것입니다.
'DevOps' 카테고리의 다른 글
DBMS 선택 가이드 (0) | 2022.02.01 |
---|