개발자에게 있어 git을 통한 협업은 피할 수 없는 과정이다. 그러나 나는 그동안 협업과정에서 발생하는 conflict가 두려워 add, commit, push만 하며 잔디밭을 채우기 일쑤였다.
최근에 모던 자바스크립트 딥다이브라는 책을 3달안에 공부하는 것을 목표로 스터디를 시작하게 되었다. 이번에야말로 git에 대한 두려움을 없애보고 싶어 팀원들에게 git에 공부한 내용을 정리하고 공유하자는 의견을 냈다. 그래서 이번 글에는 협업을 하기 위해 필수로 알아야 하는 fork, pull request 등의 과정을 정리해보려 한다.
Repository는 간단히 말해 '저장소'이다. 이번 과정에서는 총 세 가지 Repository를 사용할 예정이다.
수정해보고 싶거나 공부해보고 싶은 코드가 있다면 해당 레포지토리에서 fork를 할 수 있다. fork를 하는 것은 원본 저장소를 복사해 내 개인 레포지토리로 가져오는 것이다. 이때, fork 해 온 파일을 수정한다고 해도 원본 저장소에 영향을 미치지 않는다.

fork 하고 싶은 레포지 토리에 가면 우측 상단에 사진과 같이 버튼이 나타난다. 해당 버튼을 누르면 '본인 깃허브 아이디/저장소 이름'이라는 저장소가 개인 저장소가 생성된다.
내 개인 저장소를 만들었으니 작업을 할 새로운 공간을 만들어보자. 생성한 개인 저장소에서 우측 상단의 'Code'를 눌러 주소를 복사한다. 이후 자신이 원하는 디렉터리로 이동하여 터미널을 켜 아래 명령어를 입력한다
git clone '레포지토리 주소'

작업을 할 공간을 만들었으니 브랜치를 생성해보자. 브랜치를 이용하면 여러명이서 하나의 파일을 대상으로 작업 하는 것보다 각자의 브랜치에서 작업 후에 합칠 수 있다. 즉, main 브랜치가 아닌 또 다른 작업 공간에서 작업을 할 수 있는 것이다.
branch를 생성하는 방법은 아래와 같다.
git branch '생성할 브랜치 이름'
git chechout '생성한 브랜치 이름' //작업을 하려면 해당 브랜치로 이동을 해야하므로 checkout명령어를 통해 디렉토리를 이동시켜야 한다.
코드 수정을 완료했다면 add & commit을 통해 branch에 push할 준비를 하자.
방법은 아래와 같다.
git add . // 변경한 전체 파일을 추가할 때
git add '추가할 파일 이름' //특정 파일만 추가하고 싶을 때
git commit -m "변경된 내용"
Add와 commit을 했다고 레포지토리에 변화가 생기지 않는다. push까지 해야 원격 저장소로 보내진다.
원격 저장소에 변경한 내용을 저장하기 위해 push를 해보자. 이때, 주의해야 할 점이 있는데 우리는 branch를 따로 생성했기 때문에 명령어를 아래와 같이 작성해야 한다.
git push origin '작업 중인 branch 이름'
명령어를 위와 같이 작성하면 자신의 github 저장소에 compare & pull request 버튼이 활성화 될 것이다. 버튼을 눌러 pull request를 한다.
pull request는 원본 저장소를 관리하는 사람에게 내가 수정한 코드를 보낼 테니 한 번 검토해달라는 의미이다. 따라서 pull request를 한다고 바로 원격 저장소가 저장되는 것이 아니라 PR을 한 뒤 merge를 해야 저장이 된다. PR을 받은 관리자는 코드 변경내역을 확인하고 Merge 여부를 결정하게 된다.
Merge가 완료되면 로컬 코드와 원본 코드를 병합하고 최신의 상태를 유지하기 위해 동기화한다.
원격 저장소 확인
git remote -v
원격 저장소 추가
git remote add '원본 저장소 별명'
git fetch upstream
git merge '원본 저장소 별명'/main
git branch -d 'branch 이름' // 브랜치 삭제
여태까지 add, commit, push만을 사용해 git을 사용했다. 사실상 현업에 가면, 현업까지 가지 않더라도 프로젝트를 하게 되면 add, commit, push는 정말 새발의 피인데 그동안 새로운 걸 해보지 않으려 했던게 아쉬웠던 것 같다. 이 공부를 하기 전에는 git 얘기를 들으면 거부감부터 들었는데 이제는 error를 만날 생각에 두근두근할 것 같다.