-
git init부터 merge, rebase, pull request까지 (git으로 협업하기)Git 2024. 8. 26. 09:32
Git 기초
로컬에서(내 데스크탑에서) git으로 버전 관리를 하고 싶을 때
→ git 이라는 폴더가 생기면서 버전 관리를 시작하는 걸 뜻한다. git init은 한 프로젝트 당 딱 한번만 해야한다.
git init
일단 코드를 새로 작성할 때마다 밥먹듯이 해야하는 것 add, commit 둘은 세트다.
add: 나 이제 저장할거야, commit: 진짜 저장 (git은 commit을 기준으로 버전 관리를 한다)
git add .
git commit -m "commit message"
커밋 메시지는, 만약 내가 회원가입 기능을 구현했다면, "feature:signup" 또는 "회원가입" 이런식으로 써주면 된다.
만약, 내가 회원가입, 로그인, 로그아웃 기능 세가지를 구현했다면? 🤔
📌 그래서, 커밋메시지를 길게 쓰고싶다면?
git add .
git commit
git commit 엔터하고, i 를 누르면 이렇게 여러줄 입력할 수 있는 창이 생긴다.
엔터 해보면 명령어가 실행되는게 아니라 커밋메시지를 더 쓸 수 있도록 다음 줄로 이동된다.
메시지를 끝내고 싶으면 esc 누르고
:wq
위와 같이 콜론 : wq 하면 빠져나올 수 있다. write quit 그만 쓴다는 뜻. 진짜 직관적이다.ㅎㅎ
만약, github에 있는 레포지토리에도 남겨두고 싶다면, 아래 명령어로 레포지토리를 가져오고
git remote add origin https://~ #원격 저장소 url
clone으로 가져와도 되고 https url을 직접 복사해도 된다.
최초 푸시일 때는 -u origin을 줘서 원격저장소와 연결해주면 된다.
git push -u origin master
📌 -u 또는 --set-upstream 은 origin 원격 저장소의 master 브랜치를 로컬 master 브랜치와 연결해주고, 이후 git push나 git pull 명령어를 사용할 때 원격 브랜치를 자동으로 추적하도록 설정해준다.
나는 위 과정을 해서, 깃 내 브랜치에 올리기 위해 그냥 git push 만 해주면 된다. 내가 작성한 코드를 깃에 올리는 거다.
특정 브랜치의 작업을 pull 해야 할 때
git branch -v
현재 로컬 브랜치 목록과 함께 각 브랜치의 최신 커밋 정보를 확인할 수 있다.
git pull origin <branch_name>
원격저장소에서 <branch_name> 만 pull 해와서 현재 로컬 브랜치에 병합한다.
📌 참고
선 pull 후 push
pull과 push에도 우선 순위가 있다. 만약, A라는 항목이 있다고 할 때, 원격에서 A가 a로 커밋되었고, 로컬에서는 b로 커밋되었다면, 원격에서의 a를 먼저 pull 해야 한다.
즉, 내가 push 할 게 있는데 누군가 프로젝트를 먼저 커밋한 게 있다면, 먼저 커밋된 내용을 pull 하고 그 이후에 내가 커밋한 내용을 push 해줘야 한다.
로컬이 GitHub보다 뒤쳐져 있으면 pull을 하고 그 다음 push를 해줘야 한다. 이 때 그냥 git pull을 하면 오류가 발생한다. 이미 로컬에서도 커밋한 내용이 있기 때문에 '병합'없이 불러올 수 없기 때문이다. 그렇기 때문에 pull을 먼저 해야한다.
Branch
브랜치 == 특정 커밋을 가리키는 포인터 (⭐⭐⭐⭐⭐)
브랜치는 새로운 기능을 구현할때마다 여러개 만들어도 된다. 머지하면 됨.
브랜치 목록 및 내가 지금 어떤 브랜치에 있는지 확인
git branch
브랜치 생성
git branch <branch_name>
<branch_name> 이라는 브랜치를 생성하고 즉시 그 브랜치로 이동
git switch -c <branch_name>
<branch_name>로 이동 (즉, 현재 작업중인 브랜치를 <branch_name>으로 변경하고자 할 때)
git switch <branch_name>
git checkout <branch_name>
예: 이러면 dev 브랜치로 전환된다.git switch dev
Branch merge
각 branch에서 작업한 후 코드를 합치기 위해서는 일반적으로 merge 명령어를 사용한다.
병합을 진행할 때, 만약 서로 다른 commit에서 동일한 파일을 수정한 경우 충돌이 발생하곤 한다.(매우 자연스러운 일)
이 경우에는 그냥 직접 수정해주면 된다. 한 번 해보면 어려울 거 없음.내가 원하는 코드로 혹은 팀장님이 승인한 최근 이력을 확인한 후, 직접 코드를 수정한 후 → git add .→ git commit 하면 끝이다.
브랜치 병합
git merge <branch_name>
현재 브랜치에 <branch_name>이라는 브랜치의 변경사항을 병합하는 거다. 높은 확률로 충돌이 발생한다. 직접 수정해서 충돌을 해결한 하면 된다.
예를 들어, 아래처럼 자주 쓰게 된다.
git checkout dev git merge feature/signup
dev 브랜치에 feature/signup 브랜치의 변경사항을 병합한다는 뜻이다.
브랜치 재배치
git rebase <branch_name>
현재 브랜치의 변경 사항을 다른 브랜치의 최신 커밋 위로 재배치하는 거다.
★ rebase는 커밋 이력 및 타임라인을 깔끔하게 유지할 수 있도록 해준다.
예를 들어, 아래 명령어는 feature/signup 브랜치의 변경 사항을 main 브랜치의 최신 커밋 위로 재배치하겠다는 뜻
git checkout feature/signup git rebase main
merge를 하며 발생한 충돌을 해결했다면 그 다음은? 당연히 add, commit을 해줘야한다.
다른 사람의 branch로 switch 하고 싶을 때
remote와 local은 별개의 환경이다. remote에 브랜치가 있다고해서 local에 있지 않기 때문에 먼저 remote의 branch를 local로 가져온 다음 switch를 하는 것이 필요하다.
아래 명령어들을 차례로 입력해주면 된다.
git fetch
git checkout -t <branch_name>
git switch <branch_name>
다른 branch를 pull 해도 될까?
- 기능적으로 가능하지만, 해도 되나요? 에 대한 대답은 아니오🙅♂️
- 현재 branch와 동일한 branch에 push & pull을 해야한다.
- 다른 branch의 기능이 현재 내 branch에 필요하다면 merge 를 사용하자.
협업의 시작
Manager Crew Github 에서 Repository 생성 Github 가입한 이메일로 오는 초대 메일 수락 Local 에서 Repository 생성 git clone URL_git git init (작업) git remote add origin URL_git git add, commit README.md 생성 git push origin master git add, commit Manage Access > Invite a Collaborator 이때 중요한 게 있다. 바로 pull request
같이 프로젝트를 하는 사람들끼리의 소통인 동시에 중간 보고 정도로 생각하면 된다.
예시
git branch & merge (using PR)
- branch는 부담없이 생성하면 된다
- 개발이 끝났으면 PR을 올린다
- Conflict가 발생했다면 해결하고 add / commit / push
- 해결할 branch에서 다른 branch를 Merge
- add / commit / push
- PR에서 리뷰가 끝났으면 Merge
- git pull로 로컬 반영 (필요시)
이 외에도 git에는 무지 많은 기능들이 있다고 한다. 이번 팀 프로젝트 끝나고 공부해봐야곘다👀
참고.gitignore 은 이 사이트를 이용하면 편함 > https://www.toptal.com/developers/gitignore/
이렇게 나한테 필요한걸 입력해서 Creates누른 후 복붙 해오면 된다.
깃, 게임으로 공부하기
https://learngitbranching.js.org/?locale=ko
해보니까 꽤 재밌고 생각보다 쉽지 않았다.😂
'Git' 카테고리의 다른 글
Git 기본 명령어 정리 (0) 2024.09.23 팀프로젝트 Github 트러블슈팅 (0) 2024.09.18 팀프로젝트 협업툴 Github (0) 2024.09.12 github설치, repository 만들기, pycharm 연동, 파이썬 코드파일 올리기(pull, push..) (2) 2024.07.03