git을 본격적으로 사용하는건 처음이기에
팀원에게 민폐를 끼치지 않도록 과정을 기록했습니다.
fork는 Git저장소를 복사하여 자신의 GitHub계정으로 가져오는 작업으로,
원본 저장소(Upstream)와 독립적인 복사본을 생성하여 자유롭게 변경작업을 할 수 있습니다.
Upstream은 원본 레포지토리를 말하고,
Origin은 원본 레포지토리에서 Fork를 한 레포지토리를 말합니다.
Git에서
clone은원격 저장소(remote repository)의 전체 내용을 로컬 컴퓨터로 복사하여 새로운 작업 디렉토리를 만드는 명령어입니다.
- 로컬 컴퓨터에서 터미널을 열어
cd <clone할 경로>를 입력합니다.- 원격 저장소에서
git 주소를 복사합니다.- 터미널에서
git clone <git 주소>를 입력합니다.
주의사항은 Upstream이 아닌 Origin에서 clone 해야한다는 점입니다‼
Git에서
branch는 저장소내에서 독립적으로 작업을 진행할 수 있는 분기를 의미합니다.
새로운 기능을 개발할 때, 기존 작업에 영향을 주지 않고 별도의 작업 공간을 생성하는 역할입니다.
Git에서 add와 commit은 파일의 변경 사항을 저장소에 반영하는 데 사용하는 기본 명령어입니다.

터미널에서 git add / git commit 을 통해서 할 수 있지만,
GitHub Desktop 소프트웨어도 사용할 수 있습니다.
git add를 한 상태, 즉 staging area에 들어간 상태와 같습니다.staging area에 넣을 수도 있습니다.commit message를 입력하고commit 버튼을 누르면 commit 할 수 있습니다.
History로 들어가면 기록을 쉽게 확인할 수 있으며, 직전 커밋에 대한 변경도 하기가 쉽습니다.
Git에서
push는 로컬 저장소에서 작업한 내용을 원격 저장소(remote repository)에 업로드하는 명령어입니다.
push를 통해 로컬에서 작성한 커밋 기록이 원격 저장소에 반영되며, 협업하는 다른 사람들이 이를 확인하거나 작업을 이어받을 수 있습니다.
add와 commit단계를 지나고나면
GitHub Desktop에서 상단의 맨우측에 push버튼이 활성화 됩니다.
이때의 push버튼이 local에서 Origin으로 commit내역을 보내주는 버튼입니다.
커밋 내역이 없으면 Fetch origin 버튼이 활성화되어있습니다.
GitHub에서 PR(Pull Request)은 코드 변경 사항을 검토하고 병합(Merge)을 요청하는 기능입니다.

origin으로 들어가서 Pull requests 탭으로 들어가면 새로운 PR을 만들 수 있습니다.
초록색의 New pull request버튼을 누르면 새로운 PR을 만들 수 있으며
origin의 어떤 브랜치에서 upstream의 어떤 브랜치로 PR을 요청하는지를 선택할 수 있습니다.

이슈도 PR에서 연동할 수 있습니다.
이슈는 백로그에 작성했던 내용으로 작성했고 PR에서 #을 입력하면 이전 PR이나 이슈도 선택도 할 수 있습니다.
PR에는 ??명이 리뷰를 해야지 merge할 수 있는 기능이 있습니다.
PR을 요청한 후에는 동료가 특정 부분에서 토론을 열 수 있으며 해결이 되면 닫을 수도 있습니다.
동기화(동기화, Synchronization)는 데이터나 상태를 여러 위치에서 동일하게 유지하는 작업을 의미합니다.
Git에서는 로컬 저장소와 원격 저장소 간에 데이터와 변경 사항을 일치시키는 과정에서 사용됩니다.
본인이 올린 PR에서 merge가 된 상황일 때는 동기화 과정이 필요 없습니다.
팀원이 올린 PR에서 merge가 되었을 때는 동기화를 해야합니다.
동기화를 하기 위해서는 로컬에서 upstream remote repository를 등록해줘야 합니다.
현재 upstream에서 fork한 origin은 이미 local로 clone한 상태입니다.
// 1. main 브랜치로 이동
git checkout main
// 2. 연결된 리모트 저장소 확인
git remote -v
// 2. 의 출력
origin https://github.com/snughnu/Popcorn-iOS.git (fetch)
origin https://github.com/snughnu/Popcorn-iOS.git (push)
// 3. upstream저장소를 upstream으로 등록
git remote add upstream https://github.com/GDSC-Popcorn/Popcorn-iOS.git
// 4. 연결된 리모트 저장소 확인
git remote -v
// 4. 의 출력
origin https://github.com/snughnu/Popcorn-iOS.git (fetch)
origin https://github.com/snughnu/Popcorn-iOS.git (push)
upstream https://github.com/GDSC-Popcorn/Popcorn-iOS.git (fetch)
upstream https://github.com/GDSC-Popcorn/Popcorn-iOS.git (push)
// 1. 터미널에서 로컬 레포로 이동
cd <로컬 git 경로>
// 2. 원격 저장소 확인
git remote -v
// 2. 의 출력
origin https://github.com/snughnu/Popcorn-iOS.git (fetch)
origin https://github.com/snughnu/Popcorn-iOS.git (push)
upstream https://github.com/GDSC-Popcorn/Popcorn-iOS.git (fetch)
upstream https://github.com/GDSC-Popcorn/Popcorn-iOS.git (push)
// 3. develop 브랜치로 이동 (merge된 브랜치)
git checkout develop
// 4. upstream의 변경사항들을 develop에 동기화
git pull upstream develop

현재 브랜치와 원격 브랜치가 서로 다른 커밋 히스토리를 가지고 있어서 오류가 발생할 수 있습니다.
오류의 내용은 어떻게 merge할지 방식을 정해달라는 내용입니다.
(merge, rebase, fast-foward)
git config pull.rebase false
git pull upstream develop
또는
git merge —no-ff upstream/develop
git config pull.rebase true
git pull upstream develop
upstream 커밋 뒤에 재배치 하며git config pull.ff only
git pull upstream develop
pull이 허용됩니다.pull이 실패합니다.