Git की फ़िल्टर-शाखा कमांड शक्तिशाली है, लेकिन यह कुछ भी गैर-तुच्छ के लिए उपयोग करने के लिए बहुत ही बुरा है, उदाहरण के लिए, यदि आपके पास सही करने के लिए एक से अधिक लेखक हैं।
यहाँ एक विकल्प मुझे उपयोगी लगा, जो git-shortlog मैनपेज में वर्णित .mailmap फीचर का उपयोग करता है। यह एक लेखक मानचित्रण तंत्र प्रदान करता है जिसका उपयोग हम गिट लॉग की प्रारूपण सुविधा के साथ कर सकते हैं। हम इसका उपयोग कमानों के नामित अनुक्रम को चुनने और संशोधित करने के लिए आदेश उत्पन्न करने के लिए कर सकते हैं।
उदाहरण के लिए, मान लें कि आप एक शाखा $ BRANCH पर लेखक को सही करना चाहते हैं, एक प्रतिबद्ध $ START से शुरू।
आपको अपनी रिपॉजिटरी की शीर्ष निर्देशिका में एक .mailmap फ़ाइल बनाने की ज़रूरत है जो मौजूदा लेखक के नाम को सही करता है। आप मौजूदा लेखक नामों की एक सूची प्राप्त कर सकते हैं:
git shortlog -se
आपको इस तरह एक .mailmap फ़ाइल के साथ समाप्त करने की आवश्यकता है (कहते हैं):
You <you@somewhere.org> cowens@localmachine
You <you@somewhere.org> root@localmachine
अब आप $ BRANCH2 के रूप में $ BRANCH को फिर से लिखने के लिए कमांड जनरेट करने के लिए git log के फॉर्मेटिंग फीचर का उपयोग कर सकते हैं।
git checkout -b $BRANCH2 $START
git log --reverse --pretty=format:"cherry-pick %H; commit --amend --author='%aN <%aE>' -C %H" $START..$BRANCH | sh -
पहला कमांड प्रतिबद्ध $ $ से अंकुरित एक नई खाली शाखा बनाता है। $ START और फिर $ BRANCH के अंत के लिए प्रत्येक कमिटमेंट के लिए, दूसरी कमांड चेरी मूल शाखा को वर्तमान ब्रांच $ BRANCH2 के अंत में चुनती है, और लेखक को सही तरीके से सेट करने के लिए इसे संशोधित करती है।
यह भी आमतौर पर लागू होता है - इसे अपने ~ / .itconfig में डालें:
[alias]
# git reauthor $START..$END
reauthor = !sh -c 'eval `git log --reverse --topo-order --pretty=format:\"git cherry-pick %H && git commit --amend -C %H --author=\\\"%aN <%aE>\\\" && \" $0 ` "echo success" '
इसलिए जब आपको लेखकों को सही करने की आवश्यकता होती है, तो अब आपको केवल एक .mapfile उत्पन्न करने और करने की आवश्यकता है:
git checkout -b $BRANCH2 $START
git reauthor $START..$BRANCH
मूल शाखा रेफ को नए के लिए फिर से असाइन किया जा सकता है, और नया हटा दिया गया है:
git checkout $BRANCH
git reset --hard $BRANCH2 # be careful with this command
git branch -d $BRANCH2
git
इस तरह के उद्देश्यों के लिए उपयोग करने के बारे में प्रश्न स्टैक ओवरफ्लो पर बेहतर पूछे जाते हैं ।