Tüm taahhütlerimde adımı, soyadımı ve e-postamı değiştirmek istiyorum, mümkün mü?
Tüm taahhütlerimde adımı, soyadımı ve e-postamı değiştirmek istiyorum, mümkün mü?
Yanıtlar:
Kullanın 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 "$@"'
Bu sadece yazarı etkiler, kaydedeni değil (çoğu işlem için yazarla aynı olacaktır). Bunları da yeniden yazmak istiyorsanız, GIT_COMMITTER_NAME
ve GIT_COMMITTER_EMAIL
değişkenlerini ayarlayın .
Yeniden yazma geçmişiyle ilgili standart uyarı geçerlidir; bunu yalnızca henüz paylaşılmamış tarihe yapın.
Kılavuz şimdi --env-filter
örneklerinde kullanarak bir çözüm içermektedir : https://git-scm.com/docs/git-filter-branch#_examples :
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
msysgit
, hala erişiminiz var bash
. Aksi takdirde, hiçbir fikrim yok.
Seçilen tüm işlemelerde hem yazarı hem de göndereni yeniden yazmak için:
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 push --all origin --force
Başka yazar yoksa şunları yapabilirsiniz:
git filter-branch --commit-filter 'export GIT_AUTHOR_NAME="authorname"; \
export GIT_AUTHOR_EMAIL=mail@example.com; git commit-tree "$@"'
Aşağıdaki komut dosyasını örneğin kaydedin ~/.bin/git-replace-author
ve şunu kullanarak çalıştırın, örneğin:
git replace-author "John Ssmith" "John Smith" "johnsmith@example.com"
Hiçbir argüman olmadan, mevcut e-posta adresinizi Git yapılandırmasına göre kullanmak için tüm işlemleri adınızla günceller.
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'
Raw (indirmek için)
~/.bin/
Kullanıcıların içinde olmalıdır $PATH
böylece çalıştırın ve dosya ihtiyaçları çalıştırılabilir olması: chmod +x ~/.bin/git-replace-author
.
Sadece taahhütlerinizi dünyaya itmediyseniz. Diğer bilge herkesin deposunda eski adınız vardır, bu da herkesin adını değiştiremezsiniz.
Git 2.24 ile (Q4 2019), git filter-branch
(ve BFG) kullanımdan kaldırıldı .
Eşdeğeri, using newren/git-filter-repo
ve bunun örnek bölümü olacaktır :
cd repo
git filter-repo --mailmap my-mailmap
ile my-mailmap
:
Correct Name <correct@email.com> <old@email.com>
Bu, herhangi biri tarafından yapılan herhangi bir işlemin yazar adını ve e-postasını değiştirir. <old@email.com>
Tam sözdizimi için git shortlog
eşleme yazarı bölümüne bakın