Taahhüt mesajını değiştirmeden bir taahhüt nasıl değiştirilir (bir öncekinin tekrar kullanılması)?


657

Kesin iletinizi değiştirme seçeneği ile (ancak yalnızca önceki iletiyi yeniden kullanma) açığa çıkmadan vi(veya sizin $EDITOR) bir taahhüdü değiştirmenin bir yolu var mı ?


6
Değişen kötülükleri zor yoldan öğrendikten sonra kendi sorumu küçümsedim.
Sridhar Sarnobat

28
Belirli kurallara uyduğunuz sürece (zaten itilmiş olan bir şeyi değiştirmemek gibi), değişikliğin kötü bir şey olması için bir neden yoktur.
paullb

3
Değişiklik taahhütleri, tek bir mantıksal değişiklik sırasında aralıklı olarak çalışmak için kullanılmamalıdır. Yerel olarak düzgün işlemek ve sonra gerektiği için kabak kez bitmiş (@ Sridhar-Sarnobat) tarihini işlemek
DBCerigo

3
@DBCerigo'ya tamamen katılıyorum. Yararlı bulduğum tek durum, önceki bir komutta bir dosya hazırlamayı unuttuğumda (örneğin yeni olduğu için git command -a çalıştırılırken otomatik olarak aşamalandırılmadığı için) ve geriye dönük olarak işlemek istiyorum.
Sridhar Sarnobat

1
Tarihi değiştirmenin tehlikelerini fark etseniz bile, başka bir zaman değişikliği, en son taahhüt mesajınızdan memnun değilseniz ve yeniden birleştirmek zorunda kalmadan yeniden yazmak istiyorsanız faydalıdır.
Sridhar Sarnobat

Yanıtlar:


1011

Git 1.7.9 sürümünden bu yana git commit --amend --no-editsonucunuzu almak için de kullanabilirsiniz .

Bunun, sizin için önemli olabilecek veya olmayabilecek zaman damgası gibi diğer işlemlerin meta verilerini içermeyeceğini unutmayın.


42
Ayrıca bir takma ad ekleyerek --no-edit bayrağını varsayılan olarak ayarlamayı da kolaylaştırabilirsiniz: "amend = commit -a --amend --no-edit"
Jherico

1
@Jherico -a kaldırılmasını öneririm. Lütfen atomik taahhütler yapın, gözden geçirmek veya yeniden
taban oluşturmak çok

120

git commit -C HEAD --amendistediğini yapacak. -CSeçenek başka taahhüt meta alır.


15
Sadece Andy'nin cevabına eklemek için. Bu sık sık yaptığınız bir şeyse, kullanarak bir takma ad oluşturabilirsiniz git config --global alias.amend 'commit --amend -C HEAD'. Daha sonra git amendkısayol olarak kullanabilirsiniz .
mikej

9
Hadi beyler, tembel olmayın, git'i yükseltin ve Shaggle'ın önerdiği yerleşik komutu kullanın! Artı -C seçeneği için olsa.
Dimitris Baltas

4
Sadece zaman damgası değil, aynı zamanda yazarlık bilgileri!
user1338062

3
@RyanCastner Gerçekten, bahsettiğiniz yorum 2013'ten geliyordu. Şu anda çalıştığım git sürümü ile, --amendbaşka bir seçenek olmasa bile, yazar tarihini koruyor (ancak teslim tarihini değiştiriyor). Bu nedenle, eski yorumumu kaldırdım.
Ruben Verborgh

2
Aslında bu cevap, kabul edilen cevap olmasa bile farklı bir şekilde değerlidir. Diğer cevabın aksine, kullanmak zorunda değilsiniz —amend. Yeni bir işlem oluşturabilir, ancak önceki işlemle aynı iletiyi kullanabilirsiniz. Bu yararlı gelmeyebilir, ancak güzel bir taahhüt mesajı düşünmek zorunda kalmadan çalışmamı kaydederken varsayılan olarak taahhüt mesajım, mesajı tekrar kullanmaya devam ediyorum—message=“Work in progress (untested)”
Sridhar Sarnobat

67

Başka bir (aptalca) olasılık git commit --amend <<< :wqvi (m) olarak var $EDITOR.


39
Bu kullanım durumu için bu gerekli olmasa bile, vim için boru oluşturabileceğinin farkındaydım. Bu bazı ilginç olasılıklar açar. Harika bir ipucu.
Sridhar Sarnobat

6
... <<< ZZdaha az yazarak olabilir;)
Ruslan

6
..ve daha da az - ... <<< :x:)
skwisgaar

3
Aptalca olduğunu sanmıyorum. Vi'yi açan herhangi bir komutun iş akışını iyileştirmenin harika bir yoludur.
B Seven

12
üçlü açılı ayraçlar. bu yeni.
oligofren

16

Kabul edilen cevabı uzatmak için şunları da yapabilirsiniz:

git commit --amend --no-edit -a

değiştirilmiş dosyaları eklemek için.


11

Takma ad oluşturmak için kabul edilen cevabı kullanma

 oops = "!f(){ \
    git add -A; \
    if [ \"$1\" == '' ]; then \
        git commit --amend --no-edit; \
    else \
        git commit --amend \"$@\"; \
    fi;\
}; f"

o zaman yapabilirsin

git oops

ve her şeyi ekleyecek ve aynı mesajı kullanarak değişiklik yapacak

veya

git oops -m "new message"

mesajı değiştirmeyi değiştirmek

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.