작성
·
17
0
Q1. 브랜치 원리
5세션 12에서 “main은 복사되는 게 아니라 동일한 커밋을 여러 브랜치가 담고 있다”는 설명이 직관적으로 잘 그려지지 않아요. (복사가 아니면 정확히 어떤 메커니즘일까?)
Q2. 머지와 컨플릭트
fast-forward 구조(예시 이미지)에서 빨간색 영역의 코드는 테스트 도중에 수정이 가능한건가요? 수정이 가능해서 수정 했다면 머지할 때 컨플릭트 가 나는거 아닌가요..? 왜 헷갈리냐면 강의에서 fast-forward 머지에서는 각각의 diff가 없기 때문에 conflict가 안 난다고 햇는데, 그럼 이런 구조는 fast-forward가 아닌 상황인건가요..?
Q3. HEAD의 부모 커밋
아래 예시이미지에서 HEAD가 가리키는 커밋(main : Merge branch 'test')의 부모 커밋은 test add blue to rect와 add green to rect 이렇게 두 개가 맞는지 확인을 하구싶어요.
답변 3
0
0
안녕하세요, 정이경님 😀
Q1. 브랜치는 커밋을 가리키는 포인터입니다. 여러 브랜치가 동일한 커밋을 가리킬 수 있습니다. 그래서 여러 브랜치가 동일한 커밋을 담고 있다고 표현한 겁니다. 이에 대한 내용은 "브랜치 실제 모양 #HEAD "회차를 참고해주세요!
Q2. 직관적인 그림 감사드립니다. 화살표로 가리키는 부분에서 "코드를 새롭게 수정 + 커밋을 새롭게 만들지는 않고," 머지하는 상황일까요?
Q3. 네 맞습니다. HEAD가 가리키는 커밋(main : Merge branch 'test')의 부모 커밋은 test add blue to rect와 add green to rect 두 개입니다.
0
안녕하세요, 인프런 AI 인턴입니다. 정이경님, Git의 브랜치와 머지, 그리고 커밋 관련 원리에 대해 질문 주셨네요.
Git에서 브랜치는 단순히 커밋을 가리키는 포인터입니다. 즉, 실제로 브랜치를 생성할 때, Git은 새로운 스냅샷을 복사하는 것이 아니라, 특정 커밋을 가리키는 포인터만 만드는 것입니다. 각 브랜치가 동일한 커밋을 가리키고 있기 때문에 동일한 내용을 공유하지만, 새로운 커밋이 추가될 때는 그 브랜치의 포인터가 최신 커밋을 가리키게 되는 방식입니다.
Fast-forward는 대상 브랜치의 포인터만을 이동시킬 수 있는 경우를 말합니다. 이는 중간에 변경된 커밋들이 없이 브랜치 간 변경이 선형적인 경우에 가능합니다. 따라서 fast-forward는 기본적으로 컨플릭트가 발생하지 않습니다. 만약 테스트 도중 해당 영역에서 수정이 발생했다면, 이는 fast-forward가 아닌 일반 머지 상황에 가까워질 것이고, 이 경우엔 컨플릭트가 발생할 여지가 있습니다.
Git에서 병합 커밋은 두 개 이상의 부모 커밋을 가질 수 있습니다. 예시 이미지에서 “main: Merge branch ‘test’” 커밋이 있다면, 이 병합 커밋은 ‘test’ 브랜치의 최신 커밋과 ‘main’ 브랜치의 최신 커밋을 병합하여 생성된 것이므로 두 개의 부모 커밋(“add blue to rect”와 “add green to rect”)을 가질 가능성이 있습니다.
질문에 대한 이해를 돕기 위해 유사한 예시와 개념을 다룬 링크를 제공하려고 합니다. 추가적으로 살펴보고 싶으시다면 다음 링크를 참고해 주세요:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
네, 그러면 사실 3-way 머지하게 되는 상태가 됩니다. 🤣🤣🤣