$ git checkout -b feature-week1
-b 플래그는 현재 작업 중인 브랜치에서 새 브랜치를 생성해준다.
새 브랜치의 커밋 히스토리는 작업하고 있던 브랜치의 마지막 커밋에서 시작된다.
git fetch origin의 주요 기능
$ git fetch origin
원격 브랜치 업데이트
원격 저장소(origin)에 있는 브랜치와 관련된 최신 변경 사항(커밋)을 가져옵니다. 이때 가져온 변경 사항은 로컬의 원격 추적 브랜치(예: origin/main, origin/feature-week8)에 저장됩니다.
병합 없이 안전하게 동기화
fetch는 로컬 브랜치에 변경 사항을 바로 적용하지 않기 때문에, 작업 중인 로컬 브랜치를 보호하면서 원격 저장소와의 차이를 확인할 수 있습니다.
원격 브랜치 및 태그 정보 업데이트
원격 저장소에서 새로 추가되거나 삭제된 브랜치 및 태그 정보를 로컬로 동기화합니다.
$ git checkout main
$ git branch -d <로컬_브랜치_이름>
현재 작업중인 브랜치는 삭제 불가능
브랜치에 병합되지 않은 변경사항 및 푸시되지 않은 커밋이 있는 경우 삭제 불가능
$ git branch -D <로컬_브랜치_이름>
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. If you want to integrate the remote changes,
hint: use 'git pull' before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
로컬 저장소에 있는 프로젝트를 깃허브에 push하려 할 때, 이런 문구가 떴다.
메세지를 보니,
현재 로컬 브랜치(yoonseo)가 깃허브에 있는 동일한 브랜치(remote branch)보다 옛날 상태라서 깃헙을 보호하기 위해 푸시를 막은 것으로 보인다.
push 전에 pull을 해서 프로젝트를 병합해주어야 한다.
git push origin yoonseo
refusing to merge unrelated histories 이런 문구가 뜬다면
git pull origin 브런치명 --allow-unrelated-histories
위 명령 옵션은 서로 관련 없는(공통 조상이 없는) 두 브랜치의 Git 히스토리를 강제로 병합하려고 할 때 사용하는 명령어이다.
참고: 보통 Git은 병합하려는 두 브랜치가 같은 루트(commit)에서 시작된 경우에만 병합을 허용한다. 하지만 아래와 같은 상황에서는 서로 "unrelated"한 것으로 간주하고 병합을 거부한다.
💥 이런 경우!
1. 두 개의 독립적으로 시작된 Git 저장소를 병합하려고 할 때
2. 처음에 깃허브에서 README.md만 있는 상태에서 로컬저장소를 push하려고 할때
- GitHub: README 하나 있음
- 로컬: 다른 커밋 있음 → 서로 공통 히스토리 없음 → 병합 불가
3. 이전에 공유한 적 없는 브랜치를 병합할 때
- ex: 팀원이 만든 브랜치와 내 브랜치가 아예 다른 시작점에서 만들어짐