मैं अपने सभी कमिट में अपना नाम, उपनाम और ईमेल बदलना चाहूंगा, क्या यह संभव है?
मैं अपने सभी कमिट में अपना नाम, उपनाम और ईमेल बदलना चाहूंगा, क्या यह संभव है?
जवाबों:
का उपयोग करें 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_NAME
और GIT_COMMITTER_EMAIL
चर सेट करें ।
मानक चेतावनी इतिहास लागू होता है फिर से लिखने के बारे में; केवल उस इतिहास के लिए करें जिसे अभी तक साझा नहीं किया गया है।
मैनुअल में अब --env-filter
इसका उदाहरण सहित , एक समाधान का उपयोग करना शामिल है : 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
, तो आपके पास अभी भी पहुंच है bash
। अन्यथा, मुझे कोई सुराग नहीं है।
सभी चयनित कमिट्स में लेखक और कमटर दोनों को फिर से लिखना:
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
यदि कोई अन्य लेखक नहीं हैं, तो आप कर सकते हैं:
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 config के अनुसार उपयोग करने के लिए आपके नाम के साथ सभी अपडेट करता है।
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'
कच्चा (डाउनलोड करने के लिए)
~/.bin/
उपयोगकर्ताओं के अंदर होना चाहिए $PATH
और फ़ाइल को निष्पादन योग्य बनाने की आवश्यकता है, इसलिए चलाएँ chmod +x ~/.bin/git-replace-author
:।
केवल तभी जब आपने अपने कमिट को दुनिया में नहीं धकेला है। अन्य बुद्धिमान हर किसी के अपने रेपो में आपका पुराना नाम होता है जो कि संभावना नहीं है कि आप हर किसी को बदल सकते हैं।
Git 2.24 (Q4 2019), git filter-branch
(और BFG) के साथ पदावनत किया गया है ।
समतुल्य होगा, उपयोग करना 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
मैपिंग लेखक अनुभाग देखें