모든 커밋에서 이름, 성 및 이메일을 변경하고 싶습니다. 가능합니까?
답변
git filter-branch --commit-filter 'if [ "$GIT_AUTHOR_NAME" = "Josh Lee" ];
then export GIT_AUTHOR_NAME="Hobo Bob"; export GIT_AUTHOR_EMAIL=hobo@example.com;
fi; git commit-tree "$@"'
이것은 커미터가 아닌 작성자에게만 영향을줍니다 (대부분의 커밋에서 작성자와 동일 함). 이것도 다시 작성하려면 GIT_COMMITTER_NAME
및 GIT_COMMITTER_EMAIL
변수를 설정하십시오 .
표준 경고 역사 적용을 재 작성에 대한; 아직 공유되지 않은 역사에만 그렇게하십시오.
2018 년 6 월 업데이트
이제 설명서에는 https://git-scm.com/docs/git-filter-branch#_examples--env-filter
예제에를 사용하는 솔루션이 포함되어 있습니다 .
git filter-branch --env-filter '
if test "$GIT_AUTHOR_EMAIL" = "root@localhost"
then
GIT_AUTHOR_EMAIL=john@example.com
fi
if test "$GIT_COMMITTER_EMAIL" = "root@localhost"
then
GIT_COMMITTER_EMAIL=john@example.com
fi
' -- --all
답변
선택한 모든 커밋에서 작성자와 커미터를 모두 다시 작성하려면 :
git filter-branch --commit-filter \
'if [ "$GIT_AUTHOR_NAME" = "OldAuthor Name" ]; then \
export GIT_AUTHOR_NAME="Author Name";\
export GIT_AUTHOR_EMAIL=authorEmail@example.com;\
export GIT_COMMITTER_NAME="Commmiter Name";\
export GIT_COMMITTER_EMAIL=commiterEmail@example.com;\
fi;\
git commit-tree "$@"'
답변
다른 작성자가없는 경우 다음을 수행 할 수 있습니다.
git filter-branch --commit-filter 'export GIT_AUTHOR_NAME="authorname"; \
export GIT_AUTHOR_EMAIL=mail@example.com; git commit-tree "$@"'
답변
아래 스크립트를 예를 들어 저장 ~/.bin/git-replace-author
하고 다음을 사용하여 실행하십시오.
git replace-author "John Ssmith" "John Smith" "johnsmith@example.com"
인수가 없으면 Git 구성에 따라 현재 이메일 주소를 사용하도록 모든 커밋을 사용자 이름으로 업데이트합니다.
DEFAULT_NAME="$(git config user.name)"
DEFAULT_EMAIL="$(git config user.email)"
export OLD_NAME="${1:-$DEFAULT_NAME}"
export NEW_NAME="${2:-$DEFAULT_NAME}"
export NEW_EMAIL="${3:-$DEFAULT_EMAIL}"
echo "Old:" $OLD_NAME "<*>"
echo "New:" "$NEW_NAME <$NEW_EMAIL>"
echo "To undo, use: git reset $(git rev-parse HEAD)"
git filter-branch --env-filter \
'if [ "$GIT_AUTHOR_NAME" = "${OLD_NAME}" ]; then
export GIT_AUTHOR_NAME="${NEW_NAME}"
export GIT_AUTHOR_EMAIL="${NEW_EMAIL}"
export GIT_COMMITTER_NAME="${NEW_NAME}"
export GIT_COMMITTER_EMAIL="${NEW_EMAIL}"
fi'
원시 (다운로드)
답변
당신이 세상에 당신의 커밋을 푸시하지 않은 경우에만. 다른 현명한 사람은 모두 자신의 레포에 이전 이름이 있으므로 모든 사람을 변경할 수 없습니다.
답변
Git 2.24 (2019 년 4 분기) git filter-branch
(및 BFG)는 더 이상 사용되지 않습니다. .
동등한 것은 using newren/git-filter-repo
및 예제 섹션입니다 .
cd repo
git filter-repo --mailmap my-mailmap
와 함께 my-mailmap
:
Correct Name <correct@email.com> <old@email.com>
이는 작성자 이름과 모든 커밋의 이메일을 다음으로 대체합니다. <old@email.com>
정확한 구문은 git shortlog
매핑 작성자 섹션 을 참조하십시오.