git rebase를 수행하지 않고 커밋의 부모 변경

Gilmor

오래된 커밋 기록을 제거하여 수명이 긴 GIT 저장소를 축소해야합니다.

다음과 같이 sth를 변환하십시오.

A - B - D - E - ... 
 \ /         
  C 
    

으로:

       D' - E - ...

커밋 E 이후의 커밋 기록은 매우 복잡하고 많은 분기, 태그, 병합 등을 포함합니다.

이 저장소는 아직 원격 저장소로 푸시되지 않은 마이그레이션 된 저장소이기 때문에 다른 사용자는 신경 쓰지 않습니다. 내 로컬 컴퓨터의 베어 저장소입니다. 필요한 경우 "일반"으로 변환 할 수 있습니다.

D '를 만들고 해시를 인쇄하려면 다음을 사용할 수 있습니다.

git commit-tree D^{tree}

그러나 문제는 커밋 E의 부모를 커밋 D에서 커밋 D '로 전환하는 방법입니다.

이 단계에서 내가 이미 찾은 대부분의 팁은 D '에 마스터 브랜치를 리베이스하는 것을 제안하지만, 여러 브랜치, 태그, 병합이 많은 10 년 이상 커밋으로 복잡한 히스토리를 가지고있는 경우 쉽지 않습니다. 기타

새 부모 커밋에 현재 커밋의 모든 내용이 포함되어 있다고 100 % 확신 할 때 git rebase를 수행하지 않고 단순히 부모 커밋으로 포인터를 전환하는 저수준 GIT 명령이 있습니까?

LeGEC

git filter-repo( 프로젝트 페이지 )를 사용할 수 있습니다 .

문서 발췌 :
부모 재 작성

$ commit_A를 ​​$ commit_B로 바꾸려면 (예 : $ commit_A를 ​​부모로하는 모든 커밋 대신 해당 부모에 대해 $ commit_B를 가짐) 기록을 다시 작성하여 영구적으로 만듭니다.

git replace $commit_A $commit_B
git filter-repo --force

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Git rebase가 항상 새 커밋을 만들고 SHA-1 코드를 변경하지는 않습니까?

분류에서Dev

git : 커밋 ID를 변경하지 않고 로컬 커밋 편집

분류에서Dev

작성자를 변경하지 않고 Git 사인 오프 커밋

분류에서Dev

현재 브랜치를 변경하지 않고 "git svn rebase"

분류에서Dev

rebase를 사용하여 GIT에서 매우 오래된 커밋의 원격 커밋 메시지를 어떻게 변경합니까?

분류에서Dev

두 개의 커밋을 병합하기 위해 git rebase를 수행하는 방법, 하나는 더 멀고 하나는 최근 커밋

분류에서Dev

git 커밋의 경고

분류에서Dev

Git-추가하지 않고 커밋 후 분기 변경

분류에서Dev

Git은 기록 (커밋 날짜)을 변경하지 않고 과거 커밋에서 사용자의 자격 증명을 변경합니다.

분류에서Dev

GIT를 사용하여 빌드 프로세스의 일부로 TFS 2015에서 변경 / 생성 태그 커밋

분류에서Dev

Git 부분 변경 커밋

분류에서Dev

마스터 시작부터 특정 커밋까지 git repo의 모든 변경된 파일 나열

분류에서Dev

Git에서 병합 커밋의 첫 번째 부모를 확인하는 방법

분류에서Dev

Git의 의도하지 않은 커밋

분류에서Dev

Git은 새 부모 커밋 위에 하나의 부모 커밋에서 리베이스합니다 (이전 부모 커밋이 부모 중 하나로 포함되지 않음).

분류에서Dev

Git : 커밋하지 않고 새 브랜치를 생성 할 때 마스터 변경 사항도 브랜치를 변경합니다.

분류에서Dev

유한 한 git 커밋 세트 중 하나에 의해 파일이 마지막으로 변경되었는지 여부를 어떻게 확인합니까?

분류에서Dev

git 브랜치의 루트를 변경하고 이전 커밋을 브랜치 HEAD로 유지 하시겠습니까?

분류에서Dev

로케일을 변경하지 않고 git의 언어를 영어로 변경

분류에서Dev

로케일을 변경하지 않고 git의 언어를 영어로 변경

분류에서Dev

HP vertica의 커밋되지 않은 모든 변경 사항 나열

분류에서Dev

커밋 된 변경 사항이 없다고 말하는 Git 커밋

분류에서Dev

부모를 변경하지 않고 그리드 컨테이너 시작 / 종료 외부의 배경색을 변경할 수 있습니까?

분류에서Dev

HEAD와 마지막 커밋 사이의 git diff는 경고를 제공합니다 : dangling symref 무시

분류에서Dev

특정 GIT 커밋 이후 변경되지 않는 모든 파일을 나열하는 방법

분류에서Dev

git에 대한 모든 변경 사항을 커밋하지 않고 메인 애플리케이션에서 Ruby Gem 테스트

분류에서Dev

커밋되지 않은 변경 사항이있는 Git Pull

분류에서Dev

나는 git pull --rebase를했고 이제는 내 브랜치에 다른 모든 사람의 커밋이 있습니다.

분류에서Dev

중간에 다른 커밋이있는 경우 모든 git 커밋을 하나의 커밋으로 결합하는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    Git rebase가 항상 새 커밋을 만들고 SHA-1 코드를 변경하지는 않습니까?

  2. 2

    git : 커밋 ID를 변경하지 않고 로컬 커밋 편집

  3. 3

    작성자를 변경하지 않고 Git 사인 오프 커밋

  4. 4

    현재 브랜치를 변경하지 않고 "git svn rebase"

  5. 5

    rebase를 사용하여 GIT에서 매우 오래된 커밋의 원격 커밋 메시지를 어떻게 변경합니까?

  6. 6

    두 개의 커밋을 병합하기 위해 git rebase를 수행하는 방법, 하나는 더 멀고 하나는 최근 커밋

  7. 7

    git 커밋의 경고

  8. 8

    Git-추가하지 않고 커밋 후 분기 변경

  9. 9

    Git은 기록 (커밋 날짜)을 변경하지 않고 과거 커밋에서 사용자의 자격 증명을 변경합니다.

  10. 10

    GIT를 사용하여 빌드 프로세스의 일부로 TFS 2015에서 변경 / 생성 태그 커밋

  11. 11

    Git 부분 변경 커밋

  12. 12

    마스터 시작부터 특정 커밋까지 git repo의 모든 변경된 파일 나열

  13. 13

    Git에서 병합 커밋의 첫 번째 부모를 확인하는 방법

  14. 14

    Git의 의도하지 않은 커밋

  15. 15

    Git은 새 부모 커밋 위에 하나의 부모 커밋에서 리베이스합니다 (이전 부모 커밋이 부모 중 하나로 포함되지 않음).

  16. 16

    Git : 커밋하지 않고 새 브랜치를 생성 할 때 마스터 변경 사항도 브랜치를 변경합니다.

  17. 17

    유한 한 git 커밋 세트 중 하나에 의해 파일이 마지막으로 변경되었는지 여부를 어떻게 확인합니까?

  18. 18

    git 브랜치의 루트를 변경하고 이전 커밋을 브랜치 HEAD로 유지 하시겠습니까?

  19. 19

    로케일을 변경하지 않고 git의 언어를 영어로 변경

  20. 20

    로케일을 변경하지 않고 git의 언어를 영어로 변경

  21. 21

    HP vertica의 커밋되지 않은 모든 변경 사항 나열

  22. 22

    커밋 된 변경 사항이 없다고 말하는 Git 커밋

  23. 23

    부모를 변경하지 않고 그리드 컨테이너 시작 / 종료 외부의 배경색을 변경할 수 있습니까?

  24. 24

    HEAD와 마지막 커밋 사이의 git diff는 경고를 제공합니다 : dangling symref 무시

  25. 25

    특정 GIT 커밋 이후 변경되지 않는 모든 파일을 나열하는 방법

  26. 26

    git에 대한 모든 변경 사항을 커밋하지 않고 메인 애플리케이션에서 Ruby Gem 테스트

  27. 27

    커밋되지 않은 변경 사항이있는 Git Pull

  28. 28

    나는 git pull --rebase를했고 이제는 내 브랜치에 다른 모든 사람의 커밋이 있습니다.

  29. 29

    중간에 다른 커밋이있는 경우 모든 git 커밋을 하나의 커밋으로 결합하는 방법은 무엇입니까?

뜨겁다태그

보관