Belirli bir taahhüt için taahhüt yazarını nasıl değiştirebilirim?


Yanıtlar:


3564

Etkileşimli rebase, tarihte değiştirmeniz gereken bir noktadan daha erken bir noktadan ( git rebase -i <earliercommit>). Yeniden temel alınan taahhütler listesinde, metni değiştirmek istediğiniz karma pickdeğerinin edityanındaki ile değiştirin. Sonra git taahhüdü değiştirmenizi istediğinde şunu kullanın:

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

Örneğin, taahhüt tarih ise A-B-C-D-E-File Folarak HEADve yazarı değiştirmek istiyorum Cve Do zaman olur ...

  1. Belirtin git rebase -i B( burada git rebase -i Bkomutu yürüttükten sonra göreceklerinizin bir örneği verilmiştir )
    • düzenlemeniz gerekiyorsa A, kullanıngit rebase -i --root
  2. Her ikisi için de satırları değiştirin Cve Dgelen picketmekedit
  3. Editörden çıkın (vim için, bu Esc tuşuna basıp yazarak :wq).
  4. Rebase başladığında, ilk önce C
  5. Yapabilirdin git commit --amend --author="Author Name <email@address.com>"
  6. Sonra git rebase --continue
  7. Adresinde tekrar duraklar D
  8. Sonra git commit --amend --author="Author Name <email@address.com>"tekrar yaparsın
  9. git rebase --continue
  10. Rebase tamamlanacaktı.
  11. git push -fBaşlangıç ​​noktanızı güncellenmiş taahhütlerle güncellemek için kullanın .

90
İyi cevap, ama yeni başlayanlar için: önce değiştirmek istediğinizden önce bir taahhüt bul, sonra koşgit rebase -i <commit>
Mathew Byrne

47
Hangi düzenleyicide olduğunuzu bilmiyorsanız, cevap muhtemelen olasıdır vim. Kaydetmek ve çıkmak için Esc: wq Enter yazın. Öte yandan, Nano ise ve alt kısımda "WriteOut: ^ O" gibi şeyler görürseniz, bunun yerine Ctrl + O, Enter, Ctrl + X kullanmalısınız.
Amber

30
ilk taahhüdü değiştirmek isterseniz ne olur? O zaman önceki taahhüt karması nedir?
Brenden

219
Kullan --no-editseçeneği. git commit --amend --reset-author --no-editbir editör açmaz. Git 1.7.9'dan beri kullanılabilir.
5lava

51
@Brenden projedeki ilk taahhüdü değiştirmek için kullanıngit rebase -i --root
Noah Passalacqua

488

Kabul cevabı bu soruya interaktif rebase bir harika zeki kullanımı, ama biz sonradan birleşti bir dal üzerinde eskiden yazarına değiştirmeye çalışıyorlar işlerlerse maalesef çatışmaları sergiler. Daha genel olarak, bu işi yapmaz dağınık geçmişleri ele alırken.

Git geçmişini yeniden yazmak için ortam değişkenlerini ayarlamaya ve ayarlamaya bağlı olan komut dosyalarını çalıştırma konusunda endişeli olduğum için, bu yanıta benzer ancak daha eksiksiz olan bu gönderiye dayalı yeni bir cevap yazıyorum .

Bağlantılı cevabın aksine aşağıdakiler test edilir ve çalışır. Açıklamayı netleştirmek için 03f482d6yazarını değiştirmeye çalıştığımız 42627abetaahhüt ve yeni yazarla taahhüttür.

  1. Değiştirmeye çalıştığımız taahhüdü kontrol edin.

    git checkout 03f482d6
    
  2. Yazarı değiştir.

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

    Şimdi hash olduğu varsayılan yeni bir taahhüdümüz var 42627abe.

  3. Orijinal şubeyi kontrol edin.

  4. Eski taahhüdü yerel olarak yenisiyle değiştirin.

    git replace 03f482d6 42627abe
    
  5. Değişim esasına göre gelecekteki tüm taahhütleri yeniden yazın.

    git filter-branch -- --all
    
  6. Temizlik için yedek parçayı çıkarın.

    git replace -d 03f482d6
    
  7. Yeni geçmişi itin (yalnızca aşağıdakilerin başarısız olması durumunda --force kullanın ve yalnızca git logve / veya akıl sağlığı kontrolünden sonra git diff).

    git push --force-with-lease
    

4-6 yerine sadece yeni taahhütlere geri dönebilirsiniz:

git rebase -i 42627abe

9
Lütfen 2. adımdan sonra orijinal şubenizi yeniden kontrol etmek için buraya bir not koyun.
Benjamin Riggs

42
Bu dehşete çok açık bir alternatif gibi görünüyor git rebase -i. Bu git replaceşeyi daha önce hiç duymamıştım . +1
FractalSpace

3
Temiz referans / orijinal / ... yedekleme için buraya
alexis

5
Bunun --force-with-leaseyerine kullanmanızı öneririm -f. Bu daha guvenli.
Jay Bazuzi

11
UYARI: git filter-branch -- --allOrijinal taahhüdün bulunduğu tüm şubelerde taahhütlerin değişmekte olduğunu unutmayın. Yeterli kimlik bilginiz yoksa (veya sadece başkalarının şube geçmişini değiştirmek istemiyorsanız), bu yanıta dikkat etmek iyidir.
ribamar

225

Github dokümanları, bir daldaki tüm taahhütlerin komisyon bilgilerinin yerini alan bir komut dosyası içerir .

  • Değişken değerlerini değiştirdikten sonra aşağıdaki komut dosyasını terminalden çalıştırın

    #!/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
    
  • Düzeltilmiş geçmişi GitHub'a aktarın:

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

    VEYA dalların seçilen referanslarını itmek isterseniz

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

12
Bu sadece bir değil tüm taahhütlerde değişir. Komik bir şey, bunu 30 dakikadan az bir süre önce yaptım.
Artjom B.

Önceki cevapları okuduktan sonra bu cevabı bulduğumda denemeye değer olduğunu düşündüm ve işini yaptı. Ancak benim durumumda committer adını sadece ilk taahhütte değiştirdi. Bu arada, ilk cevaptan fikirler denemeden önce. Belki sistemi bir şekilde etkiledi.
Ruslan Gerasimov

2
clone/ Kullanmaktan kaçınırsanız push, bir yedek ad alanı elde edeceğinizi unutmayın refs/original/. Bu ad alanını akıllıca kaldırmanın bir yolunu bulamadım, bu yüzden .git/refs/originalişe yarayan dizini sildim.
VasiliNovikov

Örneğin, OLD_EMAIL hiçbir şeyle eşleşmezse bu neden repoda değişikliklere neden oluyor? Nedense birkaç (ama hepsi değil!) Taahhüt karmaları değişir.
mjs

1
Bu cevap için kullanım durumum: İki github hesabım var, biri istemeden taahhütte bulunmak için kullandım. Bu komut dosyası yanlış komisyoncu e-postalarını / adlarını yeniden adlandırarak tüm taahhütlerimin düzeltilmesine yardımcı oldu. Tabii ki, eğer yanlış kullanıcıyla uğraşıyorsam, diyelim ki, 50. taahhüdün 50'nci taahhüdüne, 450 ayrı taahhüt olacak. Her neyse, senaryoyu çalıştırdıktan sonra, @andrej'in de işaret ettiği gibi, repoda git push -fpush değişikliklerini zorlamanız gerekir .
LWY

167
  • E-postanızı global olarak yapılandırmaya sıfırlayın:

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

  • Şimdi düzenleme yapmadan taahhüdünüzün yazarını sıfırlayın:

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


2
Hayır değil. OP'ye bakın: It's not last commit.Öyleyse nasıl olurdu amend?
underscore_d

2
Bu harika, sadece son taahhüt olduğu için bir utanç. Neyse ki, en son ikisine ihtiyacım vardı, bu yüzden sadece bir git reset HEAD~, önerilen satırlarını çalıştırdım, sonra bir sonraki taahhüdü tekrar manuel olarak yaptım. İyi çalıştı!
Matt Fletcher

2
Teşekkürler! --Reset-author benim için hile yaptı, çünkü onsuz yazar değişir, ancak "komiser" eski yazar ayrıntılarıyla kalır.
Lucas P.

9
Son altı taahhüdümü düzeltmek için: Önce git config --local user.name FirstName LastName ve öğesini kullanarak geçerli Git repo için doğru yazarı ayarlayın git config --local user.email first.last@example.com. Sonra kullanarak son altı taahhüt için geçerlidir git rebase --onto HEAD~6 --exec "git commit --amend --reset-author --no-edit" HEAD~6. Son olarak uzaktan Git repo'yu kullanarak itin git push --force-with-lease.
olibre

@olibre bir cazibe gibi çalışıyor, teşekkürler.
Bruno Gasparotto

88

Son komutu yazarını aşağıdaki komutu kullanarak değiştirebilirsiniz.

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

Ancak, birden fazla yazarın adını değiştirmek istiyorsanız, bu biraz zor. Bir etkileşimli rebase başlatmanız, taahhütleri düzenleme olarak işaretlemeniz ve bunları tek tek değiştirmeniz ve bitirmeniz gerekir.

İle yeniden baslamaya başlayın git rebase -i. Size böyle bir şey gösterecek.

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

Değişim pickiçin anahtar kelime editkaydedilmesini için yazar adını değiştirmek istiyor.

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

Ardından düzenleyiciyi kapatın. Yeni başlayanlar için Escapetuşuna basın :wqve sonra yazın Enter.

O zaman terminalinizi hiçbir şey olmamış gibi göreceksiniz. Aslında interaktif bir rebase'in ortasındasınız. Şimdi yukarıdaki komutu kullanarak taahhüdünüzün yazar adını değiştirme zamanı. Düzenleyiciyi tekrar açar. İle çıkın ve devam etmeye devam edin git rebase --continue. Düzenlemek istediğiniz kayıt sayısı için aynı işlemi tekrarlayın. No rebase in progress?İletiyi aldığınızda etkileşimli yeniden tabanın tamamlandığından emin olabilirsiniz .


Lütfen resimlerinizi güncelleyebilir misiniz?
Shimmy Weitzhandler

1
Değiştirmek için birden fazla taahhüdünüz varsa, bunları tek tek düzenlemek yerine, pickeyleme izin verebilir ve her satırdan sonra ekleyebilirsinizexec git commit --no-edit --amend --author="MyNewAuthor <my@new-auth.or>"
Pierre-Olivier Vares

60

Bağlantı kurduğunuz sorudaki cevaplar iyi yanıtlardır ve durumunuzu kapsar (diğer soru daha fazla taahhüttür, çünkü birden fazla taahhüt yeniden yazmayı içerir).

Denemek için bir bahane olarak git filter-branch, belirli bir taahhüt için Yazar Adı ve / veya Yazar E-postasını yeniden yazmak için bir komut dosyası yazdım:

#!/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 teşekkürler. assemblyla.com git repo repo web görünümünde tüm yazar referanslarını değiştirmek gibi görünmüyor, ama 'git pull / clone' sonuçları tüm işe yaramış gibi görünüyor.
Johnny Utahh

İşlem tarihi gibi diğer alanları değil yalnızca amaçlananı değiştirdiği için harika bir çözüm.
Guillaume Lemaître


2
@ olivieradam666 bir cazibe gibi çalışıyor ve okunması daha kolay
fregante

@ olivieradam666 Teşekkürler. Bunu daha çok dikkat çekmek için gerçekten bir cevap olarak eklemelisiniz.
seane

44

Daha önce taahhüt et:

resim açıklamasını buraya girin

Tüm taahhütlerin yazarını düzeltmek için @ Amber'ın cevabından komut uygulayabilirsiniz:

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

Veya adınızı ve e-postanızı tekrar kullanmak için şunları yazabilirsiniz:

git commit --amend --author=Eugen

Komuttan sonra:

resim açıklamasını buraya girin

Örneğin, aşağıdakilerden başlayarak tümünü değiştirmek için 4025621:

resim açıklamasını buraya girin

Koşmalısın:

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

Not: Ad ve e-posta adresi gibi boşluklar içeren bir yazarı dahil etmek için yazarın etrafı tırnak işaretleri arasında olmalıdır. Örneğin:

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

veya bu takma adı şuraya ekleyin ~/.gitconfig:

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

Ve sonra çalıştırın:

git reauthor 4025621 Eugen

1
Komutun beklendiği gibi çalıştığını doğrulamak için çıktısını inceledim git shortlog -e -s.
Taylor Edmiston

5
Amaçlarıma en iyi cevap bu, teşekkürler. Sadece ayarlamak istedim beri benim e-posta adresini, ben benim .git / config güncellemeden sonra, "--amend --reset-yazar işlemek git" --exec = ile çalıştırabilir.
Dato

1
Eeh, neden unuttuğumdan emin değilim! Şimdi bitti.
Dato

Harika bir cevap ve düzeltmesi çok kolay. Takma adı seviyorum!
J_A_X

bu bana yardımcı olmadı. şimdi devam et Rebase Failed hatası
Alexey Sh.

17

Merkezi bir depo kullanıyorsanız Amber'in cevabına ek bir adım daha var :

git push -f merkezi deponun güncellenmesini zorlamak.

Aynı dalda çalışan çok fazla insan olmadığına dikkat edin, çünkü tutarlılığı bozabilir.


16

Bunu yaparken git rebase -idokümanda ilginç bir kısım var:

İki veya daha fazla komutu bire katlamak istiyorsanız "pick", ikinci ve sonraki işlemlerin komutunu "squash"veya ile değiştirin "fixup". Komisyonların farklı yazarları olsaydı, katlanmış taahhüt ilk taahhüdün yazarına atfedilecektir. Katlanmış "squash"komut için önerilen komut mesajı, ilk komutun ve komut içerenlerin komut mesajlarının birleştirilmesidir , ancak komutun taahhüt mesajlarını atlar "fixup".

  • Geçmişiniz varsa A-B-C-D-E-F,
  • ve taahhütleri değiştirmek istiyorsunuz Bve D(= 2 taahhüt),

o zaman şunları yapabilirsiniz:

  • git config user.name "Correct new name"
  • git config user.email "correct@new.email"
  • boş taahhütler oluşturun (her taahhüt için bir tane):
    • rebase amacı için bir mesaja ihtiyacın var
    • git commit --allow-empty -m "empty"
  • Rebase işlemini başlat
    • git rebase -i B^
    • B^öğesinin üst öğesini seçer B.
  • her değişiklik taahhüdünden önce bir boş taahhüt koymak isteyeceksiniz
  • Değiştirmek istediğiniz edecek pickkadar squasholanlar için.

git rebase -i B^Size ne vereceğine örnek :

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

bunu şu şekilde değiştirin:

# 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

Mesajları düzenlemenizi ister:

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

ve ilk birkaç satırı kaldırabilirsiniz.


16

İçin ilerletmek Eugen Konkov tepkisi, root işlemek, kullanım başlamak --rootbayrak. --no-editBayrak çok yararlıdır

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

Bu tüm taahhütlerde çalıştı ve değişti.
SagarKapasi099

1
Cevap için teşekkürler. Çalışması için etkileşimli olması gerekiyordu. git rebase --root - etkileşimli --exec "git commit --amend --author = 'name <email>' --no-edit"
Sreeragh AR

8

Kullanıcıyı hızlı bir şekilde değiştirebilecek ve başkalarının herhangi bir yan etkisi olmayan bir yol bulun.

Basit ve net bir yol:

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

detaylı operasyonlar

  • taahhüt günlüklerini göster ve taahhüdünüzü değiştirmek istediğiniz taahhüt kimliğini öğrenin:
git log
  • git rebase, seçilen tamamlama kimliğinden son zamanlara doğru başlangıç:
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
  • rebase sonraki işlem kimliğinde durdu, çıktı:
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
  • başarıyla onaylayana kadar yeniden onaylayın ve devam edin 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 güncellemek için bas
git push --force-with-lease

5

Değiştirmek istediğiniz işlem son işlem değilse, aşağıdaki adımları izleyin. Taahhüdünüz farklı bir şubedeyse, önce o şubeye geçin.

git checkout şube_adı

Değiştirmek istediğiniz işlemden önce işlemeyi bulun ve karmasını bulun. Sonra rebase komutu verin.

git rebase -i -p taahhüt karması

Ardından bir düzenleyici açılır ve değiştirmek istediğiniz taahhütler için 'düzenle' girer. Varsayılan 'seç' seçeneğiyle diğerlerini bırakın. Değiştirildikten sonra 'esc' anahtarını ve wq girin! çıkışa doğru.

Sonra değişiklik seçeneği ile git kesin komutunu verin.

git commit --amend --author = "Kullanıcı adı e-postası" --no-edit

Sonra aşağıdaki komutu verin.

git rebase - devam et

Taahhüt yazarı yerel depoda güncellendiğinde, değişiklikleri uzak depoya aktarın.


Bence bunu yapmanın en basit yolu bu. Reword komutunu kullanıyordum ve bu başarısız oluyor. Bunun yerine edit komutunu kullanmam gerektiğini öğrendim. Belki "düzenle" anahtar kelimesi vurgulanabilir. Cevap için teşekkürler @ChannaB B
Berk

adımları takip etmek gerçekten kolay. Teşekkür ederim!
Habiba

4

Bu soruna, özellikle değiştirmek istediğiniz birden fazla taahhüdünüz varsa, tembel bir yaklaşım da vardır. Benim durumumda, yanlış bir yazarla birkaç taahhüt içeren yeni bir şubem vardı, bu yüzden bana yardımcı olan şey:

Orijinal şubenize gidin:

git checkout develop

Ondan yeni şube oluşturun:

git checkout -b myFeature develop 

Taahhüt bilgisi olmadan bir taahhüt olarak birleştirin:

git merge --no-commit --squash branchWrongAuthor

Değişiklikleri aşamalı olarak da yapmak isteyebilirsiniz:

git stage .

Yazarın adını değiştirin ve değişiklikleri yapın:

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

Ve işte bu, değişiklikleri zorlayabilirsiniz.

git push

Bundan sonra dalı yanlış bir yazarla silebilirsiniz.


4

İşlem tamamlandıktan sonra yazar adını yeniden adlandırma adımları

  1. Önce işleme kimliğini ve daha fazla ayrıntıyı almak için "git log" yazın
  2. git rebase i HEAD ~ 10 (10, rebase'de gösterilen toplam taahhüttür)

    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. Daha sonra "git rebase --continue" veya "git rebase --abort" yazın.

    • şimdi rebase pencere açılacak, klavyeden "i" tuşuna tıklayın
    • 10'a kadar taahhütlerin listesini alacaksınız [çünkü yukarıda 10 taahhüdü geçtik] Aşağıdaki gibi

    pick 897fe9e simplify code a little

    pick abb60f9 add new feature

    pick dc18f70 bugfix

  4. Şimdi, aşağıdaki gibi, düzenlemek istediğiniz taahhüdün hemen altına aşağıdaki komutu eklemeniz gerekir

    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. Hepsi bu, şimdi sadece ESC tuşuna basın,: wq ve hepiniz hazırsınız

    2. O zaman git push origin HEAD: ŞUBE ADI -f [lütfen -f Force push ile ilgilenin]

    beğen git push -fya dagit push origin HEAD: dev -f


harika bir cevap, 6. noktayı bir git pushkomut örneği ile güncelleyebilir misiniz ?
Lukasz 'Severiaan' Grela

1
@ Lukasz'Severiaan'Grela düzenledi, lütfen şimdi kontrol edin, Teşekkürler
Kirtikumar A.

3

Committer Adınızı ve E-postanızı Global Olarak Değiştirme:

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

Depo Başına Committer Adınızı ve E-postanızı Değiştirme:

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

Yazar Bilgilerini Sadece Bir Sonraki İşlem İçin Değiştirme:

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

İpucu : Diğer durumlar ve daha fazla bilgi için post referansını okuyun .


2

Değiştirmeniz gerekenler SON YAZININ YETKİSİ ise ve başka hiç kimse deponuzu kullanmıyorsa, son taahhüdünüzü geri alabilirsiniz:

git push -f origin last_commit_hash:branch_name 

taahhüdünüzün yazar adını şununla değiştirin:

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

Açılan düzenleyiciden çıkın ve kodunuzu tekrar itin:

git push

2

Birleştirme taahhüdü mesajı için rebase, en azından gitlab'de kullanarak değiştiremem . Birleştirmeyi bir taahhüt olarak gösterir, ancak bu #sha'ya geri dönemem. Bu gönderiyi yararlı buldum .

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

Bu üç kod satırı, birleştirme taahhüdü mesajını (yazar gibi) değiştirme işi yaptı.


1

bu komutları github resmi sayfasından kullanabilirsiniz

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

İşte komutlar

#!/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

Burada eski e-postayı ur yeni kullanıcı adı ve e-posta adresine değiştirebilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.