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 --amend
aslen 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 --amend
aslen 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 --amend
3. 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/revert
olarak 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 --cached
ve 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 -p
tam olarak ne yapmak istediğimi bulmak için yapabilirim.
... Then stash/delete b, re-commit..
, işte kelimeThen
olmamalıafter
mı? ---amend
stach / b sildikten sonra, ...