Jeg skrev et enkelt skript på skolens datamaskin, og overførte endringene til Git (i en repo som var på pendrive, klonet fra datamaskinen min hjemme). Etter flere overleveringer innså jeg at jeg overleverte ting som root-bruker.
Er det noen måte å endre forfatteren av disse commits til mitt navn?
Endring av forfatter (eller committer) vil kreve omskriving av hele historikken. Hvis det er greit for deg og du synes det er verdt det, bør du sjekke ut git filter-branch. Man-siden inneholder flere eksempler for å komme i gang. Vær også oppmerksom på at du kan bruke miljøvariabler for å endre navnet på forfatteren, committer, datoer osv. -- se avsnittet "Environment Variables" på git man-siden.
Spesielt kan du fikse alle feil forfatternavn og e-post for alle grener og koder med denne kommandoen (kilde: GitHub-hjelp):
#!/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
Det kan du også gjøre:
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
Merk at hvis du bruker denne kommandoen i Windows-ledeteksten, må du bruke "
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 forsiktig hvis du har et depot med flere brukere - dette vil endre alle commits til å ha 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 (som er mulig 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