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를 한 상태이고add할 수도 있습니다.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을 요청하는지를 선택할 수 있습니다.동기화(동기화, Synchronization)는 데이터나 상태를 여러 위치에서 동일하게 유지하는 작업을 의미합니다.
Git에서는 로컬 저장소와 원격 저장소 간에 데이터와 변경 사항을 일치시키는 과정에서 사용됩니다.
본인이 올린 PR에서 merge가 된 상황일 때는 동기화 과정이 필요 없습니다. (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/CaloLink-iOS.git (fetch)
origin https://github.com/snughnu/CaloLink-iOS.git (push)
// 3. upstream저장소를 upstream으로 등록
git remote add upstream https://github.com/CaloLink/CaloLink-iOS.git
// 4. 연결된 리모트 저장소 확인
git remote -v
// 4. 의 출력
origin https://github.com/snughnu/CaloLink-iOS.git (fetch)
origin https://github.com/snughnu/CaloLink-iOS.git (push)
upstream https://github.com/CaloLink/CaloLink-iOS.git (fetch)
upstream https://github.com/CaloLink/CaloLink-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이 실패합니다.