Yanıtlar:
Güncelleme (birkaç yıl sonra)
Yalnızca dizinden kaldırmak çok önemlidir.
Doğru: En yakın yanıtın ( Matt Connolly tarafından yazılmıştır ) önerdiği gibi, bir dosyayı dizin içeriğine kolayca kolayca sıfırlayabilirsiniz :
git reset HEAD^ path/to/file/to/revert
HEAD^önceki tamamlama, içeriğini erişmek için dosyayı verir önce sonuncusu.
O zaman, git commit --amendaslen aşağıda yazdığım gibi yapabilirsin.
Git 2.23 ile (Ağustos 2019), yeni komutu kullanabilirsiniz.git restore
git restore --source=HEAD^ --staged -- path/to/file/to/revert
daha kısa:
git restore -s@^ -S -- path/to/file/to/revert
Yine, daha sonra, git commit --amendaslen aşağıda yazdığım gibi yapabilirsin.
Orijinal cevap (Ocak 2011)
Eğer bu senin son işin buysa (ve hiçbir yere itmediysen), düzeltebilirsin :
(ilk önce sakla ya da sakla b)
git commit --amend
Sonra b'yi silin, tekrar onaylayın. B'yi geri yükle ve bittin.
--amend
Mevcut dalın ucunu değiştirmek için kullanılır.
En son işlemeyi her zamanki gibi değiştirmek istediğiniz ağaç nesnesini hazırlayın (bu, normal -i / -o ve açık yolları içerir) ve işlem günlüğü düzenleyicisi, geçerli dalın ipucundan gelen işlem mesajı ile birlikte ekilir.
Yarattığınız taahhüt geçerli ipucunun yerine geçiyor - eğer bir birleşme olsaydı, mevcut ipucunun ebeveynlerini ebeveyn olarak alacak - bu yüzden mevcut üst taahhüdü atılır.
git diff --name-only HEAD^ - (isteğe bağlı) son işlemde değişen dosyaları listelemek için kullanın.git reset HEAD^ path/to/file/to/revert- dizini bu son sürüme sıfırlamak ve çalışma kopyasını el değmeden bırakmak için.git commit --amend- endeks değişikliklerini içerecek son taahhüdün değiştirilmesigit commit -a --amend3. adım için kullanmamanız gerektiğini (yani dosya eklemeyin) veya kaldırmaya çalıştığınız düzenlemeler olan çalışma kopyası değişikliklerinizi yapmayı unutmayın. İsteğe bağlı bir adım 2.5 git checkout path/to/file/to/revert, çalışan kopyanızı da temizlemek olabilir .
git rm --cached path/to/file/to/revertolarak dosyayı ağaçtan silmeden eklentiyi kaldırmak için.
Alternatif olarak kullanıyorsanız git gui, sadece "Son taahhüdü değiştir" seçeneğini seçersiniz, eklenen dosya "Aşamalı" listesinde görünür, "İstenmeyen" listesine taşımak ve onaylamak için bu simgeye tıklayın.
B'yi son işlemden silmek istiyorsan
git rm --cached b (will preserve the file in the working tree but remove it from the index)
git commit --amend
B'deki tüm değişiklikleri son işleminizde kaldırmak istiyorsanız
(backup b)
(modify b to state before incorrect commit)
git commit --amend
(restore b)
git rm --cachedve yedekleme / geri yükleme dansıyla (-1) uzaklaşın.
Dizin hackery gerektirmeyen, ancak yine de eski taahhüt mesajını koruyan bir alternatif:
$ git reset HEAD^
$ git add <all the files you want, excluding the one you don't want>
$ git commit -C HEAD@{1}
Bunu seviyorum çünkü (a) düzenli olarak kullandığım komutları kullanıyor ve (b) git add -ptam olarak ne yapmak istediğimi bulmak için yapabilirim.
... Then stash/delete b, re-commit.., işte kelimeThenolmamalıaftermı? ---amendstach / b sildikten sonra, ...