2025-01-24학습 (branch, pull request, merge, sync, conflict)

airbus·2025년 1월 24일

프로그래머스

목록 보기
4/93

🔵 Today

  • git의 branch에 대한 개념과 명명규칙, 전략과 활용방법, 그리고 발생할 수 있는 문제해결에 대한 내용을 공부했습니다.

📘 Learned

브랜치

브랜치 (branch) :

  • 하나의 프로젝트에서 '기능개발'이나 '버그수정' 등을 할 때, 각각의 브랜치들을 독립적으로 진행되어, 다른 브렌치에 영향을 주지 않습니다.
  • 작업이 완료된 브랜치들은 merge(병합)과정을 통해 main브랜치로 병합됩니다
독립적 / 안전성 / 동시가능

브랜치 명명 규칙

  • 메인 브렌치 : v n.n
    ex) v1.0   v1.2   v3.7

  • 기능 개발 : feature/____
    ex) feature/login   feature/select-product

  • 출시 준비 : release-n.n
    ex) release1.4   release-2.6

  • 긴급 수정 : hotfix-n.n.n
    ex) hotfix-1.2.0   hotfix-5.0.3

*출시 = 배포

브랜치 전략

  • fast-forward :
    ex) main branch에서 feature/login branch를 생성한 시점부터
    main branch에는 아무런 추가 구현을 진행하지 않고
    feature/login branch에서만 추가 구현 한 뒤
    feature/login branch와 main branch를 병합하는 전략입니다.

  • 3-ways :
    ex) main branch에서 feature/select-product를 생성한 시점부터
    main branch도 추가 구현을 하고
    feature/select-product branch도 추가 구현을 한 뒤
    feature/select-product branch와 main branch가 서로 비교하여 바뀐 것을 정리하여 합치는 전략입니다.

    일반적으로 가장 많이 사용하는 전략이며, fast-forward 전략 방식이 포함되어 있습니다.
*브랜치 전략 = '깃 플로우' 라고도 한다

GitHub에 branch 생성하고 Git Branch 복제하기

pull request

PR (pull request) : 병합 요청
1. git branch로 현재 생성된 브랜치들과 위치를 확인합니다. (feature/login)
2. git branch -r를 입력하여 원격저장소에 존재하는 브랜치들을 확인합니다.
3. git push origin feature/login을 입력하여 feature/login branch를 원격저장소별칭(origin)의 브랜치에 추가합니다.

merge

  1. pull request과정을 통해 GitHub Repository Branch목록에서 feature/login branch가 추가된 것을 확인할 수 있습니다.
  2. 'compare & pull request'을 누르거나 'Contribute'버튼을 통해 pull request 페이지를 확인할 수 있습니다.
  3. 병합 가능 여부, 비교할 브랜치 등을 확인이 가능합니다.

  4. merge commit의 제목과 branch에서의 작업내역을 작성할 수 있습니다. (md 지원)
  5. 작성 후 Create pull request로 요청을 생성하고 Merge pull request 버튼으로 완료할 수 있습니다.
  6. GitHub에서 merge 할 때도 commit이 일어나고, merge commit 이라고 합니다. (merge 이후 해당 branch는 삭제하는게 좋습니다)

동기화

  • 위에서의 과정을 통해 GitHub에는 main 브랜치만이 존재합니다.
  • 로컬저장소에서 git branch -r를 입력하면 main, feature/login 브랜치를 확인할 수 있습니다. (원격저장소에 존재하는 브랜치 확인)
  • 로컬저장소에서 git branch를 입력하면 main, feature/login, feature/select-product 브랜치가 존재하는 것을 볼 수 있습니다.
    • 로컬저장소 branch 위치가 feature/login인 것을 확인합니다
    • git pull origin feature/login 을 입력하여 가져오기가 되는지 확인합니다. (실패)
    • git fetch -p를 입력하여 동기화 시켜줍니다.->git branch -r로 feature/login을 확인 할 수 없습니다. (정리됨)
    • git checkout main으로 이동한 다음 git branch -D feature/login을 입력하여 로컬저장소에서도 삭제해줍니다.

    • 삭제 경고문이 나옵니다. -> git log에 merge commit이 없습니다. (GitHub에서만 진행됨)
    • git pull origin main으로 불러와주면 merge commit을 확인이 가능합니다.

GitHub에서 merge → (동기화) git fetch -p → (이동) git checkout main → (커밋로그) git pull origin main → (삭제) git branch -d ____

pull과 fetch의 차이 : fetch는 원격저장소의 변경 사항을 가져오기만 합니다. (병합x) / pull은 원격저장소의 변경 사항을 가져오고 병합까지 이루어집니다. (영향이 있음)

충돌 해결하기


  • 로컬저장소1, 로컬저장소2이 같은파일에서 각각 feature/1, feature/2 PR을 전송하여 충돌이 일어날경우
  • GitHub에서 main 브랜치와 feature/1 을 병합한 이후 feature/2와 merge를 resolve conflicts에서 수동으로 비교하여 해결합니다.

브랜치 주의사항

브랜치를 만든다고해서 바로 병렬로 되는것이 아니라 commit을 해주어야 합니다.
login branch에서 열심히 개발하고, select-product branch에서 commit 하면 날라갑니다.
항상 위치를 정확히 확인하고 commit 합니다. (commit을 친 순간 롤백(되돌리기)이 안됩니다.)

🔍 branch 관련 명령어 정리

명령어설명
git branch생성되어 있는 브랜치 확인이 가능합니다.
git branch (브랜치명)(브랜치명)의 branch를 생성할 수 있습니다.
git checkout (브랜치명)(브랜치명)의 branch로 이동 합니다.
git checkout -이전에 있었던 branch로 이동합니다.
git branch -r원격저장소에 있는 브랜치들을 확인이 가능합니다.
git fetch원격저장소의 최신 상태를 로컬저장소로 가져옵니다.
git fetch -p원격저장소에서 삭제된 브랜치를 로컬에서 정리합니다.
git checkout -t (origin/feature/1)원격저장소에 있는 브랜치를 추적합니다.
원격저장소의 브랜치를 로컬에 새로운 브랜치로 생성합니다.
git checkout -t : 에서 t는 track이며 추적을 의미합니다. / push 혹은 pull 을 사용할 때마다 원격 브랜치를 명시할 필요 없이 자동으로 연결된 원격 브랜치와 동기화 됩니다. git push, git pull만 입력

실습

<깃 브랜치 생성>

  • git branch로 main branch만 있음을 확인
  • git branch feature/login, git branch feature/select-product로 브랜치를 생성
  • git branch로 확인하면 main, feature/login, feature/select-product 3개의 브랜치 확인가능 합니다.

<login 브랜치에서의 login 작성했지만 select/product 브렌치에서는 적혀있지 않은 것을 확인>

<login과 select/product의 깃 히스토리>


영향을 주고있지 않음을 확인 가능합니다. = 병렬개발이 가능합니다.


<깃에만 있는 feature/login브랜치를 깃허브로 추가 >

<Compare & pull request와 Contribute 두군데서 pr을 확인가능합니다.>

<md로 pr작성>

<merge 완료후 branch 삭제>

<commit에서도 확인가능>

<merge이후 삭제했지만 로컬에는 남아있는 브랜치들>

<git fetch -p로 동기화>

<로컬저장소에서도 삭제된 브랜치>

<내용이 다른 PR>

<main과 feature/1을 1차로 merge>

<2차로 feature/2를 merge하려는데 자동결합이 불가>

<Resolve conflicts로 비교진행>

<무엇을 남길지 결정>

<Commit merge로 수정 마침>

<merge가 이뤄진 모습>

<GitHub에서도 브랜치 삭제 & 로컬저장소에서도 fetch해서 동기화, pull해서 commit로그 가져온 후, 남은 브랜치 제거 >


learned : 협업을 위해 git에서 branch를 사용하여 하나의 프로젝트에서 독립적으로 개발을 할 수 있는지 배웠습니다.
liked : 공유이외에도 분산해서 개발을 할 수 있다는 방법을 배울 수 있어서 많은 도움이 될 것 같습니다.
lacked : 초반에 작업중인 브랜치 확인을 실수를 하고 커밋하여 다시 해야하는 상황이 있었습니다.
longed for : 지금까지 배운 git에 대한 자료들을 다시 정리하며, 자연스럽게 사용할 수 있도록 보충하려고합니다.

0개의 댓글