2017-02-08 1 views
3

나는 어리석은 실수를했으며 그것을 해결하는 가장 좋은 방법이 확실치 않습니다. 다음은 내가 한 일입니다.스쿼시 근원에있는 오래된 커밋

  • 상용구를 기반으로 웹 프로젝트를 만들었습니다.
  • 내 커밋을하기 전에 모든 기록 (약 500 커밋)을 제거하는 .git를 제거했습니다.
  • 프로젝트를 몇 개월 동안 약 200 개 이상 커밋 한 후 업스트림 상용구를 내 프로젝트의 로컬 분기에 병합했습니다. 이로써 업스트림 상용구에서 약 500 건의 커밋이 추가되었습니다.
  • 는 추가로 10 제작 정도 상용구에서 업데이트 다시 작업을 내 프로젝트는
  • 원산지로 개발 분기를 밀어 내 개발 지점
  • 로 근무 지역 지점을 합병 얻을 수있는 지역 지점에 커밋
  • 만든 하나 더 다스 (원 푸시되지 않음) 개발에 통합되지 않은 다른 로컬 브랜치

내 자식에 커밋에 대해

  • 가 만든 (원 푸시되지 않음) 지역 개발 지점에 커밋 역사는 이제 내가 처음 제거한 첫 번째 프로젝트 커밋 전에 모든 상용구 역사를 가지고 있습니다. 또한 커밋 중간에 수백 개의 커밋이 산재 해 있습니다.

    제가하고 싶은 것은 스텁을 사용하여 업스트림에서 로컬 커밋으로 모든 커밋을 단일 커밋에 사용했습니다. 이 작업을 수행하는 데 다소 어려움이 있습니까?

    또한 원래 기록도 다시 써야합니다. 이것은 개인 레포이며 단지 몇 명의 사람들 만이 그것을 사용하고 있습니다. 어떻게해야합니까?

  • +3

    사람들은 왜 이것을 자신에게합니까? –

    +1

    @JoePhillips 큰 질문입니다! 제 경우에는 개발을 병합하기 전에 저의 지역 지부를 스쿼시 할 계획이었습니다. 그러나 누군가 다른 사람이 즉시 필요로하는 변화가 있었고, 나는 스쿼시를 어떻게하는지 잘 몰랐습니다. 그래서 저는 그것이 그랬던 것처럼 합병했습니다. 나는 그 일을 바로 처리 할 수 ​​있다고 생각했습니다. 물론, 다른 것들이 우선 순위를 차지했습니다. 그래서 지금 나는이 자기 자신을 만드는 과정을 정리하려고합니다. – Tauren

    +0

    나는 스쿼시에 대해 완전히 반대하기 때문에 이것을 엉망으로 보지 않을 것이라고 생각한다. –

    답변

    2

    제가하고 싶은 것은 업스트림에서 병합 된 모든 것을 스쿼시 한 ​​것입니다. 이 작업을 수행하는 데 다소 어려움이 있습니까?

    사용하여 환매 특약의 두 지역 클론 :

    • 하나에, 당신은 당신이 다른에서
    • (당신의 상류 병합 SHA1을 커밋 등) 스쿼시 할 다양한 상태를 체크 아웃, 당신은 마십시오 git reset - 여전히 정확한 (즉, 역사가 좋은) 첫 번째 커밋까지.

    그런 다음 두 번째부터는 git --work-tree=/path/to/first/clone add .부터 모두 커밋 할 수 있습니다.

    첫 번째 repo의 여러 상태에 대해 반복합니다. 첫 번째 repo의 작업 트리를 추가하고 커밋하여 두 번째 repo에서 완료됩니다.

    다음으로 git push --force.

    +0

    감사합니다, 이것은 트릭을 했어! 사실, 나는 한 번만하고 반복하지 않았다. 반복하는 대신 가장 최근의 커밋을 체리로 선택했습니다. 이것은 원본 커밋 날짜와 그들이 있던 지점과 같은 약간의 데이터를 잃어 버렸지 만, 나는 그렇게 걱정하지 않았습니다. – Tauren

    관련 문제