(git & GitHub) Manage project mode transitions

Mirrer·2022년 5월 6일
0

git & GitHub

목록 보기
3/15
post-thumbnail

프로젝트의 여러 모드를 쉽게 관리

branch를 이용하여 프로젝트 변경사항 관리

branch는 분기된 가지(다른 차원)를 뜻하며 프로젝트를 하나 이상의 모습으로 관리해야 할 때 사용된다.

branch는 크게 2가지의 용도로 사용된다.

  • 여러 작업들이 각각 독립되어 진행될 때 사용 (실배포용, 테스트서버용, 새로운 시도용)

  • 각각의 차원에서 작업한 뒤 확정된 것을 메인 차원에 통합할 때 사용 (신기능 1, 신기능 2, 코드개선, 긴급수정...등등)

branch는 이 모든 것을 하나의 프로젝트 폴더에서 진행이 가능하게 한다.


branch 생성, 이동, 삭제

  • add-coach란 이름의 브랜치 생성
git branch add-coach
  • branch 목록 확인
git branch
  • add-coach branch이동
git switch add-coach

  • new-teams branch 생성과 동시에 이동
git switch -c new-teams

  • to-delete branch 추가한 뒤 to-erasebranch 이름 변경
git branch -m (기존 브랜치명) (새 브랜치명)

  • to-erase branch삭제
git branch -d (삭제할 브랜치명)


branch 병합

서로 다른 브랜치를 합치는 방식에는 크게 2가지가 있다.

  • merge : 두 branch를 한 커밋에 이어붙이므로 branch 사용내역을 남길 필요가 있을 때 적합한 방식

  • rebase : branch를 다른 branch에 이어붙이므로 한 줄로 깔끔히 정리된 내역을 유지하기 원할 때 적합 (이미 팀원과 공유된 커밋들에 대해서는 사용하지 않는 것이 좋다.)

현재 branch상황을 소스트리(GUI)로 확인해보면 다음과 같다.


merge

add-coach 브랜치를 main 브랜치로 merge하면 결과는 다음과 같다.

단 이 때 main 브랜치로 이동한 뒤에 작업을 수행해야 한다.

git merge add-coach

위 코드의 결과를 소스트리(GUI)로 확인해보면 다음과 같다.

mergebranch 사용내역을 남기기 때문에 병합된 브랜치는 삭제한다.

git branch -d add-coach

또한 merge도 하나의 커밋이기 때문에 reset을 사용하면 merge하기 전 해당 브랜치의 마지막 시점으로 되돌아갈 수 있다.


rebase

rebasemerge와는 반대로 이동시킬 대상의 브랜치로 이동한뒤 작업을 수행한다.

  • new-teams 브랜치로 이동
git switch new-teams
  • new-teams 브랜치, main 브랜치 병합
git rebase main

위 코드의 결과를 소스트리(GUI)로 확인해보면 다음과 같다.

소스트리에서 상태 확인해보면 main 브랜치가 뒤쳐져 있는 것을 확인할 수 있다.

그래서 main 브랜치로 이동 후 아래 명령어로 new-teams의 시점으로 fast-forward 하는 추가 작업이 필요하다.

git merge new-teams


브랜치 간 충돌

같은 위치 파일에 대해 각각의 브랜치들이 다른 내용을 입력하면 브랜치 간 충돌이 발생한다.


merge 충돌

main브랜치와 변경항목이 겹치는 conflict-1, conflict-2브랜치를 생성한 뒤 소스트리(GUI)로 확인해보면 다음과 같다.

여기서 main 브랜치로 이동하여 conflict-1 브랜치와 merge를 하면 다음과 같은 오류가 발생한다.

위의 결과는 VS Code의 기능으로 현재 브랜치(main)와 merge할 브랜치(conflict-1)의 공통 변경값이 충돌하여 발생했다.

만약 충돌한 에러의 해결이 당장 가능하다면 충돌 부분을 수정하여 git add ., git commit으로 병합한다.

하지만 충돌한 에러의 해결이 당장 어려울 경우에는 다음과 같이 merge를 중단한다.

git merge --abort

rebase 충돌

merge 충돌을 해결한 뒤 소스트리(GUI)로 확인해보면 다음과 같다.

위 결과 main 브랜치와 conflict-2 브랜치의 2개의 작업은 충돌을 발생시킨다

conflict-2로 이동한 뒤 mainrebase를 하면 결과는 다음과 같다.

git status를 통해 오류 메시지를 확인할 수 있다.

이처럼 rebase 충돌은 merge 충돌과 다르게 브랜치안의 모든 커밋마다 충돌이 발생하므로 차례대로 해결해야한다.

이 때 만약 충돌 해결이 당장 가능하다면 충돌 부분을 수정하여 git add ., git rebase --continue단계적으로 해결한다.

git add .
git rebase --continue

하지만 충돌한 에러의 해결이 당장 어려울 경우에는 다음과 같이 rebase를 중단한다.

git rebase --abort

참고 자료

Book - Git
깃 끝판왕 강좌 제대로 파는 Git & GitHub - 얄팍한 코딩사전 Youtube

profile
memories Of A front-end web developer

0개의 댓글