inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

Git & GitHub, 원리부터 차근차근 - 근본깃

협업 할 때 conflict 해결하기 #github #rebase

10:41 그림이 이해가 안갑니다.

3

butterfly black

작성한 질문수 4

0

안녕하세요 강사님, 강의 잘 듣고 있습니다.


34강 - 협업할 때 conflict 해결하기 중

10:41 벤다이어그램으로 push 할 수 없음으로 말씀해주셨는데,


그림만 보면 리모트 test 브랜치의 빨초파는 로컬 test 브랜치에 있기 때문에,


결과적으로 로컬 test 브랜치가 리모트 test 브랜치를 포함하고 있는 그림이라,


push를 할 수 있는 것 아닌지 문의드립니다. (물론 실제로는 강제로 해야 되겠지만, 설명이 이해가 안가 문의 드립니다.)

git github

답변 1

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. butterfly black님, 로컬 브랜치와 리모트 브랜치의 포함 관계 및 push 가능 여부가 헷갈리셨군요.

Git에서 push 가능 여부는 단순히 “로컬 브랜치가 리모트 브랜치의 커밋을 포함하는가”만으로 판단하지 않고, 리모트 브랜치의 최신 커밋에서 이어지는 형태인지가 중요합니다.

  • 로컬 test 브랜치가 리모트 test 브랜치의 최신 커밋을 포함하고 있고, 로컬에서 새로운 커밋이 이어진 상태라면 일반적인 push가 가능합니다. 이는 fast-forward push입니다.
  • 반대로 로컬과 리모트가 서로 다른 방향으로 커밋을 가지고 있다면, 로컬 브랜치가 일부 커밋을 포함하고 있더라도 리모트 브랜치의 이력이 사라질 수 있기 때문에 일반적인 push가 거부됩니다.
  • 이 경우에는 먼저 pull 또는 fetch 후 merge/rebase로 두 이력을 통합해야 하며, 정말로 리모트 이력을 덮어써야 한다면 force push가 필요합니다.

또한 브랜치는 커밋을 복사해 담는 공간이 아니라 특정 커밋을 가리키는 포인터입니다. 따라서 그림에서는 각 브랜치가 어떤 커밋을 가리키고 있는지, 그리고 로컬 브랜치의 이력이 리모트 브랜치에서 선형적으로 이어지는지를 확인해야 합니다.

관련 개념은 아래 기존 질문의 답변에서도 확인하실 수 있습니다.

해당 게시글에서는 브랜치가 커밋을 가리키는 포인터라는 점과, fast-forward 상황에서는 포인터를 앞으로 이동할 수 있다는 원리를 설명하고 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

왜 여기서는 둘 다 선택해서 하는걸 안알려주는지 궁금하네요

0

65

1

cherry pick 질문입니다.

0

84

2

깃헙 작업 완료된 develop 브랜치 질문

0

143

2

[질문] git-flow 에서 release 브랜치 생성

0

102

1

upstream연결하기

0

142

2

gitignore관련 질문

0

144

2

staging area

0

140

2

브랜치 병합 전략에 대한 지식공유자님의 생각이 궁금합니다.

0

163

1

git pull merge 요청 시 draft

0

342

2

rebase 와 3-way merge 의 근본적인 차이

0

175

2

문서가 락이 걸어져있네요.

0

124

1

vscode에서의 github로의 푸시

0

196

2

Git 머지 커밋 되돌리기(revert)와 머지 방식 선택의 안전성 질문

0

239

2

git add 동작 원리에 대한 질문

0

102

2

git flow 문의

0

149

2

git rebase 질문

0

158

2

[추가 질문] 똑같은 브랜치를 다시 pull request하는 경우.

0

257

2

pull request 취소하기

0

1042

2

.gitignore

0

121

2

Commit 메시지 변경 방법

0

978

2

switch 와 checkout 차이점.

0

373

1

강의자료 누락, commit 복사질문

0

258

4

강의 교재 다운로드

0

128

1

git init에서 오류 발생

0

365

2