[한화시스템 BEYOND SW캠프 7기] #15. Git / Github(2)

아로롱·2024년 5월 30일

BEYOND SW CAMP 7

목록 보기
15/30
post-thumbnail

저번 게시글에 이어 Git / Github 에 대해 정리해보려 한다.
특히 git fetch !
수업 마지막에 빠르게 실습하고 넘어갔는데
오늘 다시 만나보니.. 쉽지 않은 친구였다.... 친구가 많은 친구였다...


🔀 Git Pull

origin의 수정(변경)사항을 local로의 다운로드.
git pull (origin main) ⇒ main 에서 생략 시 현재 브랜치로 가져옴

  • 원격 브랜치의 변경사항(commit 사항)을 다운로드 하는 것.
  • git pull 은 working directory까지 반영.
  • 별도 브랜치명 명시가 없다면 checkout된 branch에서 pull
  • 가지고 오면서 병합(merge)까지 하는 것 !

🥞 Git Fetch Case

Case 1. 충돌 상황은 아님 !

origin 과 local repository 의 commit 이력이 같은 상황,
local 의 working directory 에서 수정 이후 git pull

  • commit 이력은 동일하므로 git pull 해도 변화 발생 없음.
  • 수정 후 commit > push 하거나 local 작업 사항을 취소해야 하는 상황.

Case 2. 충돌 상황 ❌ / fast forward

origin 에만 commit 이력의 추가가 발생 → 충돌상황X
git pull 또는 git pull origin 브랜치명 을 통해 update사항 download 후 반영
⇒ head(현재 체크아웃된 브랜치의 가장 최신커밋을 의미)만 이동하는 이와 같은 상황을 fast forward라 부름

⌨️ 실습

test1.txt 파일을 origin 에서 수정 후 local에서 똑같이 test1.txt 를 pull 했을 때

fast-forward 가 조회됨을 알 수 있다 !

Case 3. 충돌 상황 ❌ / merge commit

origin 에 commit 이력의 추가가 발생,
local 에 별도 commit 이력 발생. 그러나 둘이 같은 파일이 아닌 경우 → 충돌상황X

⌨️ 실습

origin > 1.txt / local > 2.txt 커밋 했을 때
바로 pull 해도 되지만, 확인해보고 싶을 때 fetch 후 diff 로 main과 main/origin 비교 후 merge 하면 됨 !

→ git push origin master 하면 오류 !


→ git fetch ⇒ git diff master origin/master 로 비교 !

  • 최종 git pull 하면 충돌없이 작동하는 것을 확인 !
  • pull 했을 때 뜨는 vi 모드 ⇒ 메세지 작성하세요 ~
  • git pull시 문제 없이 실행되고, fast forward가 아닌 merge커밋 발생.
    • F 라는 새로운 머지 커밋이 생기는 것 ! (E+D = F) 이후 재push 필요 !

Case 4. 충돌 상황 ⭕️

origin 에 commit 이력의 추가가 발생,
local working directory 또는 staging 에서 작업 후 git pull → 충돌 발생
fetch까진 성공하였으나 local의 commit 이력이 존재하지 않아 merge 할 수 있는 병합파일이 생성되지 않음.

⌨️ 실습

git pull 후 에러메세지 확인 → 1. commit 2.stash(임시 보관) 중 선택 !

방법 1. 작업 사항 복사해두고, 취소한 다음 git pull → 작업 사항 다시 추가해서 add commit push

방법 2. 기존 수정본을 backup을 만들어두고, 로컬 작업을 취소 → git pull origin main 후 복사본을 참고하여 수정 작업. 백업을 위해 git stash 활용 가능.

Case 5.충돌 상황 ⭕️ / 가장 빈번한 상황

origin 에 commit 이력의 추가가 발생,
local 에 별도 commit 생성 후 → git push origin main시에 충돌 발생.

⌨️ 실습

방법 1.
local commit 발생, origin commit 발생 (같은 파일에서)
git push → 충돌 실패 → git pull → auto merge failed → 병합 파일 만들어줌 → 수정 후 add commit merge


방법 2.
원격 commit 발생, 로컬 workspace 작업 (저장만)
git pull → 에러 → add commit merge → 병합 파일 생성 → 충돌 해결하세요( <<< >>>)

git fetch → git diff → git merge origin/main (또는 git pull) → working directory에서 충돌 해결 후 다시 add, commit, push
위가 local 변경, 아래가 origin 변경 ! 수신 변경 사항 수락 누르면 origin 변경 사항이 자동 반영


🌲 branch


브랜치란 버전과는 다르게 개발의 경로를 의미

  • 브랜치 작업이란 각 분기점에 새로운 branch를 생성하여 작업하는 것을 의미.
  • 실제 현업에선 dev, staging, main, master등 여러 브랜치로 관리.
    • feature/author_register
      • 새로운 기능을 추가할 때 사용
      • 가장 많이 사용
    • bugfix/author_register
      • 버그를 수정할 때 사용.
    • hotfix/author_register
      • 긴급한 버그 수정을 위한 브랜치
    • 모든 브랜치 이력 push
      • git push --all : 모든 브랜치의 커밋이력 push

⌨️ 실습

  • 각각의 local feature branch에서 작업 후 origin/feature로 push
  • Pull Request를 통해 dev까지 merge

    dev에서 main으로 최종 merge하는 과정이 현업에서의 브랜치 관리 !

📌 today

branch 가 많아질수록 내가 건드리는 모든 것들이 오류가 되는 실습이었다.
질문 세례를 감당해준 짝꿍 은지님에게 무한 감사를..🥲
모든 걸 기억할수는 없겠지만, 비슷한 상황이 왔을 때 검색어 정도는 떠올릴 수 있도록
여러 번 실습하고 복습해야겠다 !

profile
Dilige, et fac quod vis

4개의 댓글

comment-user-thumbnail
2024년 6월 1일

와.. 자극받고 갑니다!!
헬스체크 깃레포도 보고갑니다! 대단..

1개의 답글