2016-06-22 1 views
0

두 개의 projets에서 커밋을 이동하는 데 문제가 있습니다. 세부 사항 : - 프로젝트 1 : 많은 디렉토리를 재편성하는 단일 자식이 있습니다. - 프로젝트 2 : 있음 프로젝트 1과 동일한 디렉토리이지만 모든 디렉토리에는 분리 된 자식이있다. 문제는 다음과 같습니다 난이 커밋 모든 파일의 모든 변경을 이동하고 2하나의 자식에서 여러 자식으로 Cherry-pick 커밋

감사를 프로젝트에 커밋 체리 픽 2 디렉토리와 플러스의 파일을 터치하고 내가 원하는에서 커밋 프로젝트 하나 ahead

답변

0

cherry-pick은 전체 커밋을 잡고 현재 커밋에 전체 커밋을 적용합니다. 귀하의 질문을 이해하고, 당신은 여러 디렉토리를 변경하는 커밋을 원하고, 체리는 각 커밋에서 단일 디렉토리의 변경 사항 만 해당 디렉토리 만 포함하는 별도의 자식 저장소로 선택합니다.

내가 말했듯이, 체리 - 픽은 전체 커밋을 잡기 때문에, 그 자체로는 그렇게 작동하지 않습니다.

그러나이를 수행하려면 cherry-pick을 filter-branch와 함께 사용할 수 있어야합니다.

먼저해야 할 일은 프로젝트 1의 새로운 작업 분기를 체크 아웃하여 기존 분기를 엉망으로 만들지 않는 것입니다. 당신은이 지점에서 불타는 잔해가 될 것입니다. 그 지점에서 조용히 제거 할 수 있습니다. 해로움, 파울도 없다.

일단 새 작업 분기에서 을 사용하여 커밋을 다시 작성하고 해당 디렉토리 중 하나를 제외한 트리의 모든 항목을 삭제합니다 (원하는 커밋/커밋의 부모로부터 다시 작성을 시작해야 함). 마이그레이션하기보다는 커밋/커밋 자체).

이 시점에서 다시 작성된 커밋은 프로젝트 1의 단일 디렉토리에있는 파일 만 처리하게됩니다 (작업 브랜치에서는 다른 디렉토리가 완전히 날아가 버렸지 만 상관 없습니다). 상위 커밋에는 작업 분기의 다른 모든 디렉터리 제거가 포함되며 나머지 커밋은 나머지 디렉터리의 변경으로 제한됩니다. 이 시점에서이 커밋을 프로젝트 2의 해당 자식 저장소로 체리 선택할 수 있어야합니다.

마이그레이션하려는 모든 디렉토리에 대해 꼼꼼하게 씻어서 반복하십시오.

+0

답장을 보내 주셔서 감사합니다. 테스트 중입니다.하지만 git filter-branch --tree-filter로 작업 한 적이 없습니다. 예를 들어서 해결책을 알려주십시오. - 프로젝트 1에서 : 커밋했습니다. b0cefe4de84, 변화 할 것을 : - 프레임 워크 /베이스/LockPatternUtils.java - 패키지/응용 프로그램/설정/security_finger_picker.xml - 패키지/애플 리케이션/MMS/SecuritySettings.java - 프로젝트 2에서 : : 난 논문 자식이 - (frameworks-base) frameworks/base - (packages-apps-Settings) packages/apps/Settings/ - (packages-apps-Mms) packages/apps/Mms – Optimmus

+0

자 이제 분기를 필터링하는 방법을 배울 수 있습니다. . git의 문서 및 Google 검색에서 많은 정보를 찾아야합니다. Stackoverflow는 튜토리얼 사이트가 아니어도, 튜토리얼에서는 400 자의 주석으로 충분하지 않습니다. –

+0

답장을 보내 주셔서 감사합니다. 실제로 옳았습니다. 이미 git에서 더 자세한 정보를 얻었습니다.이 명령 줄을 수행했습니다. git filter-branch --tree-filter 'rm -r! (frameworks/base)' b0cefe4de84^..HEAD 여기서 프레임 워크 /베이스를 유지하고 커밋의 나머지 파일을 삭제하지만 오류 git-filter-branch가 필요합니다. 1 : eval : 구문 오류 : "(예기치 않게 어쨌든, 왜" 마이그레이션하려는 커밋/커밋의 부모에서 재 작성, 커밋/커밋 자체가 아닙니다.) " ? – Optimmus

관련 문제