Mevcut, itilmemiş komisyonları nasıl değiştirebilirim?

İşlem mesajında ​​yanlış olanı yazdım. Ayrıca, bazı dosyaları eklemeyi unuttum.

İleti / dosyalar işleme nasıl değiştirilir? Taahhüt henüz başlamadı.

7676
07 окт. Laurie Young tarafından ayarlandı 07 Oct 2008-10-07 18:44 '08, 18:44 2008-10-07 18:44
@ 27 cevaplar

En son verilen işlem iletisindeki değişiklikler

 git commit --amend -m "New commit message" 

... Ancak, bu çok satırlı iletiler iletmek veya küçük düzeltmelerin girilmesini zorlaştırabilir.

Bunu yapmadan önce, çalışma kopyasında herhangi bir değişiklik yapmadığınızdan emin olun, aksi takdirde düzeltilecektir. (Yapılmayan değişiklikler düzeltilmeyecektir.)

Uzak şubeye zaten gönderdiğiniz gönderim mesajını değiştirme

Taahhüdünüzü uzak bir şubeye itmişseniz, zorla şu şekilde taahhütte bulunmanız gerekir :

SHA ID'lerinin üzerine yazar; bu, başkalarının yeniden yazdığınız eski taahhütlerin kopyaları varsa bir sorun yaratır.  Eski bir taahhüdün bir kopyasına sahip olan bir kişi, çalışmalarını, bazen zor olabilen yeni yeniden yazılan taahhütle senkronize etmek zorunda kalacaktır, bu nedenle ortak bir taahhüdün tarihini yeniden yazmaya çalışırken başkalarıyla koordine ettiğinizden emin olun, ya da genel olarak genel taahhütlerin yeniden yazılmasını önleyin. 


Etkileşimli rebaz kullan

Diğer bir seçenek de etkileşimli rebase kullanmaktır.
Bu, son mesaj olmasa bile güncellemek istediğiniz herhangi bir mesajı düzenlemenizi sağlar.

Git squash yapmak için aşağıdaki adımları izleyin:

 // X is the number of commits to the last commit you want to be able to edit git rebase -i HEAD~X 

Taahhütlerinizi onayladığınız anda mesajı düzenlemek için e/r seçeneğini seçin.

2019

07 окт. Cevap EfForEffort 07 ekimde verildi . 2008-10-07 18:50 '08, 18:50, 2008-10-07 18:50
2438
08 февр. Cevap lfx_cool 08 Şub. 2010-02-08 07:26 '10 7: 26'da 2010-02-08 07:26

Düzeltmek istediğiniz düzeltme son değilse:

  • git rebase --interactive $parent_of_flawed_commit

    Birkaç hatalı işlemi düzeltmek istiyorsanız, en eski olanın üst kodunu girin.

  • Verdiğinizden beri tüm taahhütlerin listesiyle birlikte bir editör belirir.

    • Düzeltmek istediğiniz düzeltmelerden önce, pick geri reword (veya reword eski sürümlerine göre) edit .
    • Kaydettikten sonra, Git listelenen taahhütleri tekrar edecektir.

  • Yinelemek istediğiniz her taahhütte, Git sizi editörünüze geri götürür. Değiştirmek istediğiniz her taahhüt için Git sizi bir kabuğa yerleştirir. Bir kabuğuysanız:

    • Fiksasyonu herhangi bir şekilde değiştirin.
    • git commit --amend
    • git rebase --continue

Bu sıranın çoğu size halindeyken çeşitli takımların çıktıları tarafından açıklanacaktır. Bu çok kolay, ezberlemenize gerek yok - sadece git rebase --interactive hatırla - hatırlatma ne kadar uzun olursa olsun düzeltmene izin veriyor.


Zaten bastığınız taahhütleri değiştirmek istemediğinizi unutmayın. Ya da belki yapacaksınız, ancak bu durumda, taahhütlerinizi yerine getirmiş ve üzerinde çalışmış olan herkesle iletişim kurmaya büyük özen göstermelisiniz. Birisi yeniden yayın sürükledikten veya yayınlanmış bir iş parçacığına sıfırlandıktan sonra nasıl geri yükleme / eşitleme yapılır?

2321
07 окт. Cevap Aristoteles Pagaltzis tarafından eklenmiştir 07 Ekim 2008-10-07 22:52 '08, 10:52, 2008-10-07 22:52

Önceki bir taahhütte değişiklik yapmak için, gerekli değişiklikleri yapın ve bu değişiklikleri yapın ve ardından çalıştırın.

 git commit --amend -C HEAD 

Önceki taahhüdün düzeltilmesi için tamamen kaldırılması

 git rebase -i HEAD~ commit_count 

( Taahhüt_sayısını değiştirmek istediğiniz taahhüt sayısı ile değiştirin.) Bu komut editörünüzü başlatır. İlk tutucuyu (değiştirmek istediğiniz) "seçim" yerine "düzenle" olarak işaretleyin, ardından editörden kaydedip çıkın. Taahhüt etmek istediğiniz değişiklikleri yapın ve sonra çalıştırın

758
16 авг. Cevap Fatih 16 Ağustos tarafından verilir . 2011-08-16 00:20 '11 0: 20 2011-08-16 00:20

Belirtildiği gibi, git commit --amend , son taahhüdün üzerine yazmak için bir yoldur. Bir not: Dosyaların üzerine de yazmak istiyorsanız, komut

390
07 июня '11 в 0:16 2011-06-07 00:16 Cevap John tarafından 07 Haziran 11’de 0:16 2011-06-07 00:16

Bunun için git filter-branch de kullanabilirsiniz.

351
01 сент. Cevapla Mark 01 Eyl 2012-09-01 23:35 '12 23:35 2012-09-01 23:35

Bu şekilde tercih ederim.

 git commit --amend -c <commit ID> 

Aksi takdirde, yeni bir taahhüt kimliği ile yeni bir taahhüt olacak.

312
10 янв. Tarafından verilen cevap krevedko 10 Oca 2013-01-10 17:23 '13, 17:23 2013-01-10 17:23

Git GUI aracını kullanıyorsanız, son son işlem adlı bir düğme var. Bu düğmeyi tıklayın ve ardından en son işlem dosyalarınızı ve mesajınızı görüntüleyin. Basitçe bu mesajı düzenleyin ve yeni bir taahhüt mesajı ile düzeltebilirsiniz.

Veya bu komutu konsoldan / terminalden kullanın:

 git commit -a --amend -m "My new commit message" 
309
08 нояб. Cevap Akhilraj NS 08 Kasım. 2012-11-08 06:51 '12 6:51, 2012-11-08 06:51

Git rebasing kullanabilirsiniz. Örneğin, bbc643cd'yi işlemek üzere geri dönmek isterseniz, koşun

 $ git rebase bbc643cd^ --interactive 

Varsayılan düzenleyicide, değiştirmeyi istediğiniz satırdaki 'seç' i 'değiştir' olarak değiştirin. Değişiklik yapın ve ardından bunları yürütün

 $ git add <filepattern> 

Şimdi kullanabilirsiniz

 $ git commit --amend 

taahhüdü değiştirmek ve bundan sonra

 $ git rebase --continue 

önceki bölüm tespitine geri dönmek için.

282
22 янв. Cevap Shoaib Ud-Din tarafından 22 Ocak 2013-01-22 20:23 '13 20:23 2013-01-22 20:23
  • Son işlem mesajını değiştirmek istiyorsanız, aşağıdaki adımları izleyin:

     git commit --amend 

    Bu, sizi metin editörünüze yönlendirecek ve taahhüdün son mesajını değiştirmenize izin verecektir.

  • Son 3 işlem mesajını veya herhangi bir işlem mesajını bu noktaya değiştirmek istiyorsanız, git rebase -i HEAD~3 koyunuz:

     git rebase -i HEAD~3 
275
22 окт. Cevap Heena Hussain tarafından 22 Ekim 2012-10-22 14:22 '12, 02:22, 2012-10-22 14:22

Eski işlem iletisini birkaç şubeyle değiştirmeniz gerekirse (yani, birkaç şubede hata mesajı olan bir mesaj var), şunları kullanabilirsiniz:

256
15 нояб. Cevap, sebers tarafından 15 Kasım'da verildi . 2012-11-15 12:29 '12 12:29 2012-11-15 12:29

kullanımı

 git commit --amend 

Bunu detaylı olarak anlamak için mükemmel bir yazı 4'tür . Git geçmişinin üzerine yaz . Aynı zamanda git commit --amend ne zaman kullanmayacağınızı da söyler.

221
27 марта '13 в 23:43 2013-03-27 23:43 cevap cilt 27 Mart '23 23:43 2013-03-27 23:43 verilir

değiştirmek

Birkaç seçeneğin var. Yapabilirsin

 git commit --amend 

En son yürütülene kadar.

Etkileşimli yönlendirme

Aksi takdirde, bu sizin son taahhüdünüz değilse, etkileşimli bir yeniden başlatma yapabilirsiniz

 git rebase -i [branched_from] [hash before commit] 

Ardından etkileşimli yönlendirme içinde bu işleme bir düzenleme ekleyin. Bu olduğunda, git commit --amend ve git commit --amend iletisini değiştirin. Bu tespit noktasına geri dönmek istiyorsanız git reflog da kullanabilir ve bu düzeltmeyi kaldırabilirsiniz. O zaman tekrar git commit koş.

195
18 янв. Cevap wallerjake 18 Ocak verilir 2013-01-18 04:45 13: 04: 45'te, 2013-01-18 04:45

Git GUI kullanıyorsanız, tıklanmayan son işlemi değiştirebilirsiniz:

 Commit/Amend Last Commit 
183
01 дек. Cevap gulchrider 01 Dec. 2012-12-01 08:03 '12, 08:03 2012-12-01 08:03

Bu sizin son taahhüdünüz ise, taahhüdü düzeltmeniz yeterlidir:

 git commit --amend -o -m "New commit message" 

(yalnızca taahhüt mesajını değiştirdiğinizden emin olmak için -o ( --only ) bayrağını kullanarak)


Bir taahhüt gibi görünüyorsa, inanılmaz bir etkileşimli rebase kullanın:

 git rebase -i @~9 # Show the last 9 commits in a text editor 

İstediğiniz taahhüdü bulun, pick r (yeniden) olarak değiştirin ve dosyayı kaydedip kapatın. Bitti!



Minyatür dersi vim (veya, sadece 8 tuşa 3j yeniden yükleme 3j cw r Esc ZZ ):

  • vimtutor varsa vimtutor çalıştırın.
  • h j k l gezinti tuşlarına karşılık gelir
  • Örneğin, tüm komutların bir aralık öneki olabilir. 3j , 3 satıra taşınır
  • ekleme moduna girmek için i - girdiğiniz metin dosyada görünecektir
  • Ekleme modundan çıkmak ve normal moda geri dönmek için Esc veya Ctrl c .
  • iptal etmek
  • Tekrarlamak için Ctrl r
  • dd , dw , dl sırasıyla bir satır, sözcük veya harf silmek
  • cc , cw , cl , sırasıyla bir satır, sözcük veya harf değiştirmek için ( dd i aynı)
  • yy , yw , yl ("yank") satırlarını, sözcüklerini veya harflerini kopyalamak için
  • sırasıyla geçerli konumdan önce veya sonra eklemek için
  • :w Dosyayı kaydetmek (yazmak) için Enter
  • :q! Kaydetmeden çıkışa gir
  • :wq Kaydetmek ve çıkmak için Enter veya ZZ

Çok fazla metin düzenliyorsanız, Dvorak klavye düzenine geçin, dokunmatik türü öğrenin ve vim öğrenin. Çabaya değer mi? Evet.



ProTip ™: geçmişi yeniden yazan "tehlikeli" komutları denemekten korkmayın * - Git, varsayılan olarak 90 gün boyunca düzeltmelerinizi kaldırmaz; Bunları reflogda bulabilirsiniz:

 $ git reset @~3 # go back 3 commits $ git reflog c4f708b HEAD@{0}: reset: moving to @~3 2c52489 HEAD@{1}: commit: more changes 4a5246d HEAD@{2}: commit: make important changes e8571e4 HEAD@{3}: commit: make some changes ... earlier commits ... $ git reset 2c52489 ... and you're back where you started 

* --hard --force olmalarına rağmen - --hard ve --force gibi parametrelere dikkat edin.
* Ayrıca işbirliği yaptığınız hiçbir dalda tarihi yeniden yazmayın.

170
10 февр. Cevap 10 Şubat Zaz verildi. 2015-02-10 03:01 '15, 03:01 2015-02-10 03:01

Git GUI'ı olabildiğince kullanıyorum ve bu size son mesajı değiştirme fırsatı veriyor:

2019

165
05 авг. Cevap Havard Graff 05 Ağustos tarafından verildi . 2013-08-05 02:13 '13, 02:13 2013-08-05 02:13

Vay, bu yüzden bunu yapmanın birçok yolu var.

Bunu yapmanın başka bir yolu da son taahhüdün silinmesidir, ancak işinizi kaybetmemeniz için değişikliklerini kaydedin. Daha sonra düzeltilmiş bir mesajla başka bir işlem yapabilirsiniz. Bu gibi bir şey görünecek:

135
03 дек. Cevap Radu Murzea 03 Aralık'ta verildi . 2013-12-03 00:31 '13, 0:31 2013-12-03 00:31

Son taahhüdün kullanımını değiştirmek istiyorsanız:

 git commit --amend 

veya

124
07 янв. Cevap Shubham Chaudhary 07 Oca 2014-01-07 01:03 '14, 01:03 2014-01-07 01:03

Eski mesajları düzenlemede yardımcı olması için Windows / Mac için grafiksel bir kullanıcı arayüzü arayanlar için (yani, sadece en yeni mesajı değil) SourceTree'yi tavsiye ederim . Aşağıda takip edilecek adımlar.

2019

123
06 нояб. Cevap Steve Chambers tarafından yazılmıştır 06 Kasım 2014-11-06 18:01 '14, 18:01 2014-11-06 18:01

Son mesajı değiştirmek isterseniz, --only bayrağını ya da -o kısayolunu commit --amend :

122
23 мая '14 в 11:40 2014-05-23 11:40 23 Mayıs '14 tarihinde David Ongaro'ya 11:40 2014-05-23 11:40 tarihinde yanıtladı.

Son hata mesajını bir satırda yeni bir onay mesajı ile güncelleyin:

 # You can reset your head to n number of commit # NOT a good idea for changing last commit message # but you can get an idea to split commit into multiple commits git reset --soft HEAD^ # it will reset you last commit. Now, you # can re-commit it with new commit message. 

Taahhütleri daha küçük taahhütlere bölmek için sıfırlamayı kullanın.

git reset , bir işlemi birkaç taahhütte bulmaya yardımcı olabilir:

99
22 янв. Cevap 22 Ocak przbadu verildi 2014-01-22 11:57 '14, 11:57 2014-01-22 11:57

Bu sorunun birçok cevabı var, ancak hiçbiri eski fiksasyon mesajlarının VIM ile nasıl değiştirileceğini ayrıntılı olarak açıklamıyor. Kendim yapmaya çalışırken sıkıştım, bu yüzden burada, özellikle VIM'de deneyimi olmayan kişiler için nasıl yaptığımı ayrıntılı olarak anlatacağım!

Sunucuya daha önce tıkladığım son beş taahhüdümü değiştirmek istedim. Başkası çıkardıysa, oldukça “tehlikeli” olur, taahhüt mesajlarını değiştirerek eşyalara zarar verebilirsiniz. Bununla birlikte, küçük şubeniz üzerinde çalışırken ve kimsenin çekmediğinden emin olduğunuzda, aşağıdaki gibi değiştirebilirsiniz:

Son beş taahhüdünüzü değiştirmek istediğinizi varsayalım, sonra bunu terminale girin:

git rebase -i HEAD~5 * Değiştirmek istediğiniz mesajların sayısı 5'tir. (bu nedenle, 10. işlemden son işlemeye kadar değişiklik yapmak istiyorsanız, 10 değerini girin)

Bu komut, taahhüt geçmişinizi düzenleyebileceğiniz VIM'e yönlendirecektir. Son 5 sözleşmeyi en üstte göreceksiniz:

pick <commit hash> commit message

reword yerine, yeniden yazmak gerekir. Bunu VIM'de INSERT moduna girmeye zorlayan i'yi yazarak yapabilirsiniz. (Aşağıdaki INSERT sözcüğü ile ekleme modunda olduğunuzu görebilirsiniz). reword , pick yerine reword değiştirmek istersiniz.

Daha sonra bu ekrandan kaydetmeniz ve çıkmanız gerekir, bunu önce esc düğmesine basarak komut moduna geçirin. (INSERT sözcüğü aşağıdan kaybolursa komut modunda olduğunuzu kontrol edebilirsiniz). Ardından şunu yazarak bir komut girebilirsiniz : kaydet ve çık komutu wq . Bu nedenle, eğer yazarsanız :wq ont, o haklı olacaktır.

Sonra VIM, yeniden yazmak istediğiniz herhangi bir taahhüt mesajına gidecektir, burada gerçekten taahhüt mesajını değiştirebilirsiniz. Bunu INSERT moduna girerek, onay mesajını değiştirerek, komut moduna geçip kaydederek ve kapatarak yapabilirsiniz. 5 kez yapın ve VIM dışındasınız!

O zaman, zaten yanlış taahhütlerinizi yerine git push --force üzerine yazmak için git push --force gerekir. git push --force oldukça tehlikeli bir şey olduğunu unutmayın, bu yüzden yanlış bir şekilde bastığınızdan beri kimsenin sunucudan çekilmediğinden emin olun!

Artık mesajınızın taahhütünü değiştirdiniz!

(Gördüğünüz gibi, VIM'de çok deneyimli değilim, bu yüzden ne olduğunu açıklamak için yanlış "argo" kullandıysam, beni düzeltmekten çekinmeyin!)

82
07 авг. Cevap Marijn 07 Ağustos'ta verilir . 2014-08-07 12:18 '14, 12:18 2014-08-07 12:18

Git-rebase-reword kullanabilirsiniz

Herhangi bir taahhüdü (sadece sonuncuyu değil), aynı commit --amend gibi düzenlemek için tasarlanmıştır.

 $ git rebase-reword <commit-or-refname> 

Düzeltmeyi düzeltmek için etkileşimli yönlendirme eyleminden sonra adlandırılır: "change." Bu yazıya bakın ve man- bölüm etkileşimli modu-

örnekler:

 $ git rebase-reword b68f560 $ git rebase-reword HEAD^ 
76
21 февр. Cevap albfan 21 şubatta verildi. 2015-02-21 15:21 '15, 15:21 2015-02-21 15:21

Takma adı reci , recommit (amend) için recm recommit (amend) ekledim, şimdi bunu git recm veya git recm -m .

 $ vim ~/.gitconfig [alias] ...... cm = commit reci = commit --amend recm = commit --amend ...... 
76
06 янв. Cevap Chu-Siang Lai tarafından verildi Jan 06 2014-01-06 10:24 '14, 10:24 2014-01-06 10:24

Bir yazım hatası ile düzeltme bastırdı fark ettim. İptal etmek için aşağıdakileri yaptım:

55
ответ дан neoneye 19 июля '14 в 20:27 2014-07-19 20:27