2014-09-27 14 views
0

원격/공용 분기에 "OLD"를 정리해야하는데, 그 중 일부에는 불량/거대한 커밋이 포함되어 있기 때문입니다.GIT 공개 분기 새 분기로 정리

OLD - 간단한 그래프

(...) -> c234 -> c235(huge to fix) -> c236 -> c237(huge to fix) -> c238 -> c239 -> (...) -> HEAD 

내가 한 이렇게하려면 다음

1) 나는 "NEW"지점을 만들었습니다.

2) 전에 돌아가 첫번째 거대한 커밋 (C234)

3) 체리 거대한 마지막 커밋하기 전에 모든 커밋을 선택합니다. (c236)

4) 그럼 난 후 "OLD"지점에서 변경된 모든 파일을 복사 마지막으로 거대한

5) 마지막으로 변경 (C235, c237)

을 반영하는 많은 작은 커밋을 생성 (c237) 커밋 NEW 지금 - 간단한 그래프 이제 내 생각에 나는 "NEW"

,691의 상단에 "OLD"에 (c237) 이후의 모든 변경 사항을 체리 - 선택/리베이스해야

(...) -> c234 -> c236 -> (many commits reflecting state after c237) -> HEAD 

363,210

NEW 예상 - 병합이 -i를 자식이 - 리베이스 전에 시도

(...) -> c234 -> c236 -> (many commits reflecting state after c237) -> c238 -> c239 -> (...) -> HEAD 

간단한 그래프 그러나 이것은 공공의 repo 때문에, 그것은 (OLD의 HEAD 거의 400 커밋이) 많이 포함하고 때로는 갈등을 해결해야만했습니다. 마녀는 수일이 걸릴 수 있습니다.

아이디어가 있으면 어떻게 처리할까요.

+1

** 정확한 ** rebase 명령은 무엇입니까? –

+0

첫 번째 시도는 이었습니다. git-rebase -i -onto refs/heads/old c235 아이디어는 커밋 순서를 변경하고 조인하고 여러 개의 작은 항목으로 분할하는 것이 었습니다. 하지만 사용자가 병합 충돌을 일으킨 경우 언제든지 다시 해결해야하며 20 번 수동 병합 후에 포기합니다. – Fazer

답변

0

마치 (many commits reflecting state after c237)c237OLD 지점에 있었던 것과 같은 상태를 실제로 재생산하지 못하는 것 같습니다. 그렇게했다면 병합 충돌이 없어야합니다.

즉, 놓친 내용을 보려면 rebase를 시도하기 전에 git diff c237을 수행해야합니다.

+0

편집없이 리베이스를 시도했지만 충돌을 해결하라고 요청했습니다 (아마도 많은 커밋이 OLD 브랜치 외부에서 만들어 졌기 때문에 원래 병합되었습니다) – Fazer