Xüsusi tövsiyə üçün öhdəliyin müəllifini necə dəyişdirmək olar?

Tarixi bir tövsiyənin müəllifini dəyişdirmək istəyirəm. Bu son əməl deyil.

Mən bu sual haqqında bilirəm - necə bir gitmənin yazarını dəyişə bilərəm?

Amma hash və ya qısa hash tərəfindən bir öhdəlik müəyyən bir şey düşünürəm.

1564
15 июня '10 в 7:00 2010-06-15 07:00 MicTech, 15 İyun ' 10' da saat 7: 00-da, 2010-06-15 07:00
@ 9 cavab

Tarixi bir tarixdən əvvəl dəyişiklik etmək lazımdır ( git rebase -i <earliercommit> ) törətmədən əvvəl interaktiv rebase. Köçürülmüş olan əmrlər siyahısında, dəyişdirmək istədiyiniz birinin xaşının yanında edit üçün mətn dəyişdirin. Sonra, keçidinizi təyanı dəyişdirməyi xahiş etdikdə, bu istifadə edin:

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

Misal üçün, ABCDE-f tarixçəsi ilə F tarixini ABCDE-fCD nin müəllifini dəyişmək istəyirsənsə, onda ...

  1. git rebase -i B ( burada git rebase -i B çalışmasından sonra nə görəcəksiniz )
    • A redaktə etmək lazımdırsa, git rebase -i --root istifadə edin
  2. edit etmək üçün CD üçün xəttləri dəyişdirin
  3. Rebaza başlamazdan sonra ilk olaraq C də dayandırılacaq
  4. Siz git commit --amend --author="Author Name <email@address.com>"
  5. Daha sonra git rebase --continue
  6. Bu, yenidən D də dayandırılacaq
  7. Sonra yenidən git commit --amend --author="Author Name <email@address.com>"
  8. git rebase --continue
  9. Köçürülmə tamamlanacaq.
  10. git push -f yenilənməsi ilə qaynağınızı yeniləmək üçün git push -f istifadə edin.
2672
15 июня '10 в 7:31 2010-06-15 07:31 cavab 15 iyun 2010-cu il saat 7: 30-da baş verib

Bu sualın qəbul etdiyi cavab , interaktiv köçürmənin təəccüblü şəkildə ağıllı şəkildə istifadə edilməsidir, lakin dəyişdirməyə çalışdığımız müəllifin daha sonra birləşən filial üçün müəllif tərəfindən istifadə edildiyi təqdirdə, təəssüf ki, münaqişələr yaranır. Daha ümumi vəziyyətdə, çirkli hekayələr işləyərkən bu işləmir.

Git tarixini dəyişdirmək üçün ətraf mühit dəyişənlərinin yerləşdirilməsindən və sıfırlanmasından asılı olan skriptlərdən yayınmağından qorxduğum üçün, mən bu yazıya əsaslanan yeni cavab yazıram , lakin bu cavab daha çoxdur.

Aşağıdakılar müvafiq sınaqdan fərqli olaraq sınaqdan keçirilir və işləyir. 03f482d6 üçün 03f482d6 bir 03f482d6 , biz əvəz etməyə çalışdığımız müəllif və 42627abe yeni bir 42627abe bir 42627abe .

border=0
  1. Dəyişməyə çalışdığımız bir öhdəlik götür.

     git checkout 03f482d6 
  2. Müəllif dəyişikliyini edin.

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

    İndi 42627abe bərabər bir hash ilə yeni bir 42627abe .

  3. Orijinal filialı yoxlayın.

  4. Köhnə öhdəliyini yerli olaraq yenisi ilə dəyişdirin.

     git replace 03f482d6 42627abe 
  5. Əvəzetmə əsasında bütün gələcək əmrləri yenidən yaza bilərsiniz.

     git filter-branch -- --all 
  6. Təmizlik üçün dəyişdirin.

     git replace -d 03f482d6 
  7. Yeni tarixə vurun (yalnız aşağıda göstərilən uğursuzluqdan istifadə edin və yalnız git log və / və ya git diff ilə funksionallıq yoxlanıldıqdan sonra istifadə edin).

     git push --force-with-lease 

4-6 əvəzinə sadəcə yeni tövsiyəyə keçə bilərsiniz:

 git rebase -i 42627abe 
369
04 марта '15 в 5:11 2015-03-04 05:11 Cavab verilir merlin2011 Mart 04 '15 da 5:11 2013-03-04 05:11
09 июня '15 в 19:02 2015-06-09 19:02 Cavab olivieradam666 tərəfindən verilir. 09 iyun '19: 15 19:02 2015-06-09 19:02
  • Yapılandırmada e-poçt ünvanınızı sıfırlayın:

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

  • İndi tənzimləmə olmadan tövsiyənizin müəllifini sıfırlayın:

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

82
05 апр. Cavab pravbeatle verilir 05 Apr 2017-04-05 15:44 '17 at 3:44 pm 2017-04-05 15:44

Aşağıdakı əmri istifadə edərək, sonuncu tirajın müəllifini dəyişə bilərsiniz.

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

Ancaq birdən çox yazarın adını dəyişmək istəyirsinizsə, bir az çətindir. İnteraktiv yenidən qurmağı başlamaq, daha sonra əmrləri düzgün olaraq qeyd etmək lazımdır, sonra onları bir-bir dəyişdirmək və bitirmək.

git rebase -i ilə yenidən başlayın. O sizə belə bir şey göstərəcəkdir.

Müəllifin adını dəyişdirmək istədiyiniz əmrlər üçün edit üçün pick sözünü dəyişdirin.

Sonra redaktoru bağlayın. Yeni başlayanlar üçün Escape düyməsini basın, sonra yazın :wqEnter düyməsini basın.

Sonra termininizi heç bir şey olmadığı kimi görürsünüz. Siz həqiqətən interaktiv bir permütanın ortasındasınız. İndi yuxarıdakı əmri istifadə edərək, yazarınızın adını dəyişdirməyin zamanı. Redaktor yenidən açacaq. git rebase --continue ilə yaxınlaşın və yenidən git rebase --continue . Düzəliş etmək istədiyiniz düzəliş miqdarı üçün eyni şeyi təkrarlayın. Mesajı qəbul etdiyiniz zaman interaktiv xülasənin sona çatdığına əmin ola bilərsiniz. .

69
29 авг. Cavab Fatih 29 avqustda verilir. 2015-08-29 03:52 '15 at 3:52 2015-08-29 03:52

Bağladığınız suallara cavablar yaxşı cavabdır və vəziyyətinizi əhatə edir (başqa bir sual daha ümumidir, çünki bir neçə öhdəliklərin yenidən yazılması daxildir).

git filter-branch üçün bir bəhanə kimi git filter-branch bu tövsiyə üçün yazarın adını və / və ya yazarın elektron poçtunu yenidən yazmaq üçün bir yazı yazdım:

15 июня '10 в 8:24 2010-06-15 08:24 Chris Johnsen tərəfindən 15 iyun 'da 8: 24-də cavab verildi. 2010-06-15 08:24

git rebase -i bu maraqlı bit var:

Birinə iki və ya daha çox əmri sıfırlamak istəyirsinizsə, "pick" komutunu ikinci və sonrakı "squash" və ya "fixup" . Müqavilənin müxtəlif müəllifləri olsaydı, katlanmış düzəldici ilk əməlin müəllifinə aid ediləcək. Katlanmış bir tövsiyə üçün təklif olunan mesajlaşma mesajı, ilk əmanət və əmrlərin "squash" əmri ilə bağlı mesajların birləşdirilməsidir, amma bu, əmr vermək "fixup" etməyi "fixup" .

  • ABCDEF tarixiniz ABCDEF ,
  • BD (= 2 əməl) əmsalını dəyişdirmək istəyirsən,

sonra edə bilərsiniz:

  • git config user.name "Correct new name"
  • git config user.email "correct@new.email"
  • boş əməllər yaratmaq (hər bir işə görə bir):
    • yönləndirmə məqsədləri üçün bir mesaj lazımdır
    • git commit --allow-empty -m "empty"
  • yenidən başla əməliyyatını başla
    • git rebase -i B^
    • B^ ana element B seçir.
  • hər bir dəyişiklik üçün dəyişiklik etməyiniz üçün əvvəl boş bir vəzifə qoymalısınız
  • Onlar üçün squash üçün pick dəyişdirmək lazımdır.

git rebase -i B^ nə bir nümunə sizə verəcəkdir:

 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 

onu dəyişdirin:

 # change commit B 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 author pick sha-commit-empty2 empty squash sha-commit-D some message # leave commit EF alone pick sha-commit-E some message pick sha-commit-F some message 

Mesajları düzəltməsini xahiş edəcək:

 # This is a combination of 2 commits. # The first commit message is: empty # This is the 2nd commit message: ...some useful commit message there... 

və ilk bir neçə sətri silin.

12
28 авг. cavab dnozay 28 avqust verilir . 2013-08-28 04:03 '13 'da 4:03' də 2013-08-28 04:03

Mərkəzi bir depo istifadə edərkən Amber cavabına bir addım daha var:

mərkəzi keçid mərkəzini yeniləməyə məcbur etmək üçün basın.

Bir filialda bir çox insana sahib olmaq üçün diqqətli olun, çünki bu, davamlılıq itkisinə səbəb ola bilər.

11
20 дек. Cavab Fabian76 tərəfindən verilir 20 dekabr. 2013-12-20 18:06 '13 at 18:06 2013-12-20 18:06

Önündən Fix:

2019

30 июня '18 в 15:16 2018-06-30 15:16 Cavab Eugen Konkov tərəfindən 30 İyun 18 'də saat 15:16' də 2018-06-30 15:16 'də verilir

etiketləri ilə bağlı digər suallar və ya bir sual verin