Git'te belirli bir iri parçayı etkileşimli olarak nasıl aşamalı hale getirebilirim?


106

Git'te, dizinimde aynı dosyadan sahnelenen birkaç hunks varsa, birini etkileşimli olarak nasıl aşamalı hale getirebilirim?

Tüm dosyayı aşamalandırmanın ve ardından saklamak istediğim parçaları yeniden aşamalandırmanın veya çalışan kopyadaki değişiklikleri manuel olarak geri almanın ve ardından bu geri alınan değişiklikleri etkileşimli olarak eklemenin bir alternatifi var mı?

Yanıtlar:


137

Deneyin git reset --patch filename; belgeleregit add --patch göre bunun tersini yapmalıdır . Kısa biçim ayrıca her iki komut için de çalışır.-p


Benim sürümümde olduğunu sanmıyorum (1.6.3.3), ancak bu doğru cevap gibi görünüyor.
Andrew Grimm

2
Bu durumda (ve herhangi bir nedenle yükseltemeyeceğinizi varsayarak), git stash save --keep-indexmevcut çalışma kopyası değişikliklerinizi kaydetmek ve sıfırlamak için kullanmanızı öneririm . Ardından dosyanızı sıfırlayabilir ve istemediğiniz değişiklikleri geri alabilirsiniz. Dosyayı önce geçici bir konuma kopyalarsanız, diffgeri aldığınız değişiklikleri kaydetmek için kullanabilirsiniz . Ardından, dosyayı tekrar ekleyebilirsiniz (ilginizi çekmeyen diğer değişiklikleri sakladığınız için etkileşimli eklemeye gerek yoktur). Kullanım git stash popeski değişiklikleri geri almak için, ve diffsen undid değişiklikleri uygulamak için. Oldukça hantal ... :-(
Aasmund Eldhuset

The short form -p also works for both commands... demek git reset -p filenameistiyorsun?
Nawaz

1
@Nawaz: Doğru - git add -p filenamebu dosyadaki değişiklikleri seçerek aşamalar ve git reset -p filenameseçici olarak değişiklikleri aşamalı olarak kaldırır. git checkout -p -- filenameBir dosyadaki değişiklikleri seçerek atmanıza izin veren de var . Uyarı: Her biri addve resetikisinden diğerini geri almak için kullanılabilir, ancak bu biçimi checkoutbir değişikliği iptal etmek için kullanırsanız , geri alamazsınız.
Aasmund Eldhuset

2

git guihunk'ları veya hatları etkileşimli olarak sahneye koymak veya ayırmak için iyi bir GUI'ye sahiptir. Daha güzel / daha iyi GUI istemcileri vardır, ancak git guihafif, yerleşik ve çapraz platformdur (lin, win, mac).

https://git-scm.com/docs/git-gui

Sahnelemek / sahneden çıkarmak için basitçe bir iri parça üzerine sağ tıklayın. Çizgiler için önce çizgileri vurgulayın, ardından sağ tıklayın.


-1

GitX , bir dosyanın parçalarını ayırmak için güzel bir kullanıcı arayüzüne sahiptir: görüntü açıklamasını buraya girin

Resmi istemciye bir süredir bakılmadı , ancak GitHub'da daha fazla özelliğe sahip bir çatal , bazı çevrelerde popüler. ( bununla ilgili blog yazısı )


1
Dışarıdaki Windows kullanıcıları için Git Extensions'ın benzer şekilde güzel bir kullanıcı arayüzü var.
Aasmund Eldhuset

4
Yani yerleşik yapar git guiEminim kelime "güzel" kullanmayı tercih değilim hariç;)
MatrixFrog

1
SourceTree (Windows + Mac) da bunun için güzel bir kullanıcı arayüzüne sahiptir.
chrnola

Şimdi daha yeni grafiksel Git istemcilerinden bahsetmeliyim - GitKraken çok güzel ve bunu destekliyor (şimdi ticari kullanım için yüksek bir ücretle geliyor). Github en GitHub Masaüstü , ücretsiz güzel ve destekleri kolayca evreleme ve unstaging yakışıklısı. GitKraken ve GitHub Desktop, çapraz platformdur, ancak ikisi de açık kaynak değildir.
jdgregson
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.