2017-05-24 5 views
0

나는 git pull이 내 커밋을 삭제하는 사례가 있습니다. 여기 쉽게 사건을 재현하는 방법은 다음과 같습니다git pull 삭제 커밋

  1. 로컬 브랜치 하나는이 git update-ref -d refs/heads/<branch> <branch>~1이 이루어집니다 원격 REPO에 원격 추적 브랜치
  2. git push
  3. 앞서 놓는다 커밋하고있다. 그래, 나도 알아. 왜 그런지 물어 보지 마라. 그렇지 않아야한다고 말하지 마라. 이 스레드 방식을 주제와 연관시킬 수있는 백엔드 자동화와 관련이 있습니다. 어쨌든 ... 다시 지역의 repo에서
  4. , git pull
  5. 선도가 사라졌다 커밋

기본적으로 무엇이 일어나고있는 것은 내가 true로 branch.<branch name>.rebase 세트를 가지고 있고,이 버전이 단계에이의 의미에 디폴트 점이다 --fork-point (나는 생각한다) 기본적으로 로컬 브랜치의 reflog 맨 위에서 아래로 반복하고 SHA가 원격 추적 브랜치의 reflog에 있는지 확인한다. 일단 이것이 둘 다 존재하면, 그것은 포크 포인트입니다. 그러나이 작은 경우에는 이 아니며 실제 포크 지점입니다. 원격 추적 분기와 로컬 분기 인수가 명령 줄에서 스왑 된 경우 올바른 포크 지점이 실제로 반환됩니다.

  1. 리베이스의 기본값으로 --no-fork-point을 설정할 수 있습니까? 나는 git config documentation 쳐다 보면서 내가 자식 앨리어싱을 사용하여 시도 --fork-point

  2. 켜고 끌 것이 분명 아무것도 찾을 수 없습니다,하지만 어색하고 틀에 얽매이지 않는 명령

+0

AFAIK는 어떤 종류의'git pull'을 수행해도 커밋을 삭제할 수 없습니다. 가장 극단적 인 경우에,'git pull --rebase' 명령은 여러분의 커밋 중 일부를 _rewritten_으로 만들고 리모컨의 일부 항목 위에 재생하지만,이 경우에도 삭제되지는 않을 것입니다. –

+0

@TimBiegeleisen : 아아,'git pull' 명령으로'git rebase'를 실행하면 (' .rebase'를'true'로 설정했을 때처럼), fork-point 코드를 얻게됩니다. – torek

+0

@torek 나는 이것이 일어날 수 있다는 것을 전혀 모르고있다. 기분이 좋으면 답에 약간의 정보를 추가하십시오. –

답변

2

그건를 사용하는 모든 사람을 필요로 불행하게도,이다 --fork-point의 실제 목표 : 업스트림 자체가 제거 된 업스트림 커밋을 제거하고 지점에 보유하고 있음을 의미합니다.

Q1에 대한 대답은 git pull에서 이것을 끌 수있는 방법이 없다는 것입니다. 일반적으로 git pull에 대한 조언은 다음과 같습니다. git fetch 다음에 git rebase을 입력하십시오. 그러나 특정 업스트림 (또는 --root)을 지정하지 않으면 기본값 --fork-point이 표시됩니다. 여전히을 입력하십시오.

Q2는 실제로 질문이 아닙니다. 앨리어싱은 다소 어색합니다. 그렇습니다. 명시적인 git fetch 다음에 git rebase --no-fork-point이 작업을 수행하지만, 사람들이 실제로 그렇게해야합니다.