Yanlış mesajı bir taahhüt mesajında yazdım.
Mesajı nasıl değiştirebilirim? Taahhüt henüz tamamlanmamıştır.
Yanlış mesajı bir taahhüt mesajında yazdım.
Mesajı nasıl değiştirebilirim? Taahhüt henüz tamamlanmamıştır.
7670
Cevap sayısını say: 27
git commit --amend
editörünüzü açarak, en son verilen taahhüdün taahhüt mesajını değiştirmenize izin verir. Ek olarak, taahhüt mesajını doğrudan komut satırında aşağıdakilerle ayarlayabilirsiniz:
git commit --amend -m "New commit message"
… Ancak, bu çok satırlı mesajların iletilmesini veya küçük düzeltmelerin daha hantal olmasını sağlayabilir.
Eğer herhangi bir çalışma kopyası değişiklikleri gerektirmeyen emin olun sahnelenen bu yapmadan önce veya onlar da işlenen alacak. ( İstenmeyen değişiklikler yapılmaz.)
Taahhüdünüzü uzaktaki şubenize itmişseniz, o zaman aşağıdakileri yapmaya zorlamanız gerekir :
git push <remote> <branch> --force # Or git push <remote> <branch> -f
Uyarı: zorla itmek, uzaktaki şubenin yerel durumunuzun üzerine yazacaktır . Uzak şubede yerel şubenizde bulunmayan taahhütler varsa , bu taahhütleri kaybedeceksiniz.
Uyarı: Zaten diğer insanlarla paylaştığınız taahhütlerde değişiklik yapma konusunda dikkatli olun. Kaydedilmesini Değişiklik Yapılması esasen yeniden yazar onlara farklı olması SHA diğer insanların eski kopyaları Eğer yeniden kaleme aldık olduğunu taahhüt varsa bir sorun teşkil etmektedir kimlikleri. Eski taahhüdün bir kopyasına sahip olan bir kişinin, çalışmalarını yeni yeniden yazılmış taahhüdünüzle senkronize etmesi gerekir; bu bazen zor olabilir, bu nedenle paylaşılan taahhüt geçmişini yeniden yazmaya çalışırken başkalarıyla koordine ettiğinizden emin olun veya yalnızca paylaşılan taahhütleri yeniden yazmaktan kaçının tamamen.
Diğer bir seçenek de etkileşimli rebase kullanmaktır.
Bu, en 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 ezdikten sonra -
e/r mesajı düzenlemek için
Kullandığınızda, taahhütten daha fazlası
git rebase -i HEAD~X olabilir . Git, bütün komisyonları "toplayacak" ve bu aralık arasında bir yerde bir birleşme varsa, bütün komisyonları göreceksin, böylece sonuç X + olacak.
X
X
Tek bir daldan daha fazlası için yapmanız gerekiyorsa ve içeriği değiştirirken ihtilaflarla karşılaşabilirsiniz, kurup
git rerere gitmeye devam ederek bu çatışmaları sizin için otomatik olarak çözebilirsiniz.
15573
git commit --amend -m "your new message"
2472
Düzeltmek istediğiniz taahhüt en son teklif değilse:
git rebase --interactive $parent_of_flawed_commit
Birkaç kusurlu komisyonu düzeltmek istiyorsanız, en eski olanın ebeveyni geçin.
Verdiğinizden bu yana tüm taahhütlerin bir listesi ile bir editör ortaya çıkacaktır.
pickiçin
reword(veya Git eski sürümleri, üzerine
edit) Eğer düzeltme istediğiniz herhangi kaydedilmesini önünde.
Tekrar değerlendirmek istediğiniz her bir taahhüt için Git sizi tekrar editörünüze bırakacaktır. Düzenlemek istediğiniz her bir taahhüt için Git, sizi kabuğun içine bırakır. Eğer kabuğun içindeysen:
git commit --amend
git rebase --continue
Bu dizinin çoğu, gittiğiniz çeşitli komutların çıktısı ile açıklanacaktır. Çok kolay, ezberlemenize gerek
git rebase --interactive yok - ne kadar zaman önce olursa olsun, işleri doğrulamanıza izin verdiğini unutmayın .
Zaten bastığınız taahhütleri değiştirmek istemeyeceğinizi unutmayın. Ya da belki yaparsı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ınlanmış veya yayınlanmış bir dalı sıfırladıktan sonra nasıl yeniden kazanabilirim / yeniden senkronize edebilirim?
2351
Önceki taahhüdünüzü değiştirmek için, istediğiniz değişiklikleri yapın ve bu değişiklikleri uygulayın ve ardından koşun
git commit --amend
Bu, metin düzenleyicinizde yeni işleme iletinizi temsil eden bir dosya açar. Eski taahhüt mesajınızın metni ile doldurulur. Onay mesajını istediğiniz gibi değiştirin, ardından dosyayı kaydedin ve bitirmek için editörünüzden çıkın.
Önceki taahhüdü değiştirmek ve aynı günlük mesajını saklamak için
git commit --amend -C HEAD
Önceki işlemi tamamen kaldırarak düzeltmek için,
git reset --hard HEAD^
Birden fazla taahhüt mesajı düzenlemek isterseniz,
git rebase -i HEAD~commit_count
( Taahhüt_sayısını düzenlemek istediğiniz taahhüt sayısı ile değiştirin.) Bu komut editörünüzü başlatır. İlk işlemi (değiştirmek istediğinizi) “seç” yerine “düzenle” olarak işaretleyin, ardından editörünüzden kaydedip çıkın. Taahhüt etmek istediğiniz değişikliği yapın ve ardından koşun
git commit --amend git rebase --continue
Not: Açtığınız editörden "İstediğiniz değişikliği yapın" seçeneğini de yapabilirsiniz.
git commit --amend
765
Daha önce de belirtildiği gibi,
git commit --amend son taahhüdün üzerine yazma yoludur. Bir not: eğer dosyaların üzerine de yazmak isterseniz , komut
git commit -a --amend -m "My new commit message"
392
Ayrıca
filter-branch bunun için git kullanabilirsiniz .
git filter-branch -f --msg-filter "sed 's/errror/error/'" $flawed_commit..HEAD
Önemsiz bir şey kadar kolay değil
git commit --amend , ancak hatalı işlem mesajınızdan sonra zaten bazı birleşimleriniz varsa, özellikle yararlıdır.
Bunun, HİÇBİR taahhüdü
HEAD ve hatalı taahhüt arasındakileri yeniden yazmaya çalışacağını unutmayın, bu nedenle
msg-filter komutunuzu çok akıllıca seçmelisiniz ;-)
351
Bu şekilde tercih ederim.
git commit --amend -c <commit ID>
Aksi takdirde, yeni bir taahhüt kimliği ile yeni bir taahhüt olacak
313
Git GUI aracını kullanıyorsanız, son işlemeyi değiştir adlı bir düğme var. Bu düğmeye tıkladığınızda son işlem dosyalarınızı ve mesajınızı gösterecektir. Sadece bu mesajı düzenleyin ve yeni taahhüt mesajı ile taahhüt edebilirsiniz.
Veya bu komutu bir konsoldan / terminalden kullanın:
git commit -a --amend -m "My new commit message"
311
Git rebasing'i kullanabilirsiniz . Örneğin, bbc643cd'yi işlemek üzere geri değiştirmek isterseniz,
$ git rebase bbc643cd^ --interactive
Varsayılan düzenleyicide, değişiklik yapmak istediğiniz satırdaki 'düzenle'yi' düzenlemek 'için değiştirin. Değişikliklerinizi yapın ve sonra bunları ile
$ git add <filepattern>
Şimdi kullanabilirsiniz
$ git commit --amend
taahhüdü değiştirmek ve bundan sonra
$ git rebase --continue
önceki başa geri dönmek için taahhütte bulunun.
282
Yalnızca son işlem mesajınızı değiştirmek istiyorsanız, aşağıdakileri yapın:
git commit --amend
Bu sizi metin alıcınıza bırakacak ve son taahhüt mesajını değiştirmenize izin verecektir.
Son 3 işlem mesajını veya bu noktaya kadar olan işlem mesajlarından herhangi birini değiştirmek isterseniz,
HEAD~3 aşağıdaki
git rebase -i komutu verin:
git rebase -i HEAD~3
276
Eski bir işlem mesajını birden fazla branşta değiştirmek zorunda kalırsanız (yani, hatalı mesajla işlem birden fazla şubede bulunursa) kullanmak isteyebilirsiniz:
git filter-branch -f --msg-filter \ 'sed "s/<old message>/<new message>/g"' -- --all
Git, yeniden yazmak için geçici bir dizin oluşturur ve içindeki eski referansları yedekler
refs/original/ .
-f operasyonun yürütülmesini zorlar. Geçici dizin zaten mevcutsa veya altında kayıtlı referanslar varsa, bu gereklidir
refs/original . Aksi takdirde, bu bayrağı bırakabilirsiniz.
-- filtre dalı seçeneklerini revizyon seçeneklerinden ayırır.
--all tüm dalların ve etiketlerin yeniden yazılmış olmasını sağlayacaktır .
Eski referanslarınızın yedeği nedeniyle, komutu yerine getirmeden önce kolayca duruma geri dönebilirsiniz.
Diyelim ki, efendinizi kurtarmak ve şubeye erişmek istiyorsanız
old_master :
git checkout -b old_master refs/original/refs/heads/master
259
Burada bir kaç seçeneğin var. Yapabilirsin
git commit --amend
son sözün olduğu sürece.
Aksi takdirde, son taahhüdünüz değilse etkileşimli bir yeniden ödeme yapabilirsiniz.
git rebase -i [branched_from] [hash before commit]
Sonra etkileşimli rebase içinde sadece bu göreve düzenleme ekleyin. Konu geldiğinde a yapın
git commit --amend ve taahhüt mesajını değiştirin. Bu işlemden önce geri dönmek istiyorsanız, bu işlemi de kullanabilir
git reflog ve silebilirsiniz. O zaman
git commit tekrar yap.
195
Git GUI kullanıyorsanız, itilmemiş son işlemi değiştirebilirsiniz:
Commit/Amend Last Commit
183
Son sözün buysa, sözünü değiştir :
git commit --amend -o -m "New commit message"
( yalnızca taahhüt mesajını değiştirdiğinizden emin olmak için
-o (
--only ) işaretini kullanarak )
Gömülü bir taahhüt ise, müthiş etkileşimli rebase kullanın :
git rebase -i @~9 # Show the last 9 commits in a text editor
İstediğiniz değişikliği işlemek bul
pick için
r (
reword ) ve kaydetmek ve yakın dosyası. Bitti!
Minyatür vim eğitimi (veya yalnızca 8 tuş vuruşuyla yeniden nasıl oluşturulur
3j
cw
r Esc
ZZ ):
vimtutorZamanın varsa koş
h
j
k
lhareket tuşlarına karşılık gelir ←↓↑→
3j3 satır aşağı hareket eder
iekleme moduna girmek için - girdiğiniz metin dosyada görünecektir
cekleme modundan çıkmak ve "normal" moda geri dönmek için
ugeri almak
ryinelemek
dd,
dw,
dlSırasıyla bir çizgi, kelime veya harfi silmek için
cc,
cw,
clSırasıyla bir çizgi, kelime ya da harf değiştirmek (aynı
dd
i)
yy,
yw,
ylSırasıyla ( "yank") bir çizgi, kelime veya harf kopyalamak
pveya
Psırasıyla geçerli konumdan önce veya sonra yapıştırmak için
:wEnter bir dosyayı kaydetmek (yazmak) için
:q!Enter kaydetmeden çıkmak
:wqEnterveya
ZZkaydetmek ve çıkmak için
Metni çok düzenlerseniz Dvorak klavye düzenine geçin, dokunmayı yazmayı ve vim öğrenmeyi öğ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 taahhütlerinizi silmez; Onları reflogda bulabilirsiniz:
$ git reset @~3 # go back 3 commits $ git reflog c4f708b [email protected]{0}: reset: moving to @~3 2c52489 [email protected]{1}: commit: more changes 4a5246d [email protected]{2}: commit: make important changes e8571e4 [email protected]{3}: commit: make some changes ... earlier commits ... $ git reset 2c52489 ... and you're back where you started
* Gibi
--hard ve
--force olsa seçenekleri dikkat - onlar veri atabilir.
* Ayrıca, işbirliği yaptığınız hiçbir dalda geçmişi yeniden yazmayın.
177
Git GUI'yi mümkün olduğu kadar kullanıyorum ve bu size son işlemi yapma seçeneği sunuyor:
Ayrıca,
git rebase -i origin/master her zaman usta üzerine yaptığınız taahhütleri size sunacak ve size değişiklik yapma, silme, yeniden düzenleme veya squash yapma seçeneği sunan güzel bir mantradır. Önce bu hashle uğraşmanıza gerek yok.
165
Vay, yani bunu yapmanın birçok yolu var.
Bunu yapmanın bir başka yolu da, son taahhüdün silinmesidir, ancak çalışmanızı kaybetmemeniz için değişikliklerini saklayın. Düzeltilmiş mesajla başka bir taahhüt daha yapabilirsiniz. Bu şuna benzer bir şey olurdu:
git reset --soft HEAD~1 git commit -m 'New and corrected commit message'
Bir dosya eklemeyi veya değişiklik yapmayı unutursam bunu hep yaparım.
--soft Bunun yerine belirtmeyi unutmayın
--hard , aksi takdirde bu taahhüdü tamamen kaybedersiniz.
135
Eski mesajları düzenlemede yardımcı olması için Windows / Mac GUI arayan herkes için (yalnızca en yeni mesajı değil) SourceTree'yi öneririm . İzlenecek adımlar aşağıdadır.
Henüz bir uzaktan kumandaya itilmemiş taahhütler için:
Unable to create 'project_path/.git/index.lock': File exists., aynı anda birden fazla işleme iletisini değiştirmeye çalışırken başarısız olduğunu gördüm . Sorunun tam olarak ne olduğundan ya da SourceTree'nin gelecekteki bir sürümünde çözülüp çözülmeyeceğinden emin değilim, ancak bu gerçekleşirse, bunları birer birer yeniden yapmayı önerebilir (daha yavaş ancak daha güvenilir görünüyor).
... Veya ... daha önce itilen taahhütler için:
Bu cevabı , yukarıdakilere benzer olan ancak
git push origin <branch> -f dalı zorlamak için komut satırından ( ) çalıştırılması gereken başka bir komut gerektiren adımları izleyin . Hepsini okuyup gerekli önlemleri almanızı tavsiye ederim!
129
Sadece en son taahhüt kullanımını düzenlemek istiyorsanız:
git commit --amend
veya
git commit --amend -m 'one line message'
Ancak arka arkaya birkaç komisyon düzenlemek istiyorsanız, bunun yerine rebasing kullanmalısınız:
git rebase -i <hash of one commit before the wrong commit>
Yukarıdaki gibi bir dosyaya edit / e veya diğer seçenekten birini yazın ve kaydet ve çık'ı tıklayın.
Şimdi ilk yanlış işlemede olacaksın. Dosyalarda değişiklik yapın, bunlar sizin için otomatik olarak hazırlanır. tip
git commit --amend
kaydet ve çık ve yaz
git rebase --continue
Tüm seçimlerinizle bitinceye kadar bir sonraki seçime geçmek için
Bu şeylerin, bu belirli bir işlemden sonra tüm SHA karmalarınızı değiştirdiğini unutmayın.
124
Yalnızca son mesajı değiştirmek isterseniz kullanmanız gereken
--only bayrak veya kısayol
-o ile
commit --amend :
git commit --amend -o -m "New commit message"
Bu, sahnelenen işlerle olan taahhüdünüzü yanlışlıkla artırmamanızı sağlar. Elbette uygun bir
$EDITOR konfigürasyona sahip olmak en iyisidir . O zaman
-m seçeneği dışarıda bırakabilirsiniz , ve git bir taahhüt mesajı ile eskisini doldurur. Bu şekilde kolayca düzenlenebilir.
123
Son yanlış taahhüt mesajınızı tek satırda yeni onay mesajı ile güncelleyin:
git commit --amend -m "your new commit message"
Veya aşağıdaki gibi git sıfırlamayı deneyin:
# 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.
git reset bir taahhüdünüzü birden fazla taahhütte tutmanıza yardımcı olabilir:
# reset your head. I am resetting to last commits: git reset --soft HEAD^ # (you can reset multiple commit by doing HEAD~2(no. of commits) # Now, reset your head for splitting it to multiple commits git reset HEAD # add and commit your files seperately to make multiple commits: e.g git add app/ git commit -m "add all files in app directory" git add config/ git commit -m "add all files in config directory"
Burada, son taahhüdünüzü iki komisyona başarıyla verdiniz.
99
Bu soruda çok fazla cevap var, ancak hiçbiri VIM kullanarak eski mesajların nasıl değiştirileceğini çok ayrıntılı olarak açıklamıyor. Bunu kendim yapmaya çalışırken sıkışıp kaldım, bu yüzden burada, özellikle VIM'de deneyimi olmayan insanlar için bunu nasıl yaptığımı detaylı olarak yazacağım!
Zaten sunucuya ittiğim en son beş taahhüdümü değiştirmek istedim. Bu oldukça 'tehlikelidir' çünkü bundan daha önce başka birisini çektiyseniz, taahhüt mesajlarını değiştirerek işleri karıştırabilirsiniz. Bununla birlikte, kendi küçük şubeniz üzerinde çalışırken ve kimsenin çekemediğinden emin olduğunuzda, şu şekilde değiştirebilirsiniz:
En son beş taahhüdünüzü değiştirmek istediğinizi varsayalım, sonra bunu terminale yazın:
git rebase -i HEAD~5
* 5, değiştirmek istediğiniz taahhüt mesajı sayısı. (öyleyse, sonuncuyu 10'a değiştirmek isterseniz, 10 yazınız)
Bu komut sizi VIM'e götürecek ve bu sayede taahhüt geçmişinizi 'düzenleyebileceksiniz'. Son 5 taahhüdün en üstte böyle olduğunu göreceksin:
pick <commit hash> commit message
pick Senin yerine yazmalısın
reword . Bunu VIM'de
i INSERT moduna girmenize neden olan yazarak yapabilirsiniz . Değişim türüne istediğiniz kaydedilmesini için (Sen altındaki kelime INSERT tarafından ekleme modunda olduğunuzu görmek)
reword yerine
pick
Daha sonra bu ekranı kaydetmeniz ve çıkmanız gerekir, bunu önce esc düğmesine basarak 'komut moduna' girerek yaparsınız. (altındaki INSERT sözcüğü kaybolduysa komut kipinde olduğunuzu kontrol edebilirsiniz.) Yazarak bir komutu yazabilirsiniz,
: kaydetme ve çıkma komutu şudur
wq . Bu yüzden eğer yazarsanız
:wq o doğru iz değil.
O zaman VIM tekrar cevaplamak istediğiniz her mesaj yerine geçer, burada aslında taahhüt mesajlarını değiştirebilirsiniz. Bunu INSERT moduna girerek, taahhüt mesajını değiştirerek, komut moduna girerek kaydederek çıkabilirsiniz. Bunu 5 kez yapın ve VIM'iniz bitsin!
O zaman, zaten yanlış taahhütlerinizi yerine getirdiyseniz,
git push --force bunların üzerine yazmanız gerekir . Bunun
git push --force yapılması tehlikeli bir şey olduğunu unutmayın , bu yüzden yanlış yaptığınızı söylediğinizden beri kimsenin sunucudan çekilmediğinden emin olun!
Şimdi taahhüt mesajlarını değiştirdin!
(Gördüğünüz gibi VIM'de o kadar tecrübeli değilim, bu yüzden ne olduğunu açıklamak için yanlış 'dil' kullandıysam, beni düzeltmekten çekinmeyin!)
82
Sen kullanabilirsiniz git-Rebase-reword
Herhangi bir taahhüdün (yalnızca son değil) aynı şekilde düzenlenmesi için tasarlanmıştır
commit --amend
$ git rebase-reword <commit-or-refname>
Örnekler:
$ git rebase-reword b68f560 $ git rebase-reword HEAD^
77
Ben takma adlarını ekledikten
reci ,
recm için
recommit (amend) buna, şimdi bunu yapabilir
git recm ya
git recm -m .
$ vim ~/.gitconfig [alias] ...... cm = commit reci = commit --amend recm = commit --amend ......
76
İçinde bir yazım hatası olan bir taahhüt itti olduğunu fark ettim. Geri almak için aşağıdakileri yaptım:
git commit --amend -m "T-1000, advanced prototype" git push --force
Uyarı: değişikliklerinizi zorlamanız, yerel şubenizdeki uzak şubenin üzerine yazacaktır. Saklamak istediğiniz hiçbir şeyin üzerine yazmadığınızdan emin olun. Ayrıca, şubeyi başka biri sizinle paylaşıyorsa, değiştirilmiş (yeniden yazılmış) bir taahhüdü zorlamak konusunda dikkatli olun, çünkü yeni yazdığınız taahhüdün eski kopyasına sahiplerse, kendi tarihlerini yeniden yazmaları gerekir.
54
Aşağıdakileri kullanmayı seviyorum:
git status
git add --all
git commit -am "message goes here about the change"
git pull <origin master>
git push <origin master>
49
git commit --amend -m "Your new message"
Belirli bir dalda çalışıyorsanız, şunları yapın:
git commit --amend -m "BRANCH-NAME: new message"
Zaten kodu yanlış mesajla ittiyseniz ve mesajı değiştirirken dikkatli olmanız gerekir. Yani, taahhüt mesajını değiştirip tekrar bastırmayı denedikten sonra sorun yaşarsınız. Düzgünleştirmek için şu adımları izleyin.
Lütfen yapmadan önce tüm cevabımı okudum.
git commit --amend -m "BRANCH-NAME : your new message" git push -f origin BRANCH-NAME # Not a best practice. Read below why?
Önemli not: Doğrudan zorlamayı kullandığınızda, diğer geliştiricilerin aynı dalda çalıştığı kod sorunlarıyla karşılaşabilirsiniz. Bu nedenle, bu çatışmalardan kaçınmak için, gücü zorlamadan önce kodu şubenizden çekmeniz gerekir :
git commit --amend -m "BRANCH-NAME : your new message" git pull origin BRANCH-NAME git push -f origin BRANCH-NAME
Zaten itti ise, taahhüt mesajını değiştirirken en iyi uygulamadır.
43