git은 필터링된 저장소를 원래 상위 저장소로 반환합니다.

git은 필터링된 저장소를 원래 상위 저장소로 반환합니다.

Git 필터링 분기를 되돌리고 싶고 이를 수행하는 가장 좋은 방법을 알고 싶습니다.

처음에는 다음과 같은 저장소가 있었습니다.

A
  p
  q
  r

그런 다음 q를 자체 저장소로 만들었으므로 다음과 같습니다.

A
  p
  r  
Q

이제 여러 번 커밋한 후 q를 원래 부모인 A로 반환하도록 작업을 반대로 하고 싶습니다. Q를 Aq로 반환하고 모든 기록을 유지하는 방법은 무엇입니까?

답변1

나는 몇 가지 방법을 생각했습니다. 마음을 바꾸고 다른 사소한 일을 시도해 보기 위해 저장소의 복제본에서 이러한 작업을 시도하는 것이 좋습니다. (실수로 유일한 복제본에서 이 작업을 수행하더라도 git resetref 로그를 사용하여 복구가 가능해야 합니다.)

  1. git subtree, --squash아니요. 이것은 당신이 원하는 것에 충분히 가까운 일을 할 수 있습니다. A 내의 명령은 git subtree add -P q git://user@host/path/Q.git masterA와 유사합니다.

  2. 더 많은 사용자 정의를 원할 경우 사용할 수 있습니다.하위 트리 병합(나는 git-subtree가 내부적으로 사용된다고 확신합니다). A는 여전히 빨리감기를 할 수 있습니다.

  3. git-filter-branch는 기본적으로 무엇이든 할 수 있습니다. 저장소를 병합하지 못할 이유가 없습니다. 예를 들어 Q를 A의 분기로 끌어온 다음 분기를 필터링하여 모두 q 하위 디렉터리 아래로 이동한 다음 마스터로 병합할 수 있습니다( --allow-unrelated-histories. 이렇게 하면 Q의 모든 커밋 ID가 변경되지만 A는 변경되지 않습니다. 또는 커밋과 같은 필터를 사용하여 커밋을 기록에 함께 넣을 수 있습니다(물론 이렇게 하면 많은 커밋 ID가 변경되므로 매우 주의하지 않는 한 A는아니요빨리감기 가능)

추신: Unix/Linux 시스템에서 실행되는 프로그램에 대한 질문은 여기서는 괜찮지만 git(및 기타 개발 도구)에 대한 더 많은 전문 지식이 있습니다.스택 오버플로. 그것은 당신에게 달려 있지만, 나는 개인적으로 당신이 더 빠르고 더 나은 답변을 얻을 것이라고 생각하기 때문에 거기에서 git 질문을 할 것입니다.

관련 정보