2016-09-12 4 views
2
I는 특정 커밋 가지가 커밋의 대부분과는 달리,이 하나가

GitHub의a의 분기 github에

에 그 지점을 표시하지 않습니다에 GitHub의 에 있지만 속한 것을 발견 할

커밋 찾기 A) enter image description here B) enter image description here 나는 내가 탐색 할 수 있습니다 GitHub의에, 저장소, 을 복제 한 후git branch --contains <COMMITID> 로컬로 실행,하지만 난

그러나 error: no such commit있어 나는 지점 내가 원격 지사 삭제에 대해 확실하지 오전 (삭제 된 것으로 의심,하지만 난 단지 ref이 생각 ... 내가 이전에있어 오류와 모순 생각 URL<COMMITID>을 통과 에 의해

를 저지) 그리고 ... 커밋에 도달 할 수 없습니다. (내가 git clone 일 때 무시합니까?)

그렇다면이 "좀비 커밋"에 대한 자세한 정보는 어떻게 찾을 수 있습니까? 내가 틀렸다면 실제로 무슨 일이 일어난거야? 어쩌면 git revert일까요?

답변

3

끌어 오기 요청은 "나는 다른 지점에이 기능 분기를 병합 할"라는 마커, 지점이 아니다. 여기에 무슨 일이 일어 났는지

은 다음과 같습니다

  1. 누군가가 나뭇 가지를 만들었습니다.
  2. 이 분기를 병합하기 위해 끌어 오기 요청이 만들어졌습니다.
  3. 분기
  4. --no-ff를 사용하지 않고 합병 후 삭제되었습니다.
  5. 그런 다음 복제했습니다.

지금 삭제 된 분기의 커밋에 도달 할 수 없으므로 복제 할 때 자식을 보내지 않아도됩니다. 아직 원격지에서 가비지 수집되지 않았으므로 GitHub의 URL을 사용하여 탐색 할 때 계속 볼 수 있습니다 (git show <somehash>에 해당하는 작업). 병합의

사용은 "원래"를 방지하려면 병합 할 때 도달되는 것을 저지 것 (예 : --no-ff를 통해 같은) 커밋합니다. Rebase-then-merge를 사용하면 해시가 변경되지만 병합은 수행되지 않습니다. 일부 사람들은 병합 커밋에서 얻은 혼란을 싫어합니다.

당신은 아마에 병합되었다 분기의 역사를 찾을 수는 동일한 다른 해시와 커밋이 포함되어 있습니다. 나는이 커밋을 포함하는 "clone-with-junk"를 얻을 수있는 방법이 있다고 생각하지 않는다.

+1

은 아마 당신은'--no-ff'을 설명 할 것입니다 .... git commit --mirror 가장 가까운,하지만 그것은 단지 모든 심판을 얻는다? – Pachonk

+0

나는 또 다른'병합 풀 request'을 표시하도록 업데이트 이미지,이 두 닮았 내가 조사 할 일이 더'branch'이없는 것을 제외하고 (모두 2 부모가 ... 난 그 어느 것도 사용 ** FastForward의 **를 의미한다고 생각) ** GitHub **에 표시됩니다. 차이점은 무엇입니까? – watashiSHUN

+0

분기 또는 태그를 통해 커밋에 도달 할 수 있으면 복제 할 때 git이 전송합니다. 커밋에 도달 할 수없는 경우 git은 커밋하지 않을 수 있습니다. github에서 볼 수있는 지점은 원격 저장소에있는 지점입니다. –