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ı.
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
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/rseçeneğini seçin.
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,
pickgeri
reword(veya
rewordeski sürümlerine göre)
edit.
- Kaydettikten sonra, Git listelenen taahhütleri tekrar edecektir.
- Düzeltmek istediğiniz düzeltmelerden önce,
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?
Ö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
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
Bunun için git
filter-branch de kullanabilirsiniz.
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.
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"
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.
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~3koyunuz:
git rebase -i HEAD~3
Eski işlem iletisini birkaç şubeyle değiştirmeniz gerekirse (yani, birkaç şubede hata mesajı olan bir mesaj var), şunları kullanabilirsiniz:
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ş.
Git GUI kullanıyorsanız, tıklanmayan son işlemi değiştirebilirsiniz:
Commit/Amend Last Commit
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 ):
-
vimtutorvarsa
vimtutorçalıştırın.
-
h
j
k
lgezinti 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,
dlsı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
iaynı)
-
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
-
:wDosyayı kaydetmek (yazmak) için Enter
-
:q!Kaydetmeden çıkışa gir
-
:wqKaydetmek 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.
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:
Son taahhüdün kullanımını değiştirmek istiyorsanız:
git commit --amend
veya
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
Son mesajı değiştirmek isterseniz,
--only bayrağını ya da
-o kısayolunu
commit --amend :
Son hata mesajını bir satırda yeni bir onay mesajı ile güncelleyin:
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
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!)
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>
örnekler:
$ git rebase-reword b68f560 $ git rebase-reword HEAD^
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 ......
Bir yazım hatası ile düzeltme bastırdı fark ettim. İptal etmek için aşağıdakileri yaptım:
55