Jeg skrev et simpelt script på skolens computer og overførte ændringerne til Git (i en repo, der var på mit pendrive, som var klonet fra min computer derhjemme). Efter flere commits gik det op for mig, at jeg committede ting som root-bruger.
Er der nogen måde at ændre forfatteren af disse commits til mit navn?
At ændre forfatteren (eller committer) ville kræve at omskrive hele historien. Hvis du er okay med det og synes, at det er det værd, så bør du tjekke git filter-branch. Man-siden indeholder flere eksempler for at få dig i gang. Bemærk også, at du kan bruge miljøvariabler til at ændre navnet på forfatteren, committeren, datoer osv. -- se afsnittet "Environment Variables" i git man page.
Specifikt kan du rette alle de forkerte forfatternavne og e-mails for alle grene og tags med denne kommando (kilde: (kilde: GitHub help)):
#!/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
Du kan også gøre det:
git filter-branch --commit-filter '
if [ "$GIT_COMMITTER_NAME" = "<Old Name>" ];
then
GIT_COMMITTER_NAME="<New Name>";
GIT_AUTHOR_NAME="<New Name>";
GIT_COMMITTER_EMAIL="<New Email>";
GIT_AUTHOR_EMAIL="<New Email>";
git commit-tree "$@";
else
git commit-tree "$@";
fi' HEAD
Bemærk, at hvis du bruger denne kommando i Windows-kommandoprompten, skal du bruge "
i stedet for '
:
git filter-branch --commit-filter "
if [ "$GIT_COMMITTER_NAME" = "<Old Name>" ];
then
GIT_COMMITTER_NAME="<New Name>";
GIT_AUTHOR_NAME="<New Name>";
GIT_COMMITTER_EMAIL="<New Email>";
GIT_AUTHOR_EMAIL="<New Email>";
git commit-tree "$@";
else
git commit-tree "$@";
fi" HEAD
One liner, men vær forsigtig hvis du har et repository med flere brugere - dette vil ændre alle commits til at have den samme (nye) forfatter og committer.
git filter-branch -f --env-filter "GIT_AUTHOR_NAME='Newname'; GIT_AUTHOR_EMAIL='new@email'; GIT_COMMITTER_NAME='Newname'; GIT_COMMITTER_EMAIL='new@email';" HEAD
Med linjeskift i strengen (hvilket er muligt i bash):
git filter-branch -f --env-filter "
GIT_AUTHOR_NAME='Newname'
GIT_AUTHOR_EMAIL='new@email'
GIT_COMMITTER_NAME='Newname'
GIT_COMMITTER_EMAIL='new@email'
" HEAD