main은 공유본으로 두고, 작업은 브랜치와 Pull Request로 넣습니다.
main에 바로 커밋하면, 끝나지 않은 수정이 곧 공유본이 됩니다. 브랜치는 그 수정을 이름 있는 줄기로 분리합니다. 잘못돼도 브랜치만 버리고 main은 남습니다.
이름은 하는 일이 보이게 짓습니다. docs/github-guide, fix/nav-label처럼 종류와 내용을 슬래시로 나눕니다.
시작 전에 main을 원격과 맞춥니다. git switch -c는 브랜치를 만들면서 그쪽으로 이동합니다.
git switch main
git pull
git switch -c docs/github-guide
파일을 고친 뒤 커밋하고, 그 브랜치 이름으로 처음 올립니다. -u는 다음부터 git push, git pull만으로 이 원격 브랜치와 연결되게 합니다.
git add README.md
git commit -m "GitHub 학습 링크 추가"
git push -u origin docs/github-guide
지금 브랜치와 목록은 이렇게 봅니다. 별이 붙은 줄이 현재 브랜치입니다.
git branch
git status
main, compare는 docs/github-guide인지 확인합니다. 방향이 반대면 main을 작업 브랜치에 넣는 요청이 됩니다.혼자 연습이면 스스로 Review를 생략하고 Merge pull request를 눌러도 됩니다. 팀에서는 다른 사람이 승인하기 전에는 머지하지 않는 규칙을 저장소에 둘 수 있습니다.
GitHub에서 머지가 끝나면, 내 컴퓨터의 main은 아직 옛 커밋을 가리킵니다. 받아서 맞춥니다.
git switch main
git pull
git branch -d docs/github-guide
git branch -d는 이미 합쳐진 로컬 브랜치만 지웁니다. 합쳐지지 않았으면 멈추므로, 실수로 작업을 지우지 않습니다. GitHub의 원격 브랜치는 PR 화면의 Delete branch로 지웁니다.
git pull이나 PR이 충돌을 말하면, 파일 안에 아래 표시가 들어갑니다. Git이 어느 쪽을 남길지 정하지 못한 구간입니다.
<<<<<<< HEAD
현재 브랜치의 문장
=======
받아 온 쪽의 문장
>>>>>>> docs/github-guide
<<<<<<<, =======, >>>>>>>)을 지웁니다.git add README.md
git commit -m "README 충돌 해결"
PR 안의 충돌이면 이 커밋을 같은 브랜치에 push합니다. PR 페이지의 충돌 표시가 사라집니다.
main에 git push --force를 하지 않습니다. 이미 받아 간 커밋을 지웁니다.main에 바로 push하지 않습니다. 브랜치를 엽니다.