2016-12-18 2 views
1

git rebase로 git repo (github 호스팅)를 정리하고 커밋을 'fixup'옵션을 사용하여 하나의 작업으로 결합하고자합니다.
내 레포는 3 년 전으로 거슬러 올라갑니다. 그래서 나는이 단계적으로 할 수 있다고 생각했습니다.
예를 들어, 최근 5 번의 커밋은 모두 정상이지만 6th-10th는 하나의 단일 커밋으로 결합되어야합니다. 그래서 나는이 작업을 수행 :Git 대화 형 rebase (fixup) 결합 된 커밋시 원본 날짜/시간 스탬프 보존

역순으로 나열하고 10 커밋
git rebase -i @~10 

내가 선택하고 싶은 것입니다.
다음 커밋은 모두 'fixup'입니다.
나머지 5 개는 '선택'으로 설정됩니다. 나는이 완료되면

, 나는 실행

git push origin +master 

문제는 커밋이 결합되어 있지만, github의의 코드보기에 표시된 날짜가 현재의 것입니다.
원본 커밋의 날짜/시간 스탬프를 그대로 유지하기 만하면됩니다. 이것이 가능한가?

답변

0

가능한 해결 방법은 git rebase ...을 사용할 때 --committer-date-is-author-date 옵션을 사용하는 것이지만 대화 형 rebase와 호환되지 않습니다.

그래서 당신은 시도 할 수 있습니다 :

  • 를 대화 형 REBASE를 수행 한 후
  • 을의 REBASE이 완료되면, make a git filter-branch을 커밋 날짜를 복원 :

    git filter-branch --env-filter 'GIT_COMMITTER_DATE=$GIT_AUTHOR_DATE; export GIT_COMMITTER_DATE' 
    
+0

제안 해 주셔서 감사합니다. 내가 제안한 필터 분기에 대해 읽어야합니다. 아마도 커밋 내역을 살펴보고 미성년자를 결합하여 원본의 날짜/시간 스탬프를 유지하는 단일 커밋으로 쉽게 전환 할 수 있습니까? –

+0

@RichardDragon은 정말로 : 당신은 처음에는 rebase interactive를 할 수 있습니다. 그리고 나서, --committer-date-is-author-date와 함께 가장 최근의 커밋 (결합되지 않은 커밋)에 대한 두번째 rebase를 할 수 있습니다. – VonC

+0

위대한, 당신 제안은 나를 위해 일하는 것, 감사합니다! –