개인과제

개인과제 : [git & github] 온보딩 주차 - 협업을 위한 git 활용 PART.2

정이뿡뿡 2026. 6. 12. 11:38

과제 소개

 

Git을 이용하여 빠르고 효율적인 협업방법을 배워보자!

 

협업을 위한 git 활용은

Git의 기본 개념부터 버전관리, 브랜치 전략, 1인 PR 워크플로우까지 실무에서 필요한 과정을 익히는 강의입니다.

이 강의를 수강하고 과제를 수행하면 앞으로의 프로젝트에서도 충돌 해결, 브랜치 전략 수립, PR 기반 셀프 리뷰 등 Git을 활용한 완전한 개발 워크플로우를 수행할 수 있습니다.


필수요소 PART.1 ☞ https://jungei0709.tistory.com/16
도전요소 PART.2 

과제 목차

🔥도전요소 (PART2.)

1.PR 설명 더 자세히 작성하기

평가요소 기준
전달력 및 논리성  [무엇을, 왜, 어디를, 리뷰 포인트] 필수 4가지 항목이 논리적으로 작성되어 리뷰어가 코드를 보기 전 흐름을 파악할 수 있는가?
• 단순히 나열하는 형식이 아니라, 본인의 고민 흔적이나 의도가 구체적으로 기술되었는가?
리뷰어 편의성 • 변경된 파일의 핵심 diff 일부나 렌더링 결과 등을 첨부하여 리뷰어가 작업물을 즉각적으로 확인할 수 있게 배려했는가?
• 셀프 체크리스트를 활용하여 본인의 작업이 사전 규칙에 어긋나지 않았음을 스스로 증명했는가?

 

2."앗, 방금 커밋 실수!" (commit --amend로 수정하기)

평가요소 기준
명령어 사용 정확성 • amend 전 빠뜨린 파일을 git add로 staging에 올렸는가?
• git commit --amend 실행 후 새 커밋이 생기지 않고 기존 커밋이 갱신됐는지 git log로 검증했는가?
사용 시점 이해도 • amend를 push 전 로컬 커밋에만 적용했는가?
• 이미 push된 커밋에 amend가 위험한 이유(강제 push 필요, 원격 히스토리 불일치)를 회고/주석에 기록했는가?

 

3. 의도적으로 충돌 만들고 해결하기 (Merge Conflict)

평가요소 기준
충돌 재현 • 두 개 이상의 feature 브랜치에서 같은 파일의 같은 라인을 수정해 의도적으로 Merge Conflict를 발생시키고, PR에서 충돌 상태를 확인했는가?
• 충돌이 발생하는 조건을 이해하고 재현 과정을 논리적으로 설계했는가?
충돌 해결 수행 • git pull origin main 또는 git merge 후 <<<<<<<, =======, >>>>>>> 마커를 모두 제거하고 코드를 정상적으로 병합했는가?
• 해결 커밋을 남기고 PR을 완료하여 main으로 Merge했는가?
회고 기록 • PR 본문 또는 README에 "어떤 충돌이 왜 발생했는지, 어떤 기준으로 해결했는지"가 기록되어 있는가?

 

과제 목표

  • 이번 과제는 의도적으로 수행 시간이 짧게 설계된 **‘타임어택 과제’**입니다.
  • 이는 완벽한 결과물을 만드는 것이 아니라, 제한된 시간 속에서 협업 워크플로우를 혼자서 한 번이라도 끝까지 겪어보는 경험에 목적이 있습니다.
  • 시간에 쫓기는 상황에서실제 현업과 가장 유사한 1인 협업 워크플로우를 경험해 보세요.

저는 복잡한걸 선호하지 않아 GitHub Desktop 과 IntelliJ 를 사용하여 과제를 진행 하였습니다 :)

과제 내용 

1. PR 설명 더 자세히 작성하기

 

2. "앗, 방금 커밋 실수!" (commit --amend로 수정하기)

🏃 1단계: 깨끗한 환경에서 연습용 브랜치 만들기

PART.1 에 작업했던 기존 작업과 꼬이지 않도록 새 브랜치를 하나 파서 안전하게 연습했습니다.

git switch main
git pull origin main
git switch -c feature/amend-test

👹 2단계: 일부러 '실수 커밋' 만들기 (파일 빼먹기)

members 폴더 안에 파일 2개를 만들고, 1개만 실수로 빼먹고 커밋해 보겠습니다.

  1. 인텔리제이에서 members 폴더 안에 test1.md와 test2.md 파일 2개를 만듭니다. 
  2. 터미널에 test1.md만 장바구니에 담고 커밋을 합니다. (test2.md를 실수로 빼먹은 상황 재현!)
git add members/test1.md
git commit -m "실수커밋을위한테스트용"

✅ 3단계: amend로 실수 만회하기

"아 맞다! test2.md 빼먹었다!"를 깨달은 상황입니다. 새 커밋을 만들지 않고 방금 만든 커밋에 흡수시켜 보겠습니다.

  1. 빼먹었던 test2.md 파일을 장바구니에 마저 담습니다.
    git add members/test2.md
    
  2. 여기서 핵심 명령어! --amend 옵션을 주어 커밋 메시지 수정과 파일 흡수를 동시에 진행합니다.
    git commit --amend -m "feat: 테스트 파일 1과 2 최종 추가"

📌 4단계: 진짜 덮어써졌는지 확인하기

커밋이 2개가 되었는지, 아니면 기존 1개에 깔끔하게 합쳐졌는지 확인해 봐야 합니다.

git log --oneline

💡 로그를 보았을 때 "실수커밋을위한테스트용"은 사라지고,
feat: 테스트 파일 1과 2 최종 추가라는 단 1개의 커밋만 남아있다면 성공입니다!

3. 의도적으로 충돌 만들고 해결하기 (Merge Conflict)

일단 과제를 진행하기전 의도적으로 충돌을 왜 만들까? 하는 생각안드시나요?
저는 이해가 안되서 한참을 생각했는데요..ㅎ..

 

git 은 공유가 된다는 장점만큼 협업을 하다보면

나랑 동료가 같은 파일의 같은 줄을 동시에 수정하는 경우가 생길수있습니다.


이때 컴퓨터에선 "어라? 누구 코드를 살려야 하지?" 하고 멈춰 서게 되는데 이때 
컴퓨터에게 이거대신 저걸로 해줘! 라고 명령을 하며 해결하는 과정을 지금 실습해보는거라 생각하시면 됩니다.😊

 

🥊 1단계: 싸움터(기준 파일) 만들기

두 브랜치가 싸우려면 먼저 기준이 되는 파일이 main에 있어야 합니다.

 

1. 인텔리제이 터미널에서 main 브랜치로 이동합니다.

git switch main
git pull origin main

 

2. 충돌테스트를 할 브랜치를 만들어준후, 충돌시킬선수(md) 파일을 생성해줍니다.

$ git switch -c Collisiontest //충돌테스트를 할 브랜치생성
$ touch members/conflict.md //충돌하게 될 markdown.

 

3. 생성이 되면 , 테스트 문구를 적어주세요~!

4. 이 기준의 파일을 커밋하고 깃허브에 올립니다.

git add members/conflict.md
git commit -m "docs: 충돌 테스트용 기준 파일 생성"
git push origin main

🧨 2단계: 첫 번째 브랜치의 공격 (피자 ➡️ 감자볶음)

  1. 첫 번째 브랜치 feature/conflict-a를 만들고 이동합니다.
    git switch -c feature/conflict-a

     

  2. members/conflict.md 파일을 열고, 내용을 아래와 같이 수정하고 저장합니다.
    오늘 저녁 메뉴는 감자볶음이다.

     

  3. 커밋 후 깃허브로 푸시합니다.
    git commit -m "feat: 저녁 메뉴를 감자볶음으로 변경"
    git push origin feature/conflict-a
    git push origin feature/conflict-a
  4. [중요!] GitHub 웹사이트로 가서 이 feature/conflict-a 브랜치를 main 브랜치로 Merge(합치기) 완료 시켜버립니다.
    (이제 원격 main인텔리제이는 감자볶음이 되었습니다.)

💥 4단계: PR에서 충돌 확인하기 (평가 필수 항목)

  1. GitHub 웹사이트로 가서 방금 올린 feature/conflict-b 브랜치의 Pull Request를 생성합니다.
  2. 생성하고 나면 초록색 Merge 버튼 대신 엑스(X) 표시와 함께 "This branch has conflicts that must be resolved" 라는 빨간 에러 메시지가 뜰 겁니다.
    • 과제 조건인 'PR에서 충돌 상태를 확인했는가?'를 달성했습니다. 이 화면을 캡처해 두시면 좋습니다!

🛠️ 5단계: 내 컴퓨터에서 충돌 해결하기

인터넷에서는 합칠 수 없으니, 내 컴퓨터로 원격의 main(제육볶음)을 끌고 와서 싸움을 붙이고 수습해야 합니다. 인텔리제이 터미널로 옵니다.

  1. main 브랜치를 최신(제육) 상태로 업데이트합니다.
  2. Bash
     
    git switch main
    git pull origin main
    
  3. 다시 나의 피자 브랜치(conflict-b)로 돌아옵니다.
  4. Bash
     
    git switch feature/conflict-b
    
  5. 최신 main을 내 브랜치로 합치라고 명령합니다.
  6. Bash
     
    git merge main
    
  7. 펑! 💥 터미널에 CONFLICT 경고가 뜹니다. 인텔리제이에서 members/conflict-md 파일을 열어보면 아래처럼 기괴한 기호들이 생겨있을 겁니다.
Plaintext
 
<<<<<<< HEAD
오늘 저녁 메뉴는 피자다.
=======
오늘 저녁 메뉴는 제육볶음이다.
>>>>>>> main
  • <<<<<<< HEAD 부터 ======= 까지: 현재 내 브랜치(conflict-b)가 쓴 코드
  • ======= 부터 >>>>>>> main 까지: 원격 main에서 가져온 코드
  1. 해결하기: 저 지저분한 기호들(<<<<<<<, =======, >>>>>>>)을 마우스로 드래그해서 전부 지워버리세요. 그리고 최종적으로 남길 정답만 남겨줍니다. (예: 탕평책으로 둘 다 먹기로 결정!)
  2. Plaintext
     
    오늘 저녁 메뉴는 제육볶음과 피자다.
    

🚀 6단계: 마무리 커밋 및 푸시

충돌을 해결했으니 잘 해결했다고 기재하고 마무리를 짓습니다.

Bash
 
git add members/conflict.md
git commit -m "fix: 제육과 피자 메뉴 충돌 해결 및 병합"
git push origin feature/conflict-b

이제 다시 GitHub PR 페이지로 가보면 빨간 경고가 사라지고 초록색 Merge 버튼이 예쁘게 활성화되어 있을 겁니다. 버튼을 눌러 최종 머지하면 끝입니다!

📝 과제 제출 전 꿀팁 (회고 기록)

마지막 평가 항목인 "어떤 충돌이 왜 발생했고, 어떤 기준으로 해결했는지 기록"하기 위해, feature/conflict-b PR 본문이나 README.md에 아래 내용을 적어주세요.

[충돌 발생 및 해결 회고]

  • 발생 이유: feature/conflict-a 브랜치와 feature/conflict-b 브랜치에서 members/conflict.md 파일의 첫 번째 줄을 각각 제육볶음과 피자로 동시에 수정하여 머지 충돌이 발생했습니다.
  • 해결 기준: 두 의견을 모두 수렴하여 제육볶음과 피자다로 코드를 수동 병합하고 Git 충돌 마커 기호들을 모두 제거하여 정상 해결했습니다.