IT story

한 Git 저장소를 다른 저장소로 리베이스하는 방법은 무엇입니까?

hot-time 2021. 1. 7. 20:03
반응형

한 Git 저장소를 다른 저장소로 리베이스하는 방법은 무엇입니까?


특정 시점까지 프로젝트 개발을 포함하는 Git 저장소 (A)가 하나있었습니다. 그런 다음이 저장소 A가있는 USB 스틱을 잃어 버렸습니다. 다행히도 최신 커밋의 백업이 있었기 때문에 나중에 최신 프로젝트의 상태를 가져오고 개발을 계속할 새 저장소 (B)를 만들 수있었습니다. 이제 잃어버린 USB 스틱을 복구 했으므로 두 개의 Git 저장소가 있습니다.

어떻게 든 repo B를 repo A로 rebase해야한다고 생각하지만 fetch / pull 및 rebase를 사용하여 수행하는 방법을 모르겠습니다.


A와 B가 동일한 리포지토리가 아닌 경우 (최신 작업 복사본을 사용하여 B를 만들었습니다), 이식편사용하여 공통 기록이있는 척해야합니다.

하자 당신이 따라 B에 대한 원격 같이 추가했다고 가정 VonC의 대답은 ,이 같은 환매 특약 외모 1 :

~/B$ git tnylog 
* 6506232 (HEAD, master) Latest work on B
* 799d6ae Imported backup from USB stick
~/B$ git tnylog A/master
* 33b5b16 (A/master) Head of A
* 6092517 Initial commit

B의 루트에 부모가 A의 머리임을 알리는 이식편을 만듭니다.

echo '799d6aeb41095a8469d0a12167de8b45db02459c 33b5b16dde3af6f5592c2ca6a1a51d2e97357060' \
 >> .git/info/grafts

이제 B에 대한 이력을 요청할 때 위의 두 이력이 하나로 나타납니다. 이식편을 영구적으로 만드는 것은 git filter-branch논쟁없이 간단 합니다. 하지만 필터 브랜치 이후에는 브랜치에 있지 않으므로 git branch -D master; git checkout -b master.


1 git tnylog =git log --oneline --graph --decorate


A와 B가 동일한 저장소 인 경우 (첫 번째 SHA1이 공통 임) 다음을 수행 할 수 있습니다.

  • A를 B에 대한 리모컨으로 선언하십시오. git remote add A /path/to/A
  • git fetch AB 저장소의 모든 원격 A 분기업데이트 하려면
  • git checkout dev (개발중인 B)
  • git rebase A/devBranchB (즉, 백업에서 개발하거나 재개발 한 것)를 A/devBranch(잃어버린 개발) 위에 재생합니다. 질문 과 비슷합니다 .

마지막 단계에서는 잃어버린 개발자와 개발자를 동기화 할 수 있습니다.
그러나 실제로 A에서 가져 오면 완료됩니다. B에는 이제 " all "내역 (잃어버린 내역과 현재 작업)이 포함됩니다.


우선 repo A의 작업 클론을 만드는 것으로 시작합니다.

그런 다음 B에서 끌어와 병합하십시오. 새 분기를 만들고 끌어온 다음 두 분기를 병합하는 것을 선호 할 수 있습니다. 강제 플래그가 필요할 수도 있습니다. Mercurial에서 이와 같은 작업을 수행했으며 (명백하게 관련이없는 두 저장소를 함께 접목) "-f"가 필요합니다.

참조 URL : https://stackoverflow.com/questions/2428137/how-to-rebase-one-git-repository-onto-another-one

반응형