2014-06-16 6 views
2

Bazaar 사용 중 문제가 발생했습니다.이를 해결하기위한 최선의 방법을 알고 싶습니다. 여기 컨텍스트이다 : 우리의 프로젝트의 트렁크에서Bazaar와의 잘못된 병합 실행 취소

, 하나 잘못 지점 (BranchA) 트렁크에 병합하지만 병합 정보를 유지하면서 그가 대부분의 파일에 되돌릴 사용 (그래서 시장에서 BranchA 효과적으로 통합했다 트렁크에, 나중에 병합하지 못하게 함).
병합 된 개정판이 r4로 커밋되었습니다.

이 (원하지 않는) 병합 후에 많은 devs가 바로 커밋 (r5 & r6)합니다.

내 질문은 :이 잘못된 병합을 취소하는 방법? (커밋을 유지하는 동안).

나는 다시 R3에 uncommit 및
내가 '역 벚꽃 선택'R4 시도 (R4 생략) R6에 R4에서 각각의 회전을 병합하려고 ...하지만 BranchA 정보가 여전히 기억 할 수 있습니다 병합합니다.

trunk 
    | 
    r6 
    | 
    r5 
    | branchA 
    |  | 
    r4 ---+ 
    |  | 
    | r2.2 
    |  | 
    r3 r2.1 
    |  | 
    r2 ---+ 
    | 
    r1 

해결 방법이나 실마리가 있다면 공유하십시오.

답변

2

잘못된 병합의 되돌림으로 인해 정보가 손실되었으므로 100 % 수정되지 않습니다. 가장 좋은 방법은 다음과 같이 r5r6을 뜨리는 trunk와 체리에 r3 떨어져 새로운 지점을 만드는 것입니다 : 체리 r5을 따기 전에

cd /path/to/repo 
bzr branch trunk -r3 branchX 
cd branchX 
bzr merge -c5 ../trunk 
bzr commit -m "cherry picked r5: $(bzr log --line -r5 ../trunk)" 
bzr merge -c6 ../trunk 
bzr commit -m "cherry picked r6: $(bzr log --line -r6 ../trunk)" 

를 또는, branchA "올바른 길에서 병합 할 수 있습니다 ".

rebase 명령은 여기에 도움이되지 않습니다. 리베이스의 목적은 기본적으로 리비전을 다시 정렬하는 것입니다. 병합하거나 리베이스하는 경우 파일의 내용이 동일 해지며 업데이트 히스토리 그래프는 다른 모양을 갖게됩니다. 리베이스의 목적은 일반적으로 히스토리 그래프를 깔끔하게 보이도록 만드는 것인데, 이는 깔끔한 것일 수 있습니다. 그러나 그것은 화장품 일 뿐이며, 최종 결과는 내용면에서 동일합니다.

+0

내가 결국 그랬어! r3에서 포크를 만들고 r5와 r6을 병합하고 그 결과를 트렁크 (새로운 트렁크)로 푸시합니다. Devs는 바자가 커밋하려고하면 분기 된 브랜치에 대해 경고하기 때문에 작업 복사본에서 새 트렁크를 가져와야합니다. – TridenT

+0

고정 된'trunk'를 이와 같이 재현하고 싶지 않다면, merge 리비젼을'bzr merge '로 바꾸어 버리는 것이 좋습니다. -r 4..3'. 그러나 지적했듯이 BranchA의 병력이 병합되므로 BranchA에서 다시 병합 할 수 없습니다. 나는이 두 가지 사이에서 덜 나쁜 결과를 선택해야 할 것 같은데. – janos