[git] 이전 커밋에서 내 이름과 성을 변경할 수 있습니까?

모든 커밋에서 이름, 성 및 이메일을 변경하고 싶습니다. 가능합니까?



답변

사용 git-filter-branch.

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_NAMEGIT_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매핑 작성자 섹션 을 참조하십시오.


답변