2012-12-24 3 views
58

곧 크리스마스 전에 우리의 저장소 중 하나에 git log --decorate --oneline --graph을하고, 우리는 다음과 같은 구조가 나타난 것을 발견했다합니다 (얇은 축제 테마 강조 회전) : 커밋 그래프에서이 패턴이 발생 했는가왜 내 자식 역사는 크리스마스 트리처럼 보이나요?

redacted git log output, rotated to look like a Christmas tree

을 ?

이것은 의도적으로 다소 어리석은 일이지만 여기 흥미로운 점이 있습니다. 커밋 그래프에서 특정 패턴을 해석 할 때 흔히 히스토리 브라우저에서이를 볼 때 어려울 수 있습니다.

+6

* "다음에 오기 : 내 작업 트리가 크리스마스 트리와 어째서 어떨까요?"* – Amber

+33

* "다음에 올 때 : 내 크리스마스 트리가 왜 git 기록처럼 보이나요?"* –

+0

크리스마스 트리가 아닐 것입니다. 별이 없어도 완성됩니다.'*''''*' – ADTC

답변

30

이 경우 상황은 리포지토리의 한 복제본에있는 master 분기의 끝 부분에 완료되지 않은 커밋이 있음을 나타냅니다. 그런 다음 git pull은 같은 저장소에서 여러 번 실행되었습니다. 일정 기간 동안 업스트림에서 많은 새로운 작업이 수행되었습니다. (이 경우 자동화 된 스크립트로 인해 발생했지만, 개발자가 분기를 반복적으로 가져 와서 리베이스 (rebase)가 아닌 최신 상태로 유지한다면 똑같은 일이 발생할 수 있습니다.)

업스트림에없는 master에 항상 커밋이 있었기 때문에 업스트림에 새로운 커밋이있을 때마다 모든 끌어 오기가 새 병합 커밋을 만들었습니다.

결국이 저장소의 마스터 분기의 기록이 업스트림으로 푸시되었습니다. 다른 개발자가 커밋 그래프의이 구조가 다음에 업스트림 저장소에서 풀리면 갑자기 나타납니다.

비슷한 구조의 기록이 있고이 문제를 일으킨 커밋/개발자를 찾으려면 별표가있는 행을 볼 수 있습니다 (기본적으로 모든 병합의 첫 번째 부모를 따름) 병합되지 않은 첫 번째 커밋을 얻을 때까지 그림의 경우 b275805 - 이전에 푸시되어야하는 커밋입니다.

사람들이 종종 git pull --rebase을 선호하는 이유 중 하나입니다. 푸시 된 기록을 간단하게 유지합니다.

내 동료 Matthew Somerville이이를 발견하고 진행 상황을 해결했습니다.

+4

우수합니다. +1. 나는'pull --rebase'의 잠재적 인 문제점에 대해서만 알고있었습니다 (http://stackoverflow.com/questions/2590260/when-will-git-pull-rebase-get-me-in-to-trouble/2590276 # 2590276),하지만 여기에 도움이 될 것입니다. – VonC