[기술정리] Git과 형상 관리 - rebase 이용한 merge 전략

이나겸's avatar
Nov 26, 2024
[기술정리] Git과 형상 관리 - rebase 이용한 merge 전략
💡

VCS (Version Control System)

소스 코드, 파일의 변화를 추적하고 관리하는 시스템 (형상 관리 도구)
변경 이력을 관리하고, 여러 버전을 저장하여 필요할 때 특정 버전으로 복원하거나 여러 버전 간 차이를 확인 할 수 있게 해줌
  • CVCS (중앙 집중형 관리) : 중앙 서버에서 모든 파일과 버전 관리
    • ex) SVN (Apache Subversion)
  • DVCS (분산형 관리) : 각 개발자의 로컬 컴퓨터에 모든 파일과 변경 이력 복제됨
    • ex) Git

형상 관리의 조건과 특징

  • 불변해야함
    • 기존 데이터와 변경 데이터가 같이 남아있어야함
  • 형상 관리는 폴더로 함
    • 파일을 각각 따로 관리 하는게 아니라 폴더 통째로 관리
    • 용량과 불필요한 내용이 늘어나는 단점은 소프트 링크 활용해서 수정된 부분만 바꾸는 것으로 해결
    • commit을 하면 내용을 되돌릴 수 있어서 반드시 찾을 수 있음 (commit을 꼭 해야함)
  • 중앙 관리보다 분산 관리로 하는게 유리함
    • 대표적인게 Git (Github는 Git으로 관리하는 저장소(하드디스크))

merge(병합)

  • Fast-Forward Merge
    • 현재 브랜치가 다른 브랜치의 커밋 기록을 모두 포함하고 있을 때의 병합 방식
    • 두 브랜치 간의 공통 조상 커밋부터 병합하려는 브랜치까지의 변경 사항 그대로 반영하여 현재 브랜치의 Head(포인터)를 병합하려는 브랜치의 최신 커밋으로 이동시킴
  • Three-Way Merge
    • 두 브랜치가 각각 다른 변경 사항을 포함하고 있을 때의 병합 방식
    • 두 브랜치가 공통으로 가지는 조상 커밋, 현재 브랜치의 최신 커밋, 병합하려는 브랜치의 최신 커밋, 이렇게 세 개의 커밋을 비교하여 병합
    • Git은 공통 조상 커밋부터 양쪽 브랜치의 최신 커밋까지의 차이점을 찾아 병합하는데 충돌 발생할 수 있고 사용자가 수동으로 해결해야함
      • notion image

VS코드에서의 Git을 통한 형상 관리 실습 - Git 협업

[ Three-Way Merge를 Fast-Forward Merge로 바꿔서 병합하기 ]
  • VS코드의 터미널을 열고 기본값을 git bash로 설정
    • git에 대한 명령어 작성할 수 있음
notion image
notion image
notion image
 
  • 깃허브에 git_test_blog_v2 리포지토리 생성하고 VS코드에 열어 놓은 폴더에 리포지토리 클론
    • workspace에 clone이라는 폴더 생성해놓고 VS코드에 열어놓음
    • 터미널에 git clone 리포지토리URL 작성
    • notion image
      notion image
 
  • 터미널에서 명령어 작성해서 git 연결하고 폴더 접근
    • git init : git 연결 (열기)
    • cd 폴더명 : 폴더 접근
    • cd .. : 접근 해제하고 상위 폴더로
      • notion image
 
  • update 브랜치로 전환하고 회원 정보 수정 기능 추가
    • git checkout -b 브랜치명 : 브랜치 전환 ⇒ 브랜지 전환(checkout)을 하는데 해당 브랜치 없으면 생성(-b)하라 ⇒ 브랜치 생성할 필요없이 이미 존재하면 git checkout 브랜치명
    • nakyeom 폴더에 회원 정보 수정 기능 추가
      • notion image
        notion image
 
  • update 브랜치로 commit
    • 기능 하나 마다 commit하는게 좋음
    • 커밋 내용 앞에 feat을 붙이면 구현 완료, fix를 붙이면 수정 중의 의미
    • commit 하고 바로 push하지 않기 주의
      • notion image
 
  • master 브랜치로 전환하고 pull 하기
    • notion image
 
  • update 브랜치로 돌아와서 master 브랜치 내용 rebase한 다음 push 하기
    • git rebase 브랜치명 : 해당 브랜치 내용 rebase
    • rebase
      • master 브랜치의 최신 변경 사항을 현재 작업 중인 브랜치에 재배치
      • 이 경우 현재 작업 중인 update 브랜치의 커밋을 master 브랜치의 최신 커밋 이후로 다시 쌓도록 재구성
    • 형상 트리를 같게 맞춰놓고 push하기 위함 ⇒ Three-Way Merge를 Fast-Forward Merge로 바꾸기 위함
    • notion image
 
  • 깃허브 리포지토리에도 update 브랜치 생성된 것 확인
    • notion image
 
  • 깃허브 리포지토리에서 Pull request로 merge 요청
    • Pull request → New pull request
    • base는 master 브랜치 그대로 두고 compare에는 update 브랜치 설정 → Able to merge 상태 확인 → Create pull request
    • notion image
      notion image
      notion image
 
  • 내용 작성 → Create pull request
    • notion image
 
  • Merge pull request → Confirm merge
    • Commits와 Files changed 들어가서 코드 수정 내용 확인한 후 merge하면 됨
    • notion image
      notion image
 
  • git에서의 merge 완료 확인
    • notion image
 
  • Pull requests의 closed 들어가면 merge 내역 확인 가능
    • notion image
 
  • VS코드 돌아와서 로컬에서도 master 브랜치에 pull 해서 merge하면 완료
    • notion image
      notion image
 
 
 
Share article

Nakyeom's Study