एक विशिष्ट प्रतिबद्ध के लिए प्रतिबद्ध लेखक को कैसे बदलें?


2107

मैं इतिहास में एक विशिष्ट प्रतिबद्धता के लेखक को बदलना चाहता हूं। यह अंतिम प्रतिबद्धता नहीं है।

मैं इस सवाल के बारे में जानता हूं - मैं एक कमिट के लेखक को कैसे बदल सकता हूं?

लेकिन मैं कुछ के बारे में सोच रहा हूं, जहां मैं हैश या शॉर्ट-हैश द्वारा प्रतिबद्ध की पहचान करता हूं।


जवाबों:


3563

इतिहास में एक बिंदु से पहले का इंटरएक्टिव रिबास उस कमिटमेंट की तुलना में जिसे आपको संशोधित करने की आवश्यकता है ( git rebase -i <earliercommit>)। में प्रतिबद्ध की सूची रिबेस जा रहा है, से पाठ बदलने pickके लिए editएक आप बदलना चाहते हैं के हैश के बगल में। फिर जब git आपको प्रतिबद्धता बदलने के लिए कहता है, तो इसका उपयोग करें:

git commit --amend --author="Author Name <email@address.com>" --no-edit

उदाहरण के लिए, अपने लिए प्रतिबद्ध इतिहास है अगर A-B-C-D-E-Fसाथ Fके रूप में HEAD, और आप के लेखक को बदलना चाहते हैं Cऔर Dहै, तो क्या तुम करोगी ...

  1. निर्दिष्ट करें git rebase -i B( यहां एक उदाहरण है कि आप git rebase -i Bकमांड को निष्पादित करने के बाद क्या देखेंगे )
    • यदि आपको संपादित करने की आवश्यकता है A, तो उपयोग करेंgit rebase -i --root
  2. दोनों के लिए लाइनों को बदलें Cऔर Dसे pickकरने के लिएedit
  3. संपादक से बाहर निकलें (vim के लिए, यह Esc और फिर टाइपिंग दबाएगा :wq)।
  4. एक बार जब रिबेज शुरू हो जाता है, तो यह सबसे पहले रुक जाएगा C
  5. आप करेंगे git commit --amend --author="Author Name <email@address.com>"
  6. फिर git rebase --continue
  7. यह फिर से विराम देगा D
  8. तो आप git commit --amend --author="Author Name <email@address.com>"फिर से
  9. git rebase --continue
  10. रिबास पूरा होगा।
  11. git push -fअपडेट किए गए कमिट के साथ अपने मूल को अपडेट करने के लिए उपयोग करें ।

90
अच्छा जवाब, लेकिन शुरुआती लोगों के लिए: पहले एक ऐसा कमिटमेंट पाएं, जिसे आप बदलना चाहते हैं, फिर चलाएंgit rebase -i <commit>
मैथ्यू बायरन

47
यदि आप नहीं जानते कि आप किस संपादक में हैं, तो इसका उत्तर है vim। सहेजने और छोड़ने के लिए, Esc: wq Enter टाइप करें। दूसरी ओर, अगर यह नैनो है और आपको नीचे की ओर "WriteOut: ^ O" जैसी चीजें दिखाई देती हैं, तो आपको इसके बजाय Ctrl + O, Enter, Ctrl + X का उपयोग करना चाहिए।
अंबर

30
क्या होगा यदि आप पहले प्रतिबद्ध को संशोधित करना चाहते हैं? पिछली प्रतिबद्ध हैश क्या है?
ब्रेंडेन

218
--no-editविकल्प का उपयोग करें । git commit --amend --reset-author --no-editएक संपादक नहीं खोलेगा। जीआईटी 1.7.9 के बाद से उपलब्ध है।
5

51
@ बेंडेन प्रोजेक्ट में पहली बार कमिटमेंट को संशोधित करने के लिए, का उपयोग करेंgit rebase -i --root
नूह पासालक्वा

488

स्वीकार किए जाते हैं जवाब इस सवाल का इंटरैक्टिव रिबेस के एक अद्भुत चतुर उपयोग है, लेकिन यह दुर्भाग्य से संघर्ष दर्शाती है अगर प्रतिबद्ध हम एक शाखा जो बाद में विलय हो गया पर हुआ करता था के लेखक को बदलने के लिए कोशिश कर रहे हैं। आम तौर पर, यह काम नहीं करता जब गड़बड़ इतिहास से निपटने।

चूँकि मैं स्क्रिप्ट चलाने के बारे में आशंकित हूं जो कि इतिहास को फिर से लिखने के लिए पर्यावरण चर की स्थापना और परेशान करने पर निर्भर है, मैं इस पोस्ट के आधार पर एक नया उत्तर लिख रहा हूं जो इस उत्तर के समान है लेकिन अधिक पूर्ण है।

लिंक किए गए उत्तर के विपरीत, निम्नलिखित का परीक्षण और काम कर रहा है। स्पष्टीकरण की स्पष्टता के लिए मान लें कि 03f482d6वह प्रतिबद्ध है जिसका लेखक हम बदलने की कोशिश कर रहे हैं, और 42627abeनए लेखक के साथ प्रतिबद्ध है।

  1. हम जिस कमिट को संशोधित करने का प्रयास कर रहे हैं, उसकी जाँच करें।

    git checkout 03f482d6
    
  2. लेखक को बदलें।

    git commit --amend --author "New Author Name <New Author Email>"
    

    अब हमारे पास हैश के साथ एक नई प्रतिबद्धता है 42627abe

  3. मूल शाखा की जाँच करें।

  4. पुराने कमिट को नए के साथ स्थानीय रूप से बदलें।

    git replace 03f482d6 42627abe
    
  5. प्रतिस्थापन के आधार पर भविष्य के सभी कमानों को फिर से लिखें।

    git filter-branch -- --all
    
  6. स्वच्छता के लिए प्रतिस्थापन निकालें।

    git replace -d 03f482d6
    
  7. नए इतिहास को पुश करें (केवल उपयोग - प्रवर्तन यदि नीचे विफल रहता है, और केवल विवेक के साथ git logऔर / या जाँच के बाद git diff)।

    git push --force-with-lease
    

4-6 के बजाय आप बस नए कमिट पर रिबेस कर सकते हैं:

git rebase -i 42627abe

9
कृपया चरण 2 के बाद अपनी मूल शाखा को फिर से जांचने के लिए एक नोट दें।
बेंजामिन रिग्स

42
यह भयावह के लिए बहुत स्पष्ट विकल्प दिखता है git rebase -i। इस git replaceबात को पहले कभी नहीं सुना । +1
फ्रैक्टलस्पेस

3
साफ करने के लिए रेफरी / मूल / ... बैकअप यहां
एलेक्सिस

5
मैं --force-with-leaseइसके बजाय का उपयोग करने की सलाह देता हूं -f। यह सुरक्षित है।
जय बज़ुजी

11
चेतावनी: इस बात git filter-branch -- --allसे अवगत रहें कि सभी शाखाएँ बदल रही हैं, जो मूल वचन में थीं। यदि आपके पास पर्याप्त प्रमाण नहीं हैं (या आप केवल अन्य शाखाओं के इतिहास को बदलना नहीं चाहते हैं), तो इस उत्तर से सावधान रहना अच्छा है।
रिबमार

225

Github प्रलेखन में एक स्क्रिप्ट होती है जो एक शाखा में सभी कमिट्स के लिए कमेंट जानकारी को प्रतिस्थापित करती है

  • चर मानों को बदलने के बाद टर्मिनल से निम्न स्क्रिप्ट चलाएँ

    #!/bin/sh
    
    git filter-branch --env-filter '
    
    OLD_EMAIL="your-old-email@example.com"
    CORRECT_NAME="Your Correct Name"
    CORRECT_EMAIL="your-correct-email@example.com"
    
    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
    
  • सही इतिहास को GitHub में धकेलें:

    git push --force --tags origin 'refs/heads/*'
    

    या यदि आप शाखाओं के चयनित संदर्भों को आगे बढ़ाना पसंद करते हैं तो उपयोग करें

    git push --force --tags origin 'refs/heads/develop'
    

12
यह केवल एक ही नहीं, सभी कमिट्स में इसे बदल देता है। मजेदार बात, मैंने यह 30 मिनट से भी कम समय पहले किया था।
आर्टजोम बी।

जब मुझे यह उत्तर पिछले लोगों को पढ़ने के बाद मिला तो मुझे लगा कि यह कोशिश करने लायक है और यह काम किया। हालाँकि मेरे मामले में इसने कमिट नाम केवल प्रारंभिक प्रतिबद्ध में बदल दिया। वैसे, पहले मैंने पहले उत्तर से विचारों की कोशिश की। हो सकता है कि इसने किसी तरह व्यवस्था को प्रभावित किया हो।
रुस्लान Gerasimov

2
ध्यान दें कि यदि आप clone/ का उपयोग करने से बचते हैं push, तो आप एक बैकअप नेमस्पेस के साथ समाप्त करेंगे refs/original/। मुझे समझदारी से इस नाम स्थान को हटाने का कोई रास्ता नहीं मिला, इसलिए मैंने निर्देशिका को हटाने का .git/refs/originalकाम किया, जिसने काम किया।
वासिलीनोविकोव

यह परिणाम रेपो में परिवर्तन के रूप में क्यों होता है यदि उदाहरण के लिए OLD_EMAIL कुछ भी मेल नहीं खाता है? किसी कारण से कुछ (लेकिन सभी नहीं!) हैश परिवर्तन।
mjs

1
इस उत्तर के लिए मेरा उपयोग मामला है: मेरे पास दो गीथूब खाते हैं, एक जिसे मैं अनायास ही कमिट करने के लिए उपयोग करता था। इस स्क्रिप्ट ने गलत कमिट ईमेल / नामों का नाम बदलकर मेरे सभी कमिट्स को ठीक करने में मदद की। बेशक, अगर मैं गलत उपयोगकर्ता के साथ काम कर रहा हूं, तो हम कहते हैं, ५० वीं से ५०० वीं प्रतिबद्ध है, ४५० डायवर्टेड कमिट होंगे। वैसे भी, स्क्रिप्ट चलाने के बाद, जैसा कि @andrej ने बताया, आपको git push -fरेपो में पुश परिवर्तन के लिए मजबूर करने की आवश्यकता होगी ।
LWY

164
  • अपने ईमेल को विश्व स्तर पर कॉन्फ़िगर करने के लिए रीसेट करें:

    git config --global user.email example@email.com

  • अब आवश्यक किए बिना अपनी प्रतिबद्धता के लेखक को रीसेट करें:

    git commit --amend --reset-author --no-edit


2
नहीं यह नहीं। ओपी को देखें: It's not last commit.तो वे amendइसे कैसे करेंगे ?
अंडरस्कोर_डी

2
यह बहुत अच्छा है, यह शर्म की बात है कि यह केवल अंतिम प्रतिबद्ध है, हालांकि। मुझे इसकी नवीनतम दो पर जरूरत थी, सौभाग्य से, तो बस एक git reset HEAD~, आपकी सुझाई गई लाइनों को चलाया, फिर अगली बार मैन्युअल रूप से किया। ठीक काम किया!
मैट फ्लेचर

2
धन्यवाद! Thereset-author ने मेरे लिए चाल चली, क्योंकि इसके बिना लेखक बदल जाता है लेकिन "कमिटर" पुराने लेखक के विवरण के साथ रहता है।
लुकास पी।

9
मेरे पिछले छह कमिट्स को ठीक करने के लिए: पहले Git रेपो का उपयोग करके git config --local user.name FirstName LastName और के लिए सही लेखक सेट करें git config --local user.email first.last@example.com। फिर अंतिम छह कमिट का उपयोग करके आवेदन करें git rebase --onto HEAD~6 --exec "git commit --amend --reset-author --no-edit" HEAD~6। अंत में इसे दूरस्थ Git रेपो का उपयोग करके धक्का दें git push --force-with-lease
ओलिबर

@olibre यह एक आकर्षण की तरह काम करता है, धन्यवाद।
ब्रूनो गैस्पारेटो

88

आप नीचे दिए गए आदेश का उपयोग करके अंतिम प्रतिबद्ध के लेखक को बदल सकते हैं।

git commit --amend --author="Author Name <email@address.com>"

हालाँकि, यदि आप एक से अधिक लेखक नाम बदलना चाहते हैं, तो यह थोड़ा मुश्किल है। आपको एक इंटरेक्टिव रिबेस शुरू करने की जरूरत है, फिर एडिट के रूप में चिह्नित करें फिर उन्हें एक-एक करके संशोधित करें और समाप्त करें।

के साथ पुन: शुरू करें git rebase -i। यह आपको कुछ इस तरह दिखाएगा।

https://monosnap.com/file/G7sdn66k7JWpT91uiOUAQWMhPrMQVT.png

आप लेखक के नाम को बदलना चाहते हैं, उसके लिए pickकीवर्ड बदलें edit

https://monosnap.com/file/dsq0AfopQMVskBNknz6GZZwlWGVwWU.png

फिर संपादक को बंद करें। शुरुआती के लिए, Escapeफिर टाइप करें :wqऔर हिट करें Enter

तब आप अपने टर्मिनल को देखेंगे जैसे कुछ भी नहीं हुआ। वास्तव में आप एक इंटरैक्टिव रिबेस के बीच में हैं। अब यह ऊपर दिए गए आदेश का उपयोग करके अपनी प्रतिबद्ध लेखक के नाम में संशोधन करने का समय है। यह संपादक को फिर से खोल देगा। बाहर निकलें और साथ में छूट जारी रखें git rebase --continue। जिस गणना को आप संपादित करना चाहते हैं, उसके लिए वही दोहराएं। आप यह सुनिश्चित कर सकते हैं कि जब आप No rebase in progress?संदेश प्राप्त करते हैं तो इंटरेक्टिव रिबेस समाप्त हो जाता है ।


क्या आप कृपया अपने चित्रों को अपडेट कर सकते हैं?
शिम्मी वेइटहैंडलर

1
यदि आपको कई बदलाव करने हैं, तो उन्हें व्यक्तिगत रूप से संपादित करने के बजाय, आप pickकार्रवाई भी कर सकते हैं , और प्रत्येक पंक्ति के बाद जोड़ सकते हैंexec git commit --no-edit --amend --author="MyNewAuthor <my@new-auth.or>"
पियरे-ओलिवियर वेर

60

जिस प्रश्न से आप जुड़े हैं उसके उत्तर अच्छे उत्तर हैं और आपकी स्थिति को कवर करते हैं (अन्य प्रश्न अधिक सामान्य है क्योंकि इसमें कई कमियों को फिर से लिखना शामिल है)।

एक कोशिश के बहाने के रूप में git filter-branch, मैंने एक दिए गए वचन के लिए लेखक का नाम और / या लेखक ईमेल को फिर से लिखने के लिए एक स्क्रिप्ट लिखी:

#!/bin/sh

#
# Change the author name and/or email of a single commit.
#
# change-author [-f] commit-to-change [branch-to-rewrite [new-name [new-email]]]
#
#     If -f is supplied it is passed to "git filter-branch".
#
#     If <branch-to-rewrite> is not provided or is empty HEAD will be used.
#     Use "--all" or a space separated list (e.g. "master next") to rewrite
#     multiple branches.
#
#     If <new-name> (or <new-email>) is not provided or is empty, the normal
#     user.name (user.email) Git configuration value will be used.
#

force=''
if test "x$1" = "x-f"; then
    force='-f'
    shift
fi

die() {
    printf '%s\n' "$@"
    exit 128
}
targ="$(git rev-parse --verify "$1" 2>/dev/null)" || die "$1 is not a commit"
br="${2:-HEAD}"

TARG_COMMIT="$targ"
TARG_NAME="${3-}"
TARG_EMAIL="${4-}"
export TARG_COMMIT TARG_NAME TARG_EMAIL

filt='

    if test "$GIT_COMMIT" = "$TARG_COMMIT"; then
        if test -n "$TARG_EMAIL"; then
            GIT_AUTHOR_EMAIL="$TARG_EMAIL"
            export GIT_AUTHOR_EMAIL
        else
            unset GIT_AUTHOR_EMAIL
        fi
        if test -n "$TARG_NAME"; then
            GIT_AUTHOR_NAME="$TARG_NAME"
            export GIT_AUTHOR_NAME
        else
            unset GIT_AUTHOR_NAME
        fi
    fi

'

git filter-branch $force --env-filter "$filt" -- $br

+1 धन्यवाद। असेंबली.कॉम git रेपो रेपो के वेब दृश्य में सभी लेखक संदर्भों को बदलने के लिए प्रकट नहीं होता है, लेकिन 'गिट पुल / क्लोन' के परिणाम सभी कार्य ठीक दिखाई देते हैं।
जॉनी उटाह

महान समाधान, क्योंकि यह केवल वही बदल रहा है जो इरादा है, और अन्य क्षेत्र नहीं, जैसे प्रतिबद्ध दिनांक।
गुइलुमे लेमाट्रे


2
@ olivieradam666 कि एक आकर्षण की तरह काम करता है और यह आसान है पढ़ने के लिए
fregante

@ olivieradam666 धन्यवाद। आपको वास्तव में इसे एक उत्तर के रूप में जोड़ना चाहिए ताकि इसे अधिक ध्यान मिले।
शॉन

44

इससे पहले प्रतिबद्ध:

यहां छवि विवरण दर्ज करें

सभी कमिट के लिए लेखक को ठीक करने के लिए आप @ अंबर के उत्तर से कमांड लागू कर सकते हैं:

git commit --amend --author="Author Name <email@address.com>"

या अपने नाम और ईमेल का पुन: उपयोग करने के लिए आप बस लिख सकते हैं:

git commit --amend --author=Eugen

आदेश के बाद प्रतिबद्ध:

यहां छवि विवरण दर्ज करें

उदाहरण के लिए सभी शुरू से बदलने के लिए 4025621:

यहां छवि विवरण दर्ज करें

आपको दौड़ना चाहिए:

git rebase --onto 4025621 --exec "git commit --amend --author=Eugen" 4025621

नोट: एक लेखक जैसे नाम और ईमेल पते के साथ रिक्त स्थान शामिल करने के लिए, लेखक को बच गए उद्धरणों से घिरा होना चाहिए। उदाहरण के लिए:

git rebase --onto 4025621 --exec "git commit --amend --author=\"Foo Bar <foo@bar.com>\"" 4025621

या इस उपनाम को इसमें जोड़ें ~/.gitconfig:

[alias]
    reauthor = !bash -c 'git rebase --onto $1 --exec \"git commit --amend --author=$2\" $1' --

और फिर चलाएं:

git reauthor 4025621 Eugen

1
यह सत्यापित करने के लिए कि कमांड अपेक्षित रूप से काम करती है, मैंने के आउटपुट की समीक्षा की git shortlog -e -s
टेलर एड्मिस्टन

5
यह वह उत्तर है जिसने मेरे उद्देश्यों को सबसे अच्छा काम किया है, धन्यवाद। और चूंकि मैं सिर्फ अपना ई-मेल पता समायोजित करना चाहता था , मैं अपने .it / config को अपडेट करने के बाद --exec = "git प्रतिबद्ध --amend --reset-author" के साथ चला सकता था।
दातो

1
एह, मुझे यकीन नहीं है कि मैं क्यों भूल गया! हो गया अभी।
दातो

महान जवाब और ठीक करने के लिए बहुत आसान है। उर्फ से प्यार करो!
J_A_X

इससे मुझे मदद नहीं मिली। अब मेरे पास रिबास असफल त्रुटि है
एलेक्सी श।

17

यदि आप एक केंद्रीकृत भंडार का उपयोग कर रहे हैं तो एम्बर के उत्तर के लिए एक अतिरिक्त कदम है:

git push -f केंद्रीय रिपॉजिटरी के अद्यतन को मजबूर करने के लिए।

सावधान रहें कि एक ही शाखा पर बहुत सारे लोग काम नहीं कर रहे हैं क्योंकि यह स्थिरता को बर्बाद कर सकता है।


16

जब ऐसा git rebase -iहोता है तो डॉक में कुछ दिलचस्प होता है:

आप एक में दो या अधिक प्रतिबद्ध गुना चाहते हैं, आदेश की जगह "pick"के साथ दूसरे और बाद में प्रतिबद्ध के लिए "squash"या "fixup"। यदि कमिट्स में अलग-अलग लेखक थे, तो पहले प्रतिबद्ध लेखक के लिए तह प्रतिबद्ध को जिम्मेदार ठहराया जाएगा। फोल्ड किए गए कमिट के लिए सुझाया गया कमिट मैसेज पहले कमिट और "squash"कमांड वाले लोगों के कमिटमेंट्स का कॉनसेप्ट है, लेकिन "fixup"कमांड के साथ कमिट्स के कमिट मैसेज को छोड़ देता है ।

  • यदि आप का इतिहास है A-B-C-D-E-F,
  • और आप कमिट बदलना चाहते हैं Bऔर D(= 2 कमिट्स),

तो आप कर सकते हैं:

  • git config user.name "Correct new name"
  • git config user.email "correct@new.email"
  • खाली कमिट बनाएं (प्रत्येक कमिट के लिए एक):
    • आपको पुन: उद्देश्य के लिए एक संदेश की आवश्यकता है
    • git commit --allow-empty -m "empty"
  • रीबेस ऑपरेशन शुरू करें
    • git rebase -i B^
    • B^के जनक का चयन करता है B
  • आप संशोधित करने के लिए प्रत्येक प्रतिबद्ध से पहले एक खाली प्रतिबद्ध रखना चाहते हैं
  • आप बदलना चाहते हैं जाएगा pickकरने के लिए squashउन लोगों के लिए।

git rebase -i B^आप क्या देंगे का उदाहरण :

pick sha-commit-B some message
pick sha-commit-C some message
pick sha-commit-D some message
pick sha-commit-E some message
pick sha-commit-F some message
# pick sha-commit-empty1 empty
# pick sha-commit-empty2 empty

इसे बदलें:

# change commit B's author
pick sha-commit-empty1 empty
squash sha-commit-B some message
# leave commit C alone
pick sha-commit-C some message
# change commit D's author
pick sha-commit-empty2 empty
squash sha-commit-D some message
# leave commit E-F alone
pick sha-commit-E some message
pick sha-commit-F some message

यह आपको संदेशों को संपादित करने के लिए प्रेरित करेगा:

# This is a combination of 2 commits.
# The first commit's message is:

empty

# This is the 2nd commit message:

...some useful commit message there...

और आप पहले कुछ पंक्तियों को हटा सकते हैं।


16

यूजेन कोनकोव प्रतिक्रिया में आगे , रूट कमिट से शुरू करने के लिए, --rootध्वज का उपयोग करें । --no-editझंडा भी मददगार है

git rebase --root --exec "git commit --amend --author='name <email>' --no-edit"

इसने सभी कमिट पर काम किया और बदल गया।
सागरकापासी ० ९९

1
जवाब के लिए धन्यवाद। इसे काम करने के लिए जोड़-घटाव करना पड़ा। git rebase --root --interactive --exec "git प्रतिबद्ध --amend --author = 'नाम <email>' --no-edit"
श्रीराघ AR AR

8

एक ऐसा तरीका खोजें जो उपयोगकर्ता को जल्दी से बदल सके और जिसका दूसरों पर कोई दुष्प्रभाव न हो।

सरल और स्पष्ट तरीका:

git config user.name "New User"
git config user.email "newuser@gmail.com"

git log
git rebase -i 1f1357
# change the word 'pick' to 'edit', save and exit

git commit --amend --reset-author --no-edit
git rebase --continue

git push --force-with-lease

विस्तृत ऑपरेशन

  • कमिट लॉग दिखाएं और अपनी आईडी के आगे उस कमिट आईडी का पता लगाएं जिसे आप बदलना चाहते हैं:
git log
  • जीआईटी रिबास की शुरुआत कमिटेड आईडी से हाल ही में हुई उलटफेर से होती है:
git config user.name "New User"
git config user.email "newuser@gmail.com"
git rebase -i 1f1357

# change word pick to edit, save and exit
edit 809b8f7 change code order 
pick 9baaae5 add prometheus monitor kubernetes
edit 5d726c3 fix liquid escape issue   
edit 3a5f98f update tags
pick 816e21c add prometheus monitor kubernetes
  • रिबास अगली प्रतिबद्ध आईडी पर रुकेगा, आउटपुट:
Stopped at 809b8f7...  change code order 
You can amend the commit now, with
  git commit --amend 

Once you are satisfied with your changes, run

  git rebase --continue
  • comfirm और अपने छूट जारी रखें इसे सफलतापूर्वक पूरा करें refs/heads/master.
# each continue will show you an amend message
# use git commit --amend --reset-author --no-edit to comfirm
# use git rebase --skip to skip
git commit --amend --reset-author --no-edit
git rebase --continue
git commit --amend --reset-author --no-edit
...
git rebase --continue
Successfully rebased and updated refs/heads/master.
  • अद्यतन करने के लिए जोर धक्का
git push --force-with-lease

5

यदि आप जिस कमिटमेंट को बदलना चाहते हैं, वह अंतिम कमिटमेंट नहीं है, तो नीचे दिए गए चरणों का पालन करें। अगर आपका कमिटमेंट अलग ब्रांच में है तो सबसे पहले उस ब्रांच में जाएं।

git चेकआउट शाखा_नाम

आप जिस हैश को बदलना चाहते हैं, उसके पहले प्रतिबद्ध खोजें और उसके हैश का पता लगाएं। फिर रिबास कमांड जारी करें।

git rebase -i -p हैश ऑफ कमिट

फिर एक संपादक खुल जाएगा और उन बदलावों के लिए 'संपादन' दर्ज करेगा जिन्हें आप बदलना चाहते हैं। डिफ़ॉल्ट 'पिक' विकल्प के साथ दूसरों को छोड़ दें। एक बार 'एस्क' कुंजी दर्ज करें और विक! बाहर निकलने के लिए।

फिर संशोधन विकल्प के साथ git कमिट जारी करें।

git कमिट --amend --author = "उपयोगकर्ता नाम ईमेल" --no-edit

फिर निम्न आदेश जारी करें।

git rebase - कॉन्टिन्यू

एक बार प्रतिबद्ध लेखक को स्थानीय रिपॉजिटरी में अपडेट किया जाता है, तो परिवर्तनों को दूरस्थ रिपॉजिटरी में धकेल दें।


मुझे लगता है कि यह करने का सबसे सरल तरीका है। मैं reword कमांड का उपयोग कर रहा था और वह विफल हो गया। मुझे पता चला कि मुझे इसके बजाय एडिट कमांड का उपयोग करने की आवश्यकता है। हो सकता है कि "एडिट" कीवर्ड को हाइलाइट किया जा सके। उत्तर @ChannaB 👍 के लिए धन्यवाद
बर्क

चरणों का पालन करना वास्तव में आसान है। धन्यवाद!
हबीबा

4

इस समस्या के लिए एक आलसी दृष्टिकोण भी है, खासकर यदि आपके पास एक से अधिक प्रतिबद्ध हैं जिन्हें आप बदलना चाहते हैं। मेरे मामले में, मेरे पास एक गलत लेखक के साथ कई नई शाखाएँ थीं, तो इससे मुझे क्या मदद मिली:

अपनी मूल शाखा में जाएं:

git checkout develop

इससे नई शाखा बनाएँ:

git checkout -b myFeature develop 

एक प्रतिबद्ध के रूप में प्रतिबद्ध जानकारी के बिना इसे मिलाएं:

git merge --no-commit --squash branchWrongAuthor

आप परिवर्तनों को चरणबद्ध करना भी चाह सकते हैं:

git stage .

लेखक का नाम बदलें और परिवर्तन करें:

git commit --amend --author "New Author Name <New Author Email>" -m "new feature added"

और यही है, आप परिवर्तनों को आगे बढ़ा सकते हैं।

git push

आप उसके बाद एक गलत लेखक के साथ शाखा को हटा सकते हैं।


4

पुश किए जाने के बाद लेखक का नाम बदलने का कदम

  1. पहले आईडी और अधिक जानकारी प्राप्त करने के लिए "गिट लॉग" टाइप करें
  2. git rebase i HEAD ~ 10 (10 रिबास पर प्रदर्शित करने के लिए कुल प्रतिबद्ध है)

    If you Get anything like below

    fatal: It seems that there is already a rebase-merge directory, and I wonder if you are in the middle of another rebase. If that is the case, please try

    git rebase (--continue | --abort | --skip) If that is not the case, please rm -fr ".git/rebase-merge" and run me again. I am stopping in case you still have something valuable there.

  3. फिर अपनी जरूरत के अनुसार "git rebase --continue" या "git rebase --abort" टाइप करें

    • अब आपकी विंडो खुल जाएगी, कीबोर्ड से "i" कुंजी पर क्लिक करें
    • फिर आप 10 से कमिट की सूची प्राप्त करेंगे [क्योंकि हमने ऊपर 10 प्रतिबद्ध पारित किए हैं] नीचे की तरह

    pick 897fe9e simplify code a little

    pick abb60f9 add new feature

    pick dc18f70 bugfix

  4. अब आपको नीचे दिए गए कमांड को एडिट करने की जरूरत है, जिसे आप नीचे संपादित करना चाहते हैं

    pick 897fe9e simplify code a little exec git commit --amend --author 'Author Name <author.name@mail.com>' pick abb60f9 add new feature exec git commit --amend --author 'Author Name <author.name@mail.com>' pick dc18f70 bugfix exec git commit --amend --author 'Author Name <author.name@mail.com>'

    1. यही है, अब बस ESC दबाएं: wq और आप सभी सेट हैं

    2. फिर git पुश ओरिजिन HEAD: BRANCH NAME -f [कृपया-फ़ोर्स पुश का ध्यान रखें]

    की तरह git push -fयाgit push origin HEAD: dev -f


शानदार जवाब, क्या आप git pushकमांड 6 को कमांड के उदाहरण से अपडेट कर सकते हैं ?
लुकाज़ 'सेवरियान' ग्रीला

1
@ Lukasz'Severiaan'Grela ने संपादित किया, कृपया अब जांचें, धन्यवाद
कीर्तिकुमार ए।

3

अपनी समिति का नाम और ईमेल विश्व स्तर पर बदलना:

$ git config --global user.name "John Doe"
$ git config --global user.email "john@doe.org"

रिपॉजिटरी में आपका कमेटी का नाम और ईमेल बदलना:

$ git config user.name "John Doe"
$ git config user.email "john@doe.org"

लेखक की सूचना को अगली प्रतिबद्धताओं के लिए बदलना:

$ git commit --author="John Doe <john@doe.org>"

संकेत : अन्य स्थिति और अधिक जानकारी के लिए पोस्ट संदर्भ पढ़ें ।


2

यदि आपको जो बदलने की आवश्यकता है, वह अंतिम प्रतिबद्ध है और कोई अन्य आपकी रिपॉजिटरी का उपयोग नहीं कर रहा है, तो आप अपनी अंतिम प्रतिबद्ध को पूर्ववत कर सकते हैं:

git push -f origin last_commit_hash:branch_name 

अपनी प्रतिबद्ध लेखक का नाम बदलें:

git commit --amend --author "type new author here"

खुलने वाले संपादक से बाहर निकलें और अपने कोड को फिर से धक्का दें:

git push

2

मर्ज कमिट मैसेज के लिए, मैंने पाया कि मैं इसे rebaseकम से कम गिटलैब का उपयोग करके संशोधित नहीं कर सकता । यह एक कमिट के रूप में मर्ज दिखाता है, लेकिन मैं उस #sha पर रीबेस नहीं कर सकता। मैंने पाया कि यह पोस्ट सहायक है।

git checkout <sha of merge>
git commit --amend # edit message
git rebase HEAD previous_branch

कोड की इस तीन पंक्तियों ने मर्ज कमिट मैसेज (जैसे लेखक) को बदलने का काम किया।


1

आप इन आदेशों का उपयोग जीथब के आधिकारिक पृष्ठ से कर सकते हैं

https://help.github.com/en/github/using-git/changing-author-info

यहाँ आज्ञा है

#!/bin/sh

git filter-branch --env-filter '

OLD_EMAIL="your-old-email@example.com"
CORRECT_NAME="Your Correct Name"
CORRECT_EMAIL="your-correct-email@example.com"

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

यहाँ आप नए उपयोगकर्ता नाम और ईमेल पते को बदलने के लिए पुराने ईमेल को बदल सकते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.