Bir taahhüt mesajına yanlış olanı yazdım.
Mesajı nasıl değiştirebilirim? Taahhüt henüz itilmedi.
Bir taahhüt mesajına yanlış olanı yazdım.
Mesajı nasıl değiştirebilirim? Taahhüt henüz itilmedi.
Yanıtlar:
git commit --amend
düzenleyicinizi açarak en son işlemin işlem mesajını değiştirmenize olanak tanır. Ayrıca, taahhüt iletisini doğrudan komut satırında aşağıdakilerle ayarlayabilirsiniz:
git commit --amend -m "New commit message"
… Ancak bu, çok satırlı kesinleştirme mesajlarını veya küçük düzeltmeleri girmeyi daha zor hale getirebilir.
Eğer herhangi bir çalışma kopyası değişiklikleri gerektirmeyen emin olun sahnelenen bu yapmadan önce veya onlar da işlenen alacak. ( Değişik olmayan değişiklikler taahhüt edilmez.)
Taahhütünüzü zaten uzak şubenize ittiyseniz, - taahhütlerinizi yerel olarak değiştirdikten sonra (yukarıda açıklandığı gibi) - ayrıca taahhüdü şununla zorlamaya zorlamanız gerekir :
git push <remote> <branch> --force
# Or
git push <remote> <branch> -f
Uyarı: zorla itme, uzak dalın üzerine yerel dalınızın durumunu yazar . Uzak şubede yerel şubenizde olmayan taahhütler varsa , bu taahhütleri kaybedersiniz.
Uyarı: Daha önce başkalarıyla paylaştığınız taahhütleri değiştirme konusunda dikkatli olun. Değişikliklerin yapılması, esasen farklı SHA ID'leri için onları yeniden yazar ; bu, diğer kişilerin yeniden yazdığınız eski taahhüdün kopyalarına sahip olması durumunda bir sorun oluşturur. Eski taahhüdün bir kopyasına sahip olan herkesin çalışmalarını, bazen zor olabilen yeni yeniden yazılmış taahhüdünüzle senkronize etmesi gerekir, bu nedenle paylaşılan taahhüt geçmişini yeniden yazmaya çalışırken başkalarıyla koordinasyon yaptığınızdan emin olun veya yalnızca paylaşılan taahhütleri yeniden yazmaktan kaçının tamamen.
Başka bir seçenek etkileşimli rebase kullanmaktır. Bu, en son mesaj olmasa bile güncellemek istediğiniz mesajları düzenlemenize olanak tanır.
Git squash yapmak için şu adımları izleyin:
// n is the number of commits up to the last commit you want to be able to edit
git rebase -i HEAD~n
Taahhütlerinizi ezdiğinizde - e/r
mesajı düzenlemek için seçeneğini belirleyin:
Eğer kullandığınız zaman git rebase -i HEAD~n
olabilir fazla n kaydedilmesini daha. Git, son taahhütlerde yer alan tüm taahhütleri "toplayacak" ve bu aralık arasında bir yerde birleşme varsa, tüm taahhütleri de göreceksiniz, böylece sonuç n + olacaktır.
Bunu tek bir daldan daha fazlası için yapmanız gerekiyorsa ve içeriği değiştirirken çakışmalarla karşılaşabiliyorsanız, git rerere
Git'in bu çakışmaları sizin için otomatik olarak çözmesine izin verin.
git commit --amend
kadar güçlü değil git rebase -i
.
git commit --amend
(a?) Master taahhüdünü düzeltebilir.
git push -f origin branchname
git push -f
başkaları aynı depoyu kullanıyorsa biraz tehlikeli değil mi?
git commit --amend -c HEAD
. Bu, eski tamamlama mesajınızla önceden doldurulmuş düzenleyiciyi açacaktır, böylece değiştirebilirsiniz.
git commit --amend -m "your new message"
Düzeltmek istediğiniz taahhüt en son işlem değilse:
git rebase --interactive $parent_of_flawed_commit
Birkaç kusurlu taahhüdü düzeltmek istiyorsanız, en eski olanın ebeveynini geçin.
Bir editör gelecektir, verdiğinizden bu yana tüm taahhütlerin bir listesi.
pick
için reword
(veya Git eski sürümleri, üzerine edit
) Eğer düzeltme istediğiniz herhangi kaydedilmesini önünde.Yeniden yazmak istediğiniz her taahhüt için Git sizi düzenleyicinize geri götürür . Düzenlemek istediğiniz her taahhüt için Git sizi kabuğa bırakır. Kabuğun içindeyseniz:
git commit --amend
git rebase --continue
Bu dizinin çoğu, gittiğinizde çeşitli komutların çıktısıyla size açıklanacaktır. Bu çok kolay; ezberlemenize gerek yok - sadece git rebase --interactive
ne kadar zaman önce olursa olsun taahhütleri düzeltmenize izin verdiğini unutmayın .
Zaten itmiş olduğunuz taahhütleri değiştirmek istemeyeceğinizi unutmayın. Ya da belki yaparsınız, ancak bu durumda taahhütlerinizi yerine getirmiş ve üstlerine iş yapmış olabilecek herkesle iletişim kurmak için büyük özen göstermeniz gerekecektir. Birisi yayınlanan bir şubeye yeniden erişim veya sıfırlama yaptıktan sonra nasıl kurtarırım / yeniden senkronize edebilirim?
reword
yerine pick
günlük mesajı düzenlemek için.
$parent_of_flawed_commit
eşdeğerdir $flawed_commit^
.
-p
( --preserve-merges
) kullanın .
Önceki taahhüdü değiştirmek için, istediğiniz değişiklikleri yapın ve bu değişiklikleri hazırlayın ve ardından çalıştırın
git commit --amend
Bu, metin düzenleyicinizde yeni gönderme mesajınızı temsil eden bir dosya açar. Eski tamamlama mesajınızdaki metinle doldurulur. Teslim mesajını istediğiniz gibi değiştirin, ardından dosyayı kaydedin ve bitirmek için düzenleyicinizden çıkın.
Önceki taahhüdü değiştirmek ve aynı günlük iletisini korumak için,
git commit --amend -C HEAD
Önceki taahhüdü tamamen kaldırarak düzeltmek için çalıştırın
git reset --hard HEAD^
Birden fazla tamamlama mesajını düzenlemek istiyorsanız, çalıştırın
git rebase -i HEAD~commit_count
( Commit_count değerini , düzenlemek istediğiniz taahhüt sayısı ile değiştirin.) Bu komut düzenleyicinizi başlatır. İlk komutu (değiştirmek istediğiniz) "seçim" yerine "düzenle" olarak işaretleyin, ardından düzenleyicinizi kaydedin ve çıkın. Taahhüt etmek istediğiniz değişikliği yapın ve ardından çalıştırın
git commit --amend
git rebase --continue
Not: Ayrıca açılan düzenleyiciden "İstediğiniz değişikliği yapın" git commit --amend
git rebase -i HEAD~commit_count
ayrıca seçtiğiniz birçok taahhüdün taahhüt mesajlarını değiştirmenize izin verir. Seçilen işlemleri "al" yerine "geri sar" olarak işaretlemeniz yeterlidir.
git reset --hard
taahhüt edilmeyen değişiklikleri yok eder. Yerine lütfen --hard
ile --soft
.
git reset --hard
tamamen meşru bir komut, ancak soru göz önüne alındığında yanıltıcı. --hard
Teslim mesajında bir yazım hatası yaptıysanız değil, atmak istediğiniz değişiklikleri yaparsanız kullanın !
Daha önce de belirtildiği gibi, git commit --amend
son taahhüdün üzerine yazmanın yolu. Bir not: dosyaların üzerine de yazmak isterseniz , komut
git commit -a --amend -m "My new commit message"
git add file.ext
tam o sıradagit commit --amend
Bunun için de kullanabilirsiniz git filter-branch
.
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ı taahhüt mesajınızdan sonra zaten bazı birleşmeleriniz varsa özellikle yararlıdır.
Bunun, her işlemHEAD
ve kusurlu işlem arasında yeniden yazmayı deneyeceğini unutmayın, bu yüzden msg-filter
komutunuzu çok akıllıca seçmelisiniz ;-)
$flawed_commit^..HEAD
, değil $flawed_commit..HEAD
. man sayfası tarafından belirtildiği gibi: « Komut yalnızca komut satırında belirtilen pozitif referansları yeniden yazar (örn. a..b'yi geçerseniz, yalnızca b yeniden yazılır). »
Bu şekilde tercih ederim:
git commit --amend -c <commit ID>
Aksi takdirde, yeni bir taahhüt kimliği ile yeni bir taahhüt olacaktır.
-c
Birkaç şeyler yapar. Varsayılan olarak eski mesajı kullanır, ancak yazarlık bilgilerini de (kişi ve zaman) kopyalar. -C
mesajı düzenlemenizi istememesi dışında aynı şeyi yapar.
fatal: Option -m cannot be combined with -c/-C/-F/--fixup.
Git GUI aracını kullanıyorsanız, Son taahhüdü değiştir adlı bir düğme vardır . Bu düğmeyi tıklattığınızda son işlem dosyalarınızı ve mesajınızı görüntüler. Sadece bu mesajı düzenlerseniz yeni bir mesaj gönderebilirsiniz.
Veya bu komutu bir konsoldan / terminalden kullanın:
git commit -a --amend -m "My new commit message"
Git yeniden basmayı kullanabilirsiniz . Örneğin, bbc643cd'yi yürütmek için geri değiştirmek isterseniz,
$ git rebase bbc643cd^ --interactive
Varsayılan düzenleyicide, taahhüdünü değiştirmek istediğiniz satırda 'seç' seçeneğini 'düzenlemek' olarak değiştirin. Değişikliklerinizi yapın ve ardından
$ git add <filepattern>
Şimdi kullanabilirsiniz
$ git commit --amend
taahhüdü değiştirmek ve bundan sonra
$ git rebase --continue
önceki başkanlık görevine geri dönmek.
git commit --amend
istiyorsanız kullanabilirsiniz git show
ve yeni mesajı gösterecektir.
Yalnızca son işleme iletinizi değiştirmek istiyorsanız, şunları yapın:
git commit --amend
Bu sizi metin düzenleyicinize bırakacak ve son işleme mesajını değiştirmenize izin verecektir.
Son üç tamamlama mesajını veya o ana kadar tamamlama mesajlarından herhangi birini değiştirmek istiyorsanız HEAD~3
, git rebase -i
komutu sağlayın:
git rebase -i HEAD~3
git commit --amend
ve aynı zamanda kullanabileceğiniz söylüyor git rebase -i HEAD~commit_count
, hem bütün halinde fiş oldu 3
için commit_count
.
Eski bir tamamlama mesajını birden çok dalda değiştirmek zorunda kalırsanız (yani, hatalı mesajla ilgili iş ayırma işlemi birden çok dalda mevcut olabilir):
git filter-branch -f --msg-filter \
'sed "s/<old message>/<new message>/g"' -- --all
Git, yeniden yazmak ve geçici olarak eski referansları yedeklemek için geçici bir dizin oluşturur refs/original/
.
-f
operasyonun yürütülmesini zorlar. Geçici dizin zaten varsa veya altında kayıtlı referanslar varsa bu gereklidir refs/original
. Durum böyle değilse, bu bayrağı bırakabilirsiniz.
--
filtre dalı seçeneklerini düzeltme seçeneklerinden ayırır.
--all
tüm dalların ve etiketlerin yeniden yazıldığından emin olur .
Eski referanslarınızın yedeklenmesi nedeniyle, komutu yürütmeden önce kolayca duruma geri dönebilirsiniz.
Diyelim ki ustanızı kurtarmak ve şubeye erişmek istiyorsunuz old_master
:
git checkout -b old_master refs/original/refs/heads/master
git commit --amend
bir yorum düzeltmek ya da ben unuttum dosyaları eklemek için git add
, ama sadece şimdiye ı ettik önce git push
ed. git filter-branch
Sürüm geçmişi ile tamamen karıştırmak istediğimde de kullanıyorum , ancak OP bunu istemiyor, bu yüzden bu cevap büyük bir sağlık uyarısına ihtiyaç duyuyor - bunu evde denemeyin, gözetleme!
kullanım
git commit --amend
Ayrıntılı olarak anlamak için mükemmel bir gönderi 4'tür . Git Geçmişini Yeniden Yazmak . Ayrıca ne zaman kullanılmayacağından bahsediyor git commit --amend
.
git commit --amend
Size ait yazmadan önce cevap zaten (birkaç kez) verilmişti. Neden tekrar yayınladın? "Git Geçmişini Yeniden Yazmak" için bir bağlantı eklemek isterseniz, mevcut yanıtlardan birini düzenleyebilir veya yorum bırakmış olabilirsiniz.
Burada birkaç seçeneğiniz var. Yapabilirsin
git commit --amend
son göreviniz olduğu sürece.
Aksi takdirde, son taahhüdünüz değilse, etkileşimli bir rebase yapabilirsiniz,
git rebase -i [branched_from] [hash before commit]
Sonra interaktif rebase içine sadece bu taahhüt düzenlemek ekleyin. Geldiğinde, bir git commit --amend
tamamlayın ve tamamlama mesajını değiştirin. Bu işlem noktasından önce geri almak isterseniz, bu işlemi de kullanabilir git reflog
ve silebilirsiniz. Sonra git commit
tekrar yap.
Bu sizin son taahhüdünüzse, taahhüdü değiştirin :
git commit --amend -o -m "New commit message"
( Yalnızca gönderme mesajını değiştirdiğinizden emin olmak için -o
( --only
) bayrağını kullanarak)
Gömülü bir taahhütse, müthiş etkileşimli rebase'i 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 öğreticisi (veya yalnızca 8 tuş vuruşuyla nasıl yeniden başlayacağınız 3j
cw
r
EscZZ
):
vimtutor
Zamanın varsa koşh
j
k
l
hareket tuşlarına karşılık gelir ←↓↑→3j
Üç satır aşağı gideri
ekleme moduna girmek için - yazdığınız metin dosyada görünecektirc
ekleme modundan çıkmak ve "normal" moda dönmek içinu
geri almakr
yeniden yapmakdd
, dw
, dl
Sırasıyla bir çizgi, kelime veya harfi silmek içincc
, cw
, cl
Sırasıyla bir çizgi, kelime ya da harf değiştirmek (aynı dd
i
)yy
, yw
, yl
Sırasıyla ( "yank") bir çizgi, kelime veya harf kopyalamakp
veya P
sırayla veya mevcut konumdan önce yapıştırmak için:w
Enter bir dosyayı kaydetmek (yazmak):q!
Enter kaydetmeden çıkmak:wq
Enter veya ZZ
kaydetmek ve çıkmakMetni çok düzenlerseniz , Dvorak klavye düzenine geçin, dokunma türünü öğ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 taahhütlerinizi silmez; Bunları reflogda bulabilirsiniz:
$ git reset @~3 # Go back three 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
* Gibi --hard
ve --force
olsa seçenekleri dikkat - veri atabilir.
* Ayrıca, birlikte çalıştığınız dallarda geçmişi yeniden yazmayın.
nano
? Bir metin dosyasına yapılması gereken önemsiz değişikliklerden bahsediyoruz, "en iyi" metin editörü hakkında alev savaşı oluşturacak hardcore kodlamadan değil.
ddjjpZZ
bir taahhüt 2'yi aşağı taşır. Temel Vim bilgisi hakkında hiçbir sır yoktur; Vim ile nano'dan daha rahat olmak 10 dakika sürer.
Git GUI'sini kullanıyorsanız, itilmemiş son taahhüdü değiştirebilirsiniz:
Commit/Amend Last Commit
Git GUI'yi olabildiğince çok kullanıyorum ve bu size son taahhüdü değiştirme seçeneği sunuyor:
Ayrıca, git rebase -i origin/master
her zaman ustanın üstünde yaptığınız taahhütleri sunacak ve size değişiklik yapma, silme, yeniden sıralama veya ezme seçeneği sunan güzel bir mantra. İlk önce bu hash'ı ele geçirmeye gerek yok.
Vay canına, bunu yapmanın birçok yolu var.
Bunu yapmanın başka bir yolu da son taahhüdü silmek, ancak işinizi kaybetmemek için değişikliklerini korumaktır. Daha sonra düzeltilmiş mesajla başka bir işlem yapabilirsiniz. Bu şöyle görünecektir:
git reset --soft HEAD~1
git commit -m 'New and corrected commit message'
Bir dosya eklemeyi veya bir değişiklik yapmayı unutursam bunu her zaman yaparım.
--soft
Bunun yerine belirtmeyi unutmayın--hard
, aksi takdirde bu taahhüdü tamamen kaybedersiniz.
git commit --amend
2 adımlı bir işlem olması dışında tam olarak aynı şeyi yapar .
--amend
yazar bilgilerini tutacaktır, ancak soru yalnızca iletiyi değiştirmenizi ister.
Eski mesajları düzenlemeye yardımcı olacak bir Windows / Mac GUI arayan herkes için (yani sadece en son mesaj değil), Sourcetree'yi tavsiye ederim . İzlenecek adımlar aşağıdadır.
Henüz uzaktan kumandaya itilmemiş olan taahhütler için:
Unable to create 'project_path/.git/index.lock': File exists.
aynı anda birden çok taahhüt iletileri değiştirmeye çalışırken bu başarısız gördüm . Sorunun tam olarak ne olduğundan veya Sourcetree'nin gelecekteki bir sürümünde düzeltilip düzeltilmeyeceğinden emin değilim, ancak bu gerçekleşirse bunların birer birer yeniden baslanmasını öneriyoruz (daha yavaş ama daha güvenilir görünüyor).... Veya ... zaten itilmiş olan taahhütler için:
Yukarıdakine benzer olan, ancak dalı zorla itmek için komut satırından ( ) başka bir komutun çalıştırılmasını gerektiren bu yanıttaki adımları izleyin git push origin <branch> -f
. Hepsini okumanızı ve gerekli önlemleri almanızı öneririm!
Yalnızca en son taahhüdü düzenlemek istiyorsanız şunu kullanın:
git commit --amend
veya
git commit --amend -m 'one line message'
Ancak, art arda birkaç işlem düzenlemek istiyorsanız, bunun yerine yeniden basma özelliğini kullanmalısınız:
git rebase -i <hash of one commit before the wrong commit>
Bir dosyaya, yukarıdaki gibi, şunu yazın edit/e
diğer seçeneklerden birini veya kaydet ve çık'a basın.
Şimdi ilk yanlış işlemde olacaksın. Dosyalarda değişiklik yapın, bunlar sizin için otomatik olarak hazırlanır. tip
git commit --amend
Kaydedip çıkın ve yazın
git rebase --continue
tüm seçimleriniz bitene kadar bir sonraki seçime geçmek için.
Bu şeylerin, söz konusu taahhütten sonra tüm SHA karma değerlerini değiştirdiğini unutmayın.
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, aşamalı şeylerle olan bağlılığınızı yanlışlıkla artırmamanızı sağlar. Tabii ki uygun bir $EDITOR
konfigürasyona sahip olmak en iyisidir . Daha sonra -m
seçeneği dışarıda bırakabilirsiniz, Git tamamlama mesajını eskisiyle doldurur. Bu şekilde kolayca düzenlenebilir.
git commit --amend
. Soru çok spesifikti, bu yüzden daha uzun! = Daha iyi. -o
Bayrağın kesin olarak belirtilmesi muhtemelen bilgilerin geri kalanına gömülecektir. Ben de şimdiden çok oy alan bir cevabı düzenlemekte rahat değilim.
--only
seçenek --amend
mevcut olsa da 1.7.11.3'te ( ea2d4ed35902ce15959965ab86d80527731a177c ) düzeltilinceye kadar doğru çalışmadı . Yani 2008 yılında doğru cevabı geri muhtemelen böyle bir şey olurdu: git stash; git commit --amend; git stash pop
.
Son yanlış işlem mesajınızı tek bir satırdaki yeni işlem mesajıyla güncelleyin:
git commit --amend -m "your new commit message"
Veya Git sıfırlamayı aşağıdaki gibi 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ü birden fazla taahhütte kırmanı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 separately 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 taahhütte başarıyla kırdınız.
git commit --amend
, en çok oy alan cevapta nasıl söylediği gibi kullanın . Ayrıca, bu ilk yanıttagit reset --soft HEAD^
yazılım sıfırlamasıyla aynı şekilde çalışır , çünkü her ikisi de ilk üst öğeye geri döner.
git reset
bir taahhüt mesajı birden fazla taahhüt mesajları bölmek için bir fikir vermek için çözüm eklemek için zahmet . Çünkü kullanmaya başladığımda bu problemle karşılaştım git
. Bazen, bu gerçekten yardımcı olabilir. :)
Bu soruda çok fazla cevap var, ancak hiçbiri Vim kullanarak eski taahhüt mesajlarının nasıl değiştirileceğini süper ayrıntılı olarak açıklamıyor . Bunu kendim yapmaya çalışıyordum, bu yüzden bunu özellikle Vim'de deneyimi olmayan insanlar için nasıl yaptığımı ayrıntılı olarak yazacağım!
Sunucuya aktardığım en son beş taahhüdümü değiştirmek istedim. Bu oldukça 'tehlikelidir' çünkü bir başkası bundan çekilirse, taahhüt mesajlarını değiştirerek işleri karıştırabilirsiniz. Ancak, kendi küçük dalınız üzerinde çalışırken ve hiç kimsenin onu çekmediğinden emin olduğunuzda, bunu şu şekilde değiştirebilirsiniz:
Diyelim ki en son beş taahhüdünüzü değiştirmek istiyorsunuz ve bunu terminalde yazıyorsunuz:
git rebase -i HEAD~5
* Burada 5, değiştirmek istediğiniz işlem mesajı sayısıdır (bu nedenle, 10. işlemin son işlemeyi değiştirmek istiyorsanız, 10 yazarsınız).
Bu komut sizi Vim'e götürecek ve işlem geçmişinizi 'düzenleyebilirsiniz'. Son beş işleminizi en üstte şu şekilde göreceksiniz:
pick <commit hash> commit message
Bunun yerine pick
yazmanız gerekiyor reword
. Bunu yazarak Vim'de yapabilirsiniz i
. Bu, ekleme moduna geçmenizi sağlar. ( Altta INSERT kelimesi ile ekleme modunda olduğunuzu görüyorsunuz .) Değiştirmek istediğiniz taahhütler için, reword
yerine şunu yazınpick
.
Ardından bu ekranı kaydetmeniz ve çıkmanız gerekir. Bunu önce Escdüğmesine basarak 'komut kipine' girerek yaparsınız (alttaki INSERT kelimesi kaybolmuşsa komut kipinde olduğunuzu kontrol edebilirsiniz ). Sonra yazarak bir komut yazabilirsiniz :
. Kaydetme ve çıkma komutu wq
. Yani :wq
yazdığınızda doğru yoldasınız demektir.
Sonra Vim, yeniden yazmak istediğiniz her taahhüt mesajının üzerinden geçecektir ve burada taahhüt mesajlarını değiştirebilirsiniz. Bunu ekleme moduna girerek, tamamlama mesajını değiştirerek, komut moduna girerek kaydedip çıkın. Bunu beş kez yapın ve Vim'iniz bitti!
Daha sonra, yanlış taahhütlerinizi zaten ittiyseniz, git push --force
bunların üzerine yazmanız gerekir . Bunun git push --force
oldukça tehlikeli bir şey olduğunu unutmayın , bu yüzden yanlış taahhütlerinizi ittiğinizden kimsenin sunucudan çekilmediğinden emin olun!
Şimdi tamamlama mesajlarınızı değiştirdiniz!
(Gördüğünüz gibi, Vim'de deneyimli değilim, bu yüzden ne olduğunu açıklamak için yanlış 'lingo' kullanırsam, beni düzeltmekten çekinmeyin!)
<nitpick>
Stack Overflow'da "konu" yoktur, çünkü bu bir tartışma forumu değildir, yalnızca "sorular", "cevaplar" ve "gönderiler" vardır. </nitpick>
. Ayrıca, Vim'in tüm sürümleri aynı değildir, hepsi ekleme modunda karakterleri silmenize izin vermez (bir şekilde mantıklı, değil mi?). Vim'deki karakterleri her zaman silmek istiyorsanız X
ve x
bunu yapacaksanız ( x
imlecin önündeki karakterleri çok az siler, X
arkasından silinir). Hata yaparsanız, u
geri almak için tekrar tekrar kullanabilirsiniz . Son olarak, etkileşimli rebase editörü r
için kısayol reword
.
cw
başında yazılır (soru vim ile ilgili olmasa da, katılıyorum).
nano
veya Midnight Komutanın mcedit.
Sen kullanabilirsiniz git-Rebase-reword
Herhangi bir taahhüdü (sadece son değil) aynı şekilde düzenlemek için tasarlanmıştır commit --amend
$ git rebase-reword <commit-or-refname>
Bu bir taahhüt değiştirmek için etkileşimli rebase eyleminden sonra adlandırılır: "geri sarma". Bu gönderiye bakın ve insan- bölüm etkileşimli modu-
Örnekler:
$ git rebase-reword b68f560
$ git rebase-reword HEAD^
g c; g rb -i @~9
, yeni ben istediğiniz yere taahhüt değişiklik taşıyın (işlemek ve Rebase) commit
için f
( fixup
) ve kaydedin. Bundan daha hızlı bir şey istiyorsanız, takma ad olabilir git commit --fixup=<commit>; git rebase -i --autosquash <commit>^
Ben takma adlar eklemiş reci
ve recm
için recommit (amend)
o. Şimdi git recm
veya ile yapabilirim git recm -m
:
$ vim ~/.gitconfig
[alias]
......
cm = commit
reci = commit --amend
recm = commit --amend
......
İçinde bir yazım hatası olan bir taahhütte bulunduğumu 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 zorla zorlamak, uzak dalın yerel şubeniz üzerine yazılmasına neden olur. Saklamak istediğiniz hiçbir şeyin üzerine yazmayacağınızdan emin olun. Ayrıca, başka bir kişi sizinle şubeyi paylaşırsa, değiştirilmiş (yeniden yazılmış) bir taahhüdü zorlama konusunda dikkatli olun, çünkü az önce yazdığınız taahhüdün eski kopyasına sahiplerse kendi tarihlerini yeniden yazmaları gerekir.
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>
Kodu uzak şubenize ( GitHub / Bitbucket ) göndermediyseniz, komut satırındaki yürütme iletisini aşağıdaki gibi değiştirebilirsiniz.
git commit --amend -m "Your new message"
Belirli bir dal üzerinde çalışıyorsanız bunu yapın:
git commit --amend -m "BRANCH-NAME: new message"
Kodu zaten yanlış mesajla ittiyseniz ve mesajı değiştirirken dikkatli olmanız gerekir. Yani, taahhüt mesajını değiştirip tekrar göndermeyi denedikten sonra, sorun yaşarsınız. Düzgünleştirmek için aşağıdaki adımları izleyin.
Lütfen yapmadan önce tüm cevabımı okuyun.
git commit --amend -m "BRANCH-NAME : your new message"
git push -f origin BRANCH-NAME # Not a best practice. Read below why?
Önemli not: Force Push'u doğrudan 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, zorlamayı zorlamadan önce kodu şubenizden almanız gerekir :
git commit --amend -m "BRANCH-NAME : your new message"
git pull origin BRANCH-NAME
git push -f origin BRANCH-NAME
Bu, önceden iletilmişse, tamamlama mesajını değiştirirken en iyi uygulamadır.