[Git] 깃 명령어 정리

yoons(이윤서)·2024년 12월 23일

- 새 브랜치 만들기

$ git checkout -b feature-week1

-b 플래그는 현재 작업 중인 브랜치에서 새 브랜치를 생성해준다.
새 브랜치의 커밋 히스토리는 작업하고 있던 브랜치의 마지막 커밋에서 시작된다.

- fetch

git fetch origin의 주요 기능

$ git fetch origin

원격 브랜치 업데이트
원격 저장소(origin)에 있는 브랜치와 관련된 최신 변경 사항(커밋)을 가져옵니다. 이때 가져온 변경 사항은 로컬의 원격 추적 브랜치(예: origin/main, origin/feature-week8)에 저장됩니다.

병합 없이 안전하게 동기화
fetch는 로컬 브랜치에 변경 사항을 바로 적용하지 않기 때문에, 작업 중인 로컬 브랜치를 보호하면서 원격 저장소와의 차이를 확인할 수 있습니다.

원격 브랜치 및 태그 정보 업데이트
원격 저장소에서 새로 추가되거나 삭제된 브랜치 및 태그 정보를 로컬로 동기화합니다.

- 브랜치 전환

$ git checkout main

- 브랜치 삭제

  • 로컬 브랜치 삭제
$ git branch -d <로컬_브랜치_이름>

현재 작업중인 브랜치는 삭제 불가능
브랜치에 병합되지 않은 변경사항 및 푸시되지 않은 커밋이 있는 경우 삭제 불가능

  • 로컬 브랜치 강제 삭제
$ git branch -D <로컬_브랜치_이름>

- pull 관련 git

⚠️ ERROR ⚠️

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)보다 옛날 상태라서 깃헙을 보호하기 위해 푸시를 막은 것으로 보인다.

✅ 해결

  1. push 전에 pull을 해서 프로젝트를 병합해주어야 한다.
    git push origin yoonseo

  2. refusing to merge unrelated histories 이런 문구가 뜬다면

  3. git pull origin 브런치명 --allow-unrelated-histories
    위 명령 옵션은 서로 관련 없는(공통 조상이 없는) 두 브랜치의 Git 히스토리를 강제로 병합하려고 할 때 사용하는 명령어이다.

참고: 보통 Git은 병합하려는 두 브랜치가 같은 루트(commit)에서 시작된 경우에만 병합을 허용한다. 하지만 아래와 같은 상황에서는 서로 "unrelated"한 것으로 간주하고 병합을 거부한다.

💥 이런 경우!
1. 두 개의 독립적으로 시작된 Git 저장소를 병합하려고 할 때
2. 처음에 깃허브에서 README.md만 있는 상태에서 로컬저장소를 push하려고 할때
- GitHub: README 하나 있음
- 로컬: 다른 커밋 있음 → 서로 공통 히스토리 없음 → 병합 불가
3. 이전에 공유한 적 없는 브랜치를 병합할 때
- ex: 팀원이 만든 브랜치와 내 브랜치가 아예 다른 시작점에서 만들어짐

profile
개발공부하는 잠만보

0개의 댓글