Git

2강 — 같이 쓰는 Git

슬라이드 보는 법

→ / Space다음으로
이전으로
↓ / ↑같은 주제 안에서 단계 이동
O전체 슬라이드 한눈에 보기
F전체화면

아래쪽 화살표가 보이면 그 주제는 단계별로 이어집니다

1강 복습

git add기록할 것 고르기
git commit -m기록하기
git log --oneline기록 보기

오늘은 여럿이 같이 씁니다

오늘 끝나면 할 수 있는 것

  • 본줄기를 건드리지 않고 따로 작업한다
  • 작업한 것을 합친다
  • 충돌을 푼다
  • GitHub에 올리고 받아온다
  • Pull Request로 리뷰받는다

오늘 배울 것

  • 7. 브랜치
  • 8. 합치기
  • 9. 충돌 해결
  • 10. GitHub
  • 11. Pull Request
  • 12. 협업 흐름

7. 브랜치

본줄기를 건드리지 않고 작업하려면

7. 브랜치 문제

            
              # main에서 바로 작업하면
            
          
만들다 만 코드가 섞인다
다른 사람 작업과 부딪힌다

여러 명이 같은 파일을 동시에 고치면?

7. 브랜치 만들기

            
              git switch -c login
            
          
* d1e2f3g (HEAD -> login) / * a1b2c3d (main) 헤더 수정 * e4f5g6h 첫 화면

7. 브랜치 명령

git branch브랜치 목록
git switch -c 이름만들고 옮기기
git switch 이름옮기기
git branch -d 이름지우기

7. 정리

  • 기능 하나에 브랜치 하나
  • 이름은 login, fix-header 처럼 짧고 분명하게
  • main 은 항상 동작하는 상태로 둔다

8. 합치기

작업한 것을 본줄기에 넣으려면

8. 합치기 merge

            
              git switch main
              git merge login
            
          
* m1n2o3p (HEAD -> main) Merge branch 'login' |\ | * d1e2f3g (login) 로그인 추가 |/ * a1b2c3d 헤더 수정

8. 합치기 정리

            
              git branch -d login
            
          
합쳤으면 지운다
기록은 main에 남아 있다

9. 충돌 해결

같은 줄을 서로 고쳤을 때

9. 충돌 해결 발생

            
              git merge login
            
          
CONFLICT (content): Merge conflict in index.html
Automatic merge failed;
fix conflicts and then commit.

9. 충돌 해결 표시

            
              <<<<<<< HEAD
              <h1>안녕하세요</h1>
              =======
              <h1>반갑습니다</h1>
              >>>>>>> login
            
          
윗쪽은 main
아랫쪽은 login

9. 충돌 해결 고르기

            
              <h1>반갑습니다</h1>
            
          
표시를 전부 지우고
남길 내용만 남긴다

9. 충돌 해결 마무리

            
              git add index.html
              git commit
            
          
충돌이 풀렸다

10. GitHub

기록을 인터넷에 올리려면

10. GitHub 처음 올리기

            
              git remote add origin <복사한 주소>
              git branch -M main
              git push -u origin main
            
          
origin https://github.com/id/repo.git
origin은 그 주소에 붙인 별명

10. GitHub 세 명령

git push내 기록을 올린다
git pull남의 기록을 받아온다
git clone 주소남의 저장소를 통째로 받는다

10. GitHub 거절

            
              git push
            
          
! [rejected] main -> main (fetch first)
Updates were rejected because
the remote contains work

남이 먼저 올린 게 있으면 어떻게 될까요?

10. GitHub 해결

            
              git pull
              git push
            
          
받아서 합친 뒤에 올린다

11. Pull Request

합치기 전에 리뷰받으려면

11. Pull Request 흐름

  1. 브랜치를 만들어 작업하고 커밋
  2. git push -u origin 브랜치이름
  3. GitHub에서 Pull Request 열기
  4. 리뷰받고 고치기
  5. Merge 버튼 누르기

11. 정리

  • 제목에 무엇을 했는지 적는다
  • 본문에 왜 그렇게 했는지 적는다
  • 작게 올린다. 파일 50개짜리 PR은 아무도 못 본다

12. 협업 흐름

실제로는 이렇게 돌아갑니다

12. 협업 흐름

  1. git pull — 최신 받기
  2. git switch -c 기능 — 브랜치 만들기
  3. 작업하고 add / commit
  4. git push -u origin 기능
  5. PR 열고 리뷰받고 merge
  6. git switch maingit pull

12. 하지 말 것

  • main 에서 직접 작업하지 않는다
  • 이미 push한 커밋을 reset 하지 않는다
  • push --force 는 남의 작업을 지운다
  • 작업 시작 전에 항상 git pull

정리

Git 2강 전체

한눈에

git switch -c브랜치 만들고 옮기기
git merge합치기
충돌표시를 지우고 고른 뒤 add · commit
git push / pull올리고 받기
git clone통째로 받기
Pull Request합치기 전에 리뷰

실습

둘씩 짝을 지어서

실습 과제

  1. 한 명이 저장소를 만들고 상대를 collaborator로 추가
  2. 각자 브랜치를 만들어 같은 파일의 같은 줄을 고치기
  3. 한 명이 먼저 merge, 다른 한 명이 충돌 해결
  4. PR을 열고 서로 리뷰 남기기

충돌을 일부러 내보는 것이 오늘의 핵심입니다

더 볼 것

수고하셨습니다