එක් විශේෂිත බැඳීමක් සඳහා බැඳීම් කතුවරයා වෙනස් කරන්නේ කෙසේද?


2137

ඉතිහාසයේ එක් විශේෂිත කැපවීමක කතුවරයා වෙනස් කිරීමට මට අවශ්‍යය. එය අවසාන කැපවීම නොවේ.

මෙම ප්‍රශ්නය ගැන මම දනිමි - කැපවීමක කර්තෘ වෙනස් කරන්නේ කෙසේද?

නමුත් මම යමක් ගැන සිතමින් සිටිමි, එහිදී මම කැපවීම හෑෂ් හෝ කෙටි-හැෂ් මගින් හඳුනා ගනිමි.


Answers:


3607

ඔබ වෙනස් කිරීමට අවශ්‍ය කැපවීමට වඩා ඉතිහාසයේ පෙර ලක්ෂ්‍යයක අන්තර්ක්‍රියාකාරී ප්‍රතිප්‍රහාරය ( git rebase -i <earliercommit>). Rebased කරමින් අනාචාරයේ ලැයිස්තුවේ, සිට පෙළ වෙනස් 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 භාවිතා කළ යුතුය.
ඇම්බර්

31
පළමු කැපවීම වෙනස් කිරීමට ඔබට අවශ්‍ය නම් කුමක් කළ යුතුද? එහෙනම් කලින් කළ හැෂ් යනු කුමක්ද?
බ්‍රෙන්ඩන්

219
--no-editවිකල්පය භාවිතා කරන්න . git commit --amend --reset-author --no-editසංස්කාරකයක් විවෘත නොකරයි. Git 1.7.9 සිට ලබා ගත හැකිය.
5lava

53
ව්‍යාපෘතියේ මුල්ම කැපවීම වෙනස් කිරීමට බ්‍රෙන්ඩන්, භාවිතා කරන්නgit rebase -i --root
නෝවා පැසලාක්වා

491

මෙම ප්‍රශ්නයට පිළිගත් පිළිතුර අන්තර්ක්‍රියාකාරී ප්‍රතිප්‍රහාරයේ පුදුමාකාර ලෙස භාවිතා කිරීමකි, නමුත් අවාසනාවකට මෙන්, පසුව ඒකාබද්ධ වූ ශාඛාවක සිටි කතුවරයා වෙනස් කිරීමට අප උත්සාහ කරන්නේ නම් එය ගැටුම් පෙන්නුම් කරයි. වඩාත් සාමාන්‍යයෙන් එය ක්‍රියාත්මක නොවේ අවුල් සහගත ඉතිහාසය හැසිරවීමේදී.

Git ඉතිහාසය නැවත ලිවීම සඳහා පරිසර විචල්‍යයන් සැකසීම සහ සැකසීම මත රඳා පවතින ස්ක්‍රිප්ට් ධාවනය කිරීම පිළිබඳව මා තුළ බියක් ඇති බැවින්, මම මෙම ලිපිය පදනම් කරගෙන නව පිළිතුරක් ලියන්නේ මෙම පිළිතුරට සමාන නමුත් වඩා සම්පූර්ණයි.

සම්බන්ධිත පිළිතුර මෙන් නොව පහත සඳහන් දෑ පරීක්ෂා කර ක්‍රියා කරයි. නිරාවරණයේ පැහැදිලිකම සඳහා උපකල්පනය කරන්න, 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
පිරිසිදු කිරීම සඳහා refs / original / ... උපස්ථය මෙතැනින්
ඇලෙක්සිස්

5
--force-with-leaseවෙනුවට භාවිතා කිරීමට මම නිර්දේශ කරමි -f. එය ආරක්ෂිතයි.
ජේ බාසුසි

11
අවවාදයයි: git filter-branch -- --allමුල් කැපවීම සිදු වූ සෑම ශාඛාවකම කොමිස් වෙනස් වන බව මතක තබා ගන්න. ඔබට ප්‍රමාණවත් අක්තපත්‍ර නොමැති නම් (හෝ ඔබට වෙනත් ශාඛා ඉතිහාසය වෙනස් කිරීමට අවශ්‍ය නැත), මෙම පිළිතුර සමඟ ප්‍රවේශම් වීම හොඳය.
රිබමාර්

227

ගිතූබ් ප්‍රලේඛනයෙහි ශාඛාවක ඇති සියලුම කැපවීම් සඳහා බැඳීම් තොරතුරු ප්‍රතිස්ථාපනය කරන පිටපතක් අඩංගු වේ .

  • විචල්ය අගයන් වෙනස් කිරීමෙන් පසු පහත ස්ක්‍රිප්ට් පර්යන්තයෙන් ධාවනය කරන්න

    #!/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 කටත් අඩු කාලයකට පෙරය.
Artjom B.

පෙර පිළිතුරු කියවීමෙන් පසු මෙම පිළිතුර සොයාගත් විට, එය උත්සාහ කර බැලීම වටී යැයි මම සිතුවෙමි. කෙසේ වෙතත් මගේ නඩුවේදී එය බැඳීම් නාමය වෙනස් කළේ ආරම්භක කැපවීමේදී පමණි. මාර්ගය වන විට, මම පළමු පිළිතුරෙන් අදහස් අත්හදා බැලීමට පෙර. සමහර විට එය පද්ධතියට කෙසේ හෝ බලපානු ඇත.
රුස්ලාන් ජෙරසිමොව්

2
ඔබ clone/ භාවිතා කිරීමෙන් වැළකී සිටියහොත් push, ඔබ උපස්ථ නාම අවකාශයකින් අවසන් වන බව සලකන්න refs/original/. මෙම නාම අවකාශය බුද්ධිමත්ව ඉවත් කිරීමට මට ක්‍රමයක් සොයාගත නොහැකි විය, එබැවින් මම ඩිරෙක්ටරිය මකා දැමීම අවසන් කළෙමි .git/refs/original.
වාසිලිනොවිකොව්

1
උදා: OLD_EMAIL කිසිවක් නොගැලපේ නම් මෙය ප්‍රතිස්ථාපනයේ වෙනස්කම් ඇති කරන්නේ ඇයි? කිසියම් හේතුවක් නිසා කැපවීම් හැෂ් කිහිපයක් වෙනස් වේ.
mjs

1
මෙම පිළිතුර සඳහා මගේ භාවිත නඩුව නම්: මට ගිතුබ් ගිණුම් දෙකක් ඇත, එකක් මම නොදැනුවත්වම කොමිස් කිරීමට භාවිතා කළෙමි. මෙම ස්ක්‍රිප්ට් එක වැරදි බැඳීම් ඊමේල් / නම් නැවත නම් කිරීමෙන් මගේ සියලු කැපවීම් නිවැරදි කිරීමට උපකාරී විය. ඇත්ත වශයෙන්ම, මම වැරදි පරිශීලකයෙකු සමඟ කටයුතු කර ඇත්නම්, අපි කියමු, 50 වන කැපවීම 500 වන බැඳීමට, අපසරනය කළ කොමිස් 450 ක් ඇත. කෙසේ වෙතත්, ස්ක්‍රිප්ට් ධාවනය කිරීමෙන් පසු, ඇන්ඩ්‍රෙජ් පෙන්වා දුන් පරිදි, ඔබට රෙපෝ git push -fවෙත තල්ලු වෙනස්කම් කිරීමට බල කළ යුතුය.
LWY

171
  • ඔබගේ විද්‍යුත් ලිපිනය ගෝලීයව වින්‍යාසයට යළි පිහිටුවන්න:

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

  • සංස්කරණයකින් තොරව ඔබගේ කැපවීමේ කතුවරයා නැවත සකසන්න:

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


2
නැහැ, එය එසේ නොවේ. OP දෙස බලන්න: It's not last commit.ඉතින් ඔවුන් amendඑය කරන්නේ කෙසේද?
underscore_d

2
මෙය විශිෂ්ටයි, එය ලැජ්ජාවකි, නමුත් එය අවසාන කැපවීම පමණි. මට එය නවතම දෙකෙන් අවශ්‍ය විය, වාසනාවකට මෙන්, git reset HEAD~ඔබ විසින් යෝජනා කරන ලද රේඛා ධාවනය කර, ඊළඟ කැපවීම නැවත අතින් සිදු කරන ලදී. හොඳින් වැඩ කළා!
මැට් ෆ්ලෙචර්

2
ස්තූතියි! --Reset-author මා වෙනුවෙන් උපක්‍රමය කළේ එය නොමැතිව කතුවරයා වෙනස් වන නමුත් "කැපකරු" පැරණි කතුවරයාගේ විස්තර සමඟ රැඳී සිටින බැවිනි.
ලූකස් පී.

9
මගේ පසුගිය අනාචාරයේ හයක් විසින් අදාල කරුණ නිවැරදි කිරීමට: පළමු භාවිතා වත්මන් Git repo සඳහා නිවැරදි කතුවරයා සකස් 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 repo භාවිතයෙන් තල්ලු කරන්න git push --force-with-lease.
ඔලිබ්‍රේ

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 ස්තූතියි. assemla.com git repo, repo හි වෙබ් දර්ශනයේ සියලුම කර්තෘ යොමු කිරීම් වෙනස් කරන බවක් නොපෙනේ, නමුත් 'git pull / clone' හි ප්‍රති results ල සියල්ලම හොඳින් පෙනේ.
ජොනී t ටා

විශිෂ් solution විසඳුමක්, එය අපේක්ෂිත දේ පමණක් වෙනස් කරන අතර කැපවීමේ දිනය වැනි වෙනත් ක්ෂේත්‍ර නොවේ.
ගුයිලූම් ලෙමාට්‍රේ

12
ගිතූබ් ප්‍රලේඛනයේ සමාන පිටපතක්
ඔලිවියරඩම් 666

2
@ olivieradam666 එය චමත්කාරයක් මෙන් ක්‍රියා කරන අතර එය කියවීමට පහසුය
fregante

@ olivieradam666 ස්තූතියි. ඔබ එය පිළිතුරක් ලෙස සැබවින්ම එකතු කළ යුතු අතර එමඟින් වැඩි අවධානයක් ලැබෙනු ඇත.
seane

45

පෙර කැප වන්න:

රූප විස්තරය මෙහි ඇතුළත් කරන්න

සියලු කැපවීම් සඳහා කර්තෘ නිවැරදි කිරීමට ඔබට @ ඇම්බර්ගේ පිළිතුරෙන් විධානය යෙදිය හැකිය:

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
මගේ අරමුණු සඳහා වඩාත් හොඳින් සේවය කළ පිළිතුර මෙයයි, ස්තූතියි. මගේ විද්‍යුත් තැපැල් ලිපිනය වෙනස් කිරීමට මට අවශ්‍ය වූ බැවින් , මගේ .git / config යාවත්කාලීන කිරීමෙන් පසු --exec = "git commit --amend --reset-author" සමඟ ධාවනය කළ හැකිය.
ඩැටෝ

1
මට අමතක වූයේ ඇයිදැයි විශ්වාස නැත! දැන් කළා.
ඩැටෝ

විශිෂ්ට පිළිතුරක් සහ නිවැරදි කිරීමට ඉතා පහසුය. අන්වර්ථයට ආදරය කරන්න!
J_A_X

ඒක මට උදව් කළේ නැහැ. දැන් මට අඛණ්ඩ පුනරාවර්තනය අසාර්ථක දෝෂයක් ඇත
ඇලෙක්සි ෂ.

19

කිරීමට තව දුරටත් වැඩි දී Eugen Konkov පිළිතුර, root සිට ආරම්භ නසා, භාවිතා කිරීමට --rootධජය. මෙම --no-editධජය එය සමග ඔබ එක් එක් සිදු සඳහා සංස්කාරකට අදාල වී නැත ඇති නිසා, ද ප්රයෝජනවත් වේ.

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

1
පිළිතුරට ස්තූතියි. එය ක්‍රියාත්මක කිරීම සඳහා --interactive එකතු කිරීමට සිදු විය. git rebase --root --interactive --exec "git commit --amend --author = 'name <email>' --no-edit"
Sreeragh AR

Ree ශ්‍රීරාගර් ඔබ අදහස් කළේ කුමක්ද? ඇයි ඒක නැතිව වැඩ කළේ නැත්තේ --interactive, මොකද ඒක නැතිව වැඩ කළා.
විලි මෙන්ට්සෙල්

orkorwalsky --no-editයනු මෙය සැබවින්ම පහසු කරයි! +1
විලි මෙන්ට්සෙල්

orkorwalskiy මට හරියටම සන්දර්භය මතක නැත. එය මීට වසරකට පමණ පෙරය. ඉහත විධානය ක්‍රියාත්මක කිරීමෙන් මට තවමත් මෙම දෝෂය ලැබේ. "--Exec විකල්පය --interactive විකල්පය සමඟ භාවිතා කළ යුතුය" සහ --interactive එකතු කිරීමෙන් එය විසඳයි.
ශ්‍රීරාග් ඒආර්

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...

ඔබට පළමු පේළි කිහිපයක් ඉවත් කළ හැකිය.


10

පරිශීලකයා ඉක්මනින් වෙනස් කළ හැකි සහ අනෙක් අයට කිසිදු අතුරු ආබාධයක් ඇති කළ හැකි මාර්ගයක් සොයා ගන්න.

සරල හා පැහැදිලි ක්‍රමයක්:

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

සවිස්තරාත්මක මෙහෙයුම්

  • බැඳීම් ල logs ු-සටහන් පෙන්වන්න සහ ඔබට වෙනස් කිරීමට අවශ්‍ය ඔබගේ කැපවීමට පෙර ඇති කැපවීමේ හැඳුනුම්පත සොයා ගන්න:
git log
  • git rebase ආරම්භය තෝරාගත් කැපවීමේ හැඳුනුම්පතේ සිට මෑත කාලීනව ආපසු හැරවීම දක්වා:
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
  • එය සාර්ථකව තහවුරු කර ගැනීම සඳහා ඔබේ ප්‍රතිරෝධය තහවුරු කර ඉදිරියට ගෙන යන්න 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
git push --force-with-lease

5

ඔබට වෙනස් කිරීමට අවශ්‍ය කැපවීම අවසාන කැපවීම නොවේ නම්, පහත පියවර අනුගමනය කරන්න. ඔබේ කැපවීම විවිධ ශාඛාවල තිබේ නම් පළමුව එම ශාඛාවට මාරු වන්න.

git checkout branch_name

ඔබට වෙනස් කිරීමට අවශ්‍ය කැපවීමට පෙර කැපවීම සොයාගෙන එහි හැෂ් සොයා ගන්න. ඉන්පසු rebase විධානය නිකුත් කරන්න.

git rebase -i -p hash of commit

එවිට ඔබට වෙනස් කිරීමට අවශ්‍ය කොමිස් සඳහා සංස්කාරකයක් විවෘත කර 'සංස්කරණය' ඇතුළත් කරනු ඇත. සුපුරුදු 'පික්' විකල්පය සමඟ අනෙක් අයව තබන්න. වෙනස් වූ පසු 'esc' යතුර ඇතුළත් කර wq! පිටවීමට.

ඉන්පසු සංශෝධන විකල්පය සමඟ git commit විධානය නිකුත් කරන්න.

git commit --amend --author = "පරිශීලක නාමය විද්‍යුත් තැපෑල" - no-edit

ඉන්පසු පහත විධානය නිකුත් කරන්න.

git rebase - දිගටම

දේශීය නිධිය තුළ කර්තෘ යාවත්කාලීන කළ පසු, වෙනස්කම් දුරස්ථ ගබඩාවට තල්ලු කරන්න.


මම හිතන්නේ මෙය කළ හැකි සරලම ක්‍රමය මෙයයි. මම භාවිතා කළේ reword විධානයක් වන අතර එය අසාර්ථක වේ. ඒ වෙනුවට සංස්කරණ විධානය භාවිතා කළ යුතු බව මම ඉගෙන ගතිමි. සමහර විට “සංස්කරණය” යතුර ඉස්මතු කළ හැකිය. පිළිතුරට ස්තූතියි han චන්න බී Ber
බර්ක්

පියවර අනුගමනය කිරීම ඇත්තෙන්ම පහසුය. ඔබට ස්තුතියි!
හබීබා

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. බැඳීම් හැඳුනුම්පත සහ වැඩි විස්තර ලබා ගැනීමට පළමුව "git log" ටයිප් කරන්න
  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 push සම්භවය HEAD: BRANCH NAME -f [කරුණාකර -f Force push ගැන සැලකිලිමත් වන්න]

    කැමති git push -fහෝgit push origin HEAD: dev -f


නියම පිළිතුර, ඔබට git pushවිධාන උදාහරණයකින් 6 වන ස්ථානය යාවත්කාලීන කළ හැකිද?
ලූකස් 'සෙවේරියන්' ග්‍රෙලා

1
@ Lukasz'Severiaan'Grela සංස්කරණය කරන ලදි, කරුණාකර දැන් පරීක්ෂා කරන්න, ස්තූතියි
Kirtikumar A.

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අවම වශයෙන් ගිට්ලැබ් භාවිතා කිරීමෙන් මට එය සංශෝධනය කළ නොහැකි බව මට පෙනී ගියේය. එය ඒකාබද්ධ කිරීම බැඳීමක් ලෙස පෙන්වන නමුත් මට එම # ෂා වෙත නැවත පැමිණිය නොහැක. මෙම ලිපිය ප්‍රයෝජනවත් බව මට පෙනී ගියේය.

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

මෙම කේත පේළි තුන ඒකාබද්ධ කිරීමේ පණිවිඩය (කර්තෘ වැනි) වෙනස් කිරීමේ කාර්යය ඉටු කළේය.


1

ඔබට මෙම විධානයන් github හි නිල පිටුවෙන් භාවිතා කළ හැකිය

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

මෙහි ඔබට පැරණි විද්‍යුත් තැපෑල නව පරිශීලක නාමය සහ විද්‍යුත් තැපැල් ලිපිනය ලෙස වෙනස් කළ හැකිය.

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.