Git의 기본부터 pull request까지

Updated:

목차

  1. Git의 기본: add, commit, push
  2. 분기를 위한 branch
  3. 협업을 위한 pull request
  4. 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. 제목에는 커밋 제목을, 내용에는 주요 개발 내용을 작성한다.


4. Git으로 code review하기

Tags:

Categories:

Updated:

Leave a comment