Git의 기본부터 pull request까지
Updated:
목차
- Git의 기본: add, commit, push
- 분기를 위한 branch
- 협업을 위한 pull request
- Git으로 code review하기
1. Git의 기본: add, commit, push
-
Git이란?
로컬에 있는 개발자의 코드를 원격 저장소(Git)에 업로드하여 관리할 수 있게하는 (분산)버전 관리 시스템
-
add ➡️ commit ➡️ push
add: 로컬에서 원격으로 올릴 코드를 선택
commit: 버전으로 만들 파일 최종 결정
push: 원격 저장소에 업로드
- step 1. git status로 변경 사항이 있는 코드의 유무를 확인한다.
# 변경사항이 '없는' 상태에서 git status % git status 현재 브랜치 main 브랜치가 'origin/main'에 맞게 업데이트된 상태입니다. 커밋할 사항 없음, 작업 폴더 깨끗함 # 변경사항이 '있는' 상태에서 git status % git status 현재 브랜치 main 커밋하도록 정하지 않은 변경 사항: (무엇을 커밋할지 바꾸려면 "git add <파일>..."을 사용하십시오) (use "git restore <file>..." to discard changes in working directory) 수정함: app/src/main/java/kr/co/ajjulcoding/team/project/holo/MainActivity.kt 수정함: app/src/main/java/kr/co/ajjulcoding/team/project/holo/ProfileFragment.kt 수정함: app/src/main/java/kr/co/ajjulcoding/team/project/holo/UsersettingFragment.kt 커밋할 변경 사항을 추가하지 않았습니다 ("git add" 및/또는 "git commit -a"를 사용하십시오)
- step 2. git add로 원격 저장소에 업로드할 파일을 선택한다.
# MainActivity 파일 하나만 업로드하고 싶을 때 % git add app/src/main/java/kr/co/ajjulcoding/team/project/holo/MainActivity.kt % git status 현재 브랜치 main 커밋할 변경 사항: (use "git restore --staged <file>..." to unstage) 수정함: app/src/main/java/kr/co/ajjulcoding/team/project/holo/MainActivity.kt 커밋하도록 정하지 않은 변경 사항: (무엇을 커밋할지 바꾸려면 "git add <파일>..."을 사용하십시오) (use "git restore <file>..." to discard changes in working directory) 수정함: app/src/main/java/kr/co/ajjulcoding/team/project/holo/ProfileFragment.kt 수정함: app/src/main/java/kr/co/ajjulcoding/team/project/holo/UsersettingFragment.kt # 변경된 모든 파일을 업로드하고 싶을 때 % git add . % git status 현재 브랜치 main 커밋할 변경 사항: (use "git restore --staged <file>..." to unstage) 수정함: app/src/main/java/kr/co/ajjulcoding/team/project/holo/MainActivity.kt 수정함: app/src/main/java/kr/co/ajjulcoding/team/project/holo/ProfileFragment.kt 수정함: app/src/main/java/kr/co/ajjulcoding/team/project/holo/UsersettingFragment.kt
- step 3. git commit로 파일 단위를 최종 결정한 후 변경된 파일 단위(버전)에 대한 메시지 작성
% git commit -m "Move Profile requestPermissionLauncher to MainActivity" [MainActivity 8c4ec64] Move Profile requestPermissionLauncher to MainActivity 3 files changed, 126 insertions(+), 62 deletions(-)
- step4. git push로 원격 저장소에 전송
# git push (원격 저장소 이름) (브랜치 이름) % git push origin main
2. 분기를 위한 branch
-
branch란?
줄기(default)에서 분화되어 독립적으로 개발할 수 있는 가지.
협업을 위해서 꼭 필요한 기능이다. pull request와 함께 유용하게 쓰인다.
병합을 통해 줄기에 가지가 안전하게 붙을 수 있다 ▶️ 협업 시, 서로 안전하게 코드를 합치고 변경할 수 있다.
-
branch 생성 ▶️ branch checkout
# 현재 branch 확인: 현재 main branch에 있음
% git branch
AlarmService
BackBtn
ChatListFragment
Chatting
CombineUserSetting
GPSFragment
ModifyUI
PushAlarm
WebviewFragment
* main
# MainActivity라는 이름의 브랜치 생성하고 해당 브랜치로 이동(checkout)
% git checkout -b MainActivity
새로 만든 'MainActivity' 브랜치로 전환합니다
% git status
현재 브랜치 MainActivity
커밋할 사항 없음, 작업 폴더 깨끗함
checkout은 내가 작업하거나 확인하고싶은 branch로 교체하는 것을 뜻한다.
A branch를 개발하고싶다면 git checkout A를 통해 브랜치를 변경한 뒤 개발 가능하다.
checkout을 통해 branch로 접속한다고 생각하면 이해가 더 쉬울 것 같다.
3. 협업을 위한 pull request
- branch 작업 상황 add ▶️ commit ▶️ pull request
# add 와 commit을 동시에
% git commit -am "Move GPS requestPermissionLauncher to MainActivity"
[MainActivity 988e568] Move GPS requestPermissionLauncher to MainActivity
4 files changed, 50 insertions(+), 129 deletions(-)
# pull request 생성
% git push -u origin MainActivity
오브젝트 나열하는 중: 46, 완료.
오브젝트 개수 세는 중: 100% (46/46), 완료.
Delta compression using up to 8 threads
오브젝트 압축하는 중: 100% (19/19), 완료.
오브젝트 쓰는 중: 100% (31/31), 3.94 KiB | 3.94 MiB/s, 완료.
Total 31 (delta 13), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (13/13), completed with 7 local objects.
remote:
remote: Create a pull request for 'MainActivity' on GitHub by visiting:
remote: https://github.com/YeeunLee8245/Holo-AndroidApp/pull/new/MainActivity
remote:
To https://github.com/YeeunLee8245/Holo-AndroidApp.git
* [new branch] MainActivity -> MainActivity
branch 'MainActivity' set up to track 'origin/MainActivity'.
pull request는 내가 개발한 branch의 commit들을 원격 저장소에 반영(pull)해줄 것을 요청(request)하는 작업이다.
협업자들이 PR(이하 pull request)를 통해 내 코드에 이상이 없는지 검토할 수 있다.
검토 권한이 있는 협업자들이 내 PR를 거절할 수도, PR 안에서 수정해줄 수도, 알맞은 코드라고 판단하여 병합해줄 수도 있다.
- step1. 개발한 코드를 PR로 생성한다.
- step2. 제목에는 커밋 제목을, 내용에는 주요 개발 내용을 작성한다.
Leave a comment