Git 필터링 분기를 되돌리고 싶고 이를 수행하는 가장 좋은 방법을 알고 싶습니다.
처음에는 다음과 같은 저장소가 있었습니다.
A
p
q
r
그런 다음 q를 자체 저장소로 만들었으므로 다음과 같습니다.
A
p
r
Q
이제 여러 번 커밋한 후 q를 원래 부모인 A로 반환하도록 작업을 반대로 하고 싶습니다. Q를 Aq로 반환하고 모든 기록을 유지하는 방법은 무엇입니까?
답변1
나는 몇 가지 방법을 생각했습니다. 마음을 바꾸고 다른 사소한 일을 시도해 보기 위해 저장소의 복제본에서 이러한 작업을 시도하는 것이 좋습니다. (실수로 유일한 복제본에서 이 작업을 수행하더라도 git reset
ref 로그를 사용하여 복구가 가능해야 합니다.)
git subtree
,--squash
아니요. 이것은 당신이 원하는 것에 충분히 가까운 일을 할 수 있습니다. A 내의 명령은git subtree add -P q git://user@host/path/Q.git master
A와 유사합니다.더 많은 사용자 정의를 원할 경우 사용할 수 있습니다.하위 트리 병합(나는 git-subtree가 내부적으로 사용된다고 확신합니다). A는 여전히 빨리감기를 할 수 있습니다.
git-filter-branch는 기본적으로 무엇이든 할 수 있습니다. 저장소를 병합하지 못할 이유가 없습니다. 예를 들어 Q를 A의 분기로 끌어온 다음 분기를 필터링하여 모두 q 하위 디렉터리 아래로 이동한 다음 마스터로 병합할 수 있습니다(
--allow-unrelated-histories
. 이렇게 하면 Q의 모든 커밋 ID가 변경되지만 A는 변경되지 않습니다. 또는 커밋과 같은 필터를 사용하여 커밋을 기록에 함께 넣을 수 있습니다(물론 이렇게 하면 많은 커밋 ID가 변경되므로 매우 주의하지 않는 한 A는아니요빨리감기 가능)
추신: Unix/Linux 시스템에서 실행되는 프로그램에 대한 질문은 여기서는 괜찮지만 git(및 기타 개발 도구)에 대한 더 많은 전문 지식이 있습니다.스택 오버플로. 그것은 당신에게 달려 있지만, 나는 개인적으로 당신이 더 빠르고 더 나은 답변을 얻을 것이라고 생각하기 때문에 거기에서 git 질문을 할 것입니다.