2012-05-24 5 views
3

TortoiseGit을 사용하여 마지막 커밋 만 소스 포지 저장소로 푸시하고 싶습니다. 이전의 모든 것들은 밀리지 않습니다. Here은 새로운 지점을 만들고 이것을 밀어 낼 수 있다고 말했습니다. 그러나 새로운 지사에는 마지막 커밋뿐만 아니라 모든 커밋이 있습니다.TortoiseGit으로 마지막 커밋 만 푸시

내가 뭘 잘못하고 있니?

감사합니다.

+1

[git - pushing specific commit] 중복 가능성이 있음 (0120-1780-100) –

+0

내 질문을 지정했습니다. – rynd

답변

2

이것은 주로 git의 작동 방식에 대한 오해라고 생각합니다. 커밋을 푸시 할 때 그 커밋에 부모가 있다면 git은 그 부모가 원격 저장소에도 있는지 확인합니다. 희소 한 클론 (대역폭 및/또는 디스크 사용량을 보존하는 데 유용 할 수 있지만 원격 저장소와 상호 작용할 수있는 방법에 몇 가지 제한을 두는 데 유용 할 수 있음) 이외에도 git는 객체 데이터베이스를 완전하고 일관성있게 유지하도록 설계되었습니다. 부모님이 저장소에 있지 않으면 커밋을 푸실 수 있다면 완전성/일관성이 위배됩니다. 그래서 설계 상으로는 커밋 라인이 보존되도록 git하지 않고 하나의 커밋만을 푸시 할 수 없습니다.

즉, 하나의 커밋만을 푸시 할 수있는 두 가지 방법이 있습니다. 1) 푸시 할 커밋의 부모가 이미 원격 데이터베이스에 있는지 확인하십시오 (예 : rebase을 사용하여 모든 커밋을 스쿼시합니다. 브랜치에서 하나의 커밋까지, 필요할 경우 해당 브랜치를 재배치 할 수 있습니다.하지만 워크 플로에 가장 적합한 선택이 아닐 수도 있습니다) 또는 2) 푸시 할 커밋에 부모가 없는지 확인하십시오. 최신 버전의 자식에서 git checkout -b somebranch --orphan을 실행 한 다음 커밋을 만듭니다.

+0

TortoiseGit은 현재'--orphan'을 지원하지 않지만 저장소 폴더에서 git를 호출하면 분리 된 분기를 생성합니다. – rynd

+0

명령어는 실제로'git checkout --orphan somebranch'입니다. – Fr0sT