1

그래서 나는 git repo의 역사를 다시 쓰고 싶습니다. 이제 내가 바꾸고 싶은 모든 커밋이 이미 게시되고 푸시되었습니다. 게시 된 repos에 기록을 다시 쓰는 것은 나쁜 습관이라는 것을 알고 있습니다. 그러나이 저장소에는 포크가없고 단일 마스터 브랜치 만 있습니다. 이로 인해 재 작성이 더 안전 해졌습니까?게시 된 Repo에서 Git 저자 수정하기

그렇다면 특정 작성자가 새로운 작성자에게 특정 날짜 이후 모든 커밋 작성자를 변경하고 싶습니다. 다음 코드는 github에이 작업을 수행하기 위해 제공하는 것입니다 :

#!/bin/sh 

git filter-branch --env-filter ' 
OLD_EMAIL="[email protected]" 
CORRECT_NAME="Your Correct Name" 
CORRECT_EMAIL="[email protected]" 
if [ "$GIT_COMMITTER_EMAIL" = "$OLD_EMAIL" ] 
then 
    export GIT_COMMITTER_NAME="$CORRECT_NAME" 
    export GIT_COMMITTER_EMAIL="$CORRECT_EMAIL" 
fi 
if [ "$GIT_AUTHOR_EMAIL" = "$OLD_EMAIL" ] 
then 
    export GIT_AUTHOR_NAME="$CORRECT_NAME" 
    export GIT_AUTHOR_EMAIL="$CORRECT_EMAIL" 
fi 
' --tag-name-filter cat -- --branches --tags 

사람이 6 월 20 일 이후 특정 날짜, 말 이후에만 변경 커밋 내 요구 사항을 포함하도록 변경할 수 있습니까?

또한 효과를 확인한 후이 변경 사항을 쉽게 취소 할 수 있습니까?

답변

0

이렇게하면 다시 기록하는 것이 더 안전합니까? 누군가가 당신이 다시 작성하려고 커밋을 복제 한 경우

는 그들은 때 역사의 변화 놀라게 될 것입니다. 원래 커밋의 맨 위에 로컬 커밋이있는 경우 일부 정리가 필요하지만 약간만 수행해야합니다. 리포가 많이 사용 된 것 같지 않으므로, 위험은 무시할 만하게 보일 수 있습니다. 최악의 시나리오는 사소한 불편입니다.

누군가 6 월 20 일 이후 특정 날짜 이후로 만 커밋을 변경해야한다는 요구 사항을 포함하도록 변경할 수 있습니까?

나는 git filter-branch으로 날짜 제한을 지정할 수 있다고 생각하지 않습니다. 그러나 수정 범위를 지정할 수 있습니다. 변경하고자하는 개정판을 찾으려면 예를 들어 git log --before 'June 20'을보고 변경하는 것이 좋습니다.

또한
git filter-branch --env-filter ' 
# ... no change, as in your post 
' -f SHA.. 

, 쉽게 효과를 본 후에이 변경을 취소 할 수 있습니다 : 당신이 SHA가 있으면,이 같은 스크립트의 끝 부분을 변경?

함께 예를 들어, 지점의 백업을 만듭니다 :

git branch master-bak 

이 현재 분기의 복사본을 만듭니다. 당신이 작성한대로 master 브랜치를 가지고 있기 때문에, 지금 master에 있다고 가정합니다. 이렇게하면 백업이 생성됩니다.

당신은 당신이 백업에서 지점의 원래 상태로 복원 할 수 있습니다 위의 git filter-branch 명령의 결과에 만족하지 않은 경우 : 철저하고 신속한 답변을 위해

git reset --hard master-bak 
+0

감사합니다 많이! –