Git'in doğumundan bu yana 12 yıl geçmiş olmasına ve internette git ile ilgili sayısız makale olmasına rağmen, hala (ben dahil) işlevlerini tam olarak kavrayamayan birçok insan var. Aşağıdaki giriş sadece benim kişisel git anlayışıma dayanmaktadır ve git cümlesine tam olarak uymayan bazı kelimeler uydurmuş olabilir. Amaç sadece git'i popüler hale getirmektir, böylece yeni başlayanlar git ile nasıl hızlı bir şekilde başlayacaklarını kabaca anlayabilirler. Aynı zamanda, aşağıdaki tüm tartışmalarda, ana şube yöneticisi durumunda olan tek bir dalın kullanıldığını varsayıyoruz.Bu yaklaşım git belirtimine uymasa da, gerçekte çoğu kullanıcı doğrudan ana dal üzerinde çalışmaktadır. Bu yüzden burada çeşitli dalların daha karmaşık durumlarını tanıtmayacağız veya etiket işlemlerini de dahil etmeyeceğiz, sadece en basit ana dala nasıl geri dönüleceğinden bahsedeceğiz.
temel kavram
3 adım
Normal şartlar altında, iş akışımız yukarıdaki şekildeki üç ok çizgisine karşılık gelen üç adımdan oluşur:
git ekle.
git commit -m "yorum"
git itme
git add Tüm dosyaları geçici depolama alanına koyun;
git commit, tüm dosyaları geçici depolama alanından yerel depoya gönderir;
git push, tüm dosyaları yerel depodan uzak depoya iter.
4 bölge
Git'in kafa karıştırıcı olmasının ana nedeni, svn gibi geleneksel sürüm yönetimi araçlarına kıyasla, bir aşamalandırma alanı (Stage) kavramını tanıtmasıdır.Bu ek kavram nedeniyle, birçok insanın kafası karışır. Aslında, yeni başlayanlar için, her bir bölgenin özel olarak nasıl çalıştığını önemsememize gerek yok ve yalnızca 4 bölgenin olduğunu bilmemiz gerekiyor:
Çalışma alanı
Sahne alanı (Sahne)
Yerel Depo
Uzak Depo
5 eyalet
Yukarıdaki 4 alanda, her alana başarılı bir şekilde girildikten sonra bir durum oluşturulacaktır, artı başlangıç durumu, toplam 5 durum vardır. Aşağıda bu 5 durumu sırasıyla adlandırıyoruz:
Değiştirilmemiş (Menşei)
Değiştirilmiş
Aşamalı (Aşamalı)
Taahhütlü
İtildi (İtildi)
Kontrol edin ve değiştirin
Temel kavramları anladıktan sonra, bir hata yaptıktan sonra nasıl iptal edileceğinden bahsedelim. Her şeyden önce, bu 3 adımın her birinde neyin değiştirildiğini nasıl kontrol edeceğimizi anlamalıyız ve ardından değişikliğin başarılı olup olmadığını değerlendirebiliriz. Kontrol etme ve değiştirme için ikinci düzey komutlar aynıdır, hepsi farklıdır, ancak parametreler farklıdır.
Değiştirildi, aşamalı değil
git fark
Öncelikle, dosyayı tarayıcıya kaydedip de git add yapmadıysak bir göz atalım.Önceden, hangi değişikliklerin yapıldığını nasıl kontrol edebiliriz? Bir deney yapmak için rastgele bir dosya alalım:
Dosyanın başlangıcında ikinci satıra rastgele 4 numara 1234 ekledik ve diske kaydettik. Şu anda dosya değiştirilmiş duruma girdi ancak henüz geçici depolama alanına girmedi. Git diff çalıştırdık ve sonuçlar aşağıdaki gibiydi:
diff --git a / index.md b / index.md
dizin 73ff1ba..1066758100644
--- a / index.md
+++ b / index.md
@@ -1,5 +1,5 @@
---
-layout: ana
+ 1234layout: ana
siyah renk
---
Git diff'in sonucu bize hangi dosyaların değiştirildiğini söyler.
Geçici olarak saklandı, gönderilmedi
git diff - önbelleğe alınmış
Şimdi değişiklikleri evreleme alanına koyuyoruz ve bir göz atıyoruz. Önce git add. Komutunu çalıştırın, ardından git diff'i çalıştırın, sonuç bulamayacaksınız:
Bu, git diff komutunun yalnızca çalışma alanımız ve hazırlama alanı arasındaki farkı kontrol ettiği anlamına gelir.Eğer hazırlama alanı ile yerel depo arasındaki farkı görmek istiyorsak, git diff --cached parametresini eklememiz gerekir:
diff --git a / index.md b / index.md
dizin 73ff1ba..1066758100644
--- a / index.md
+++ b / index.md
@@ -1,5 +1,5 @@
---
-layout: ana
+ 1234layout: ana
siyah renk
---
Şu anda gördüğümüz fark, hazırlık alanı ile yerel depo arasındaki farktır.
Gönderildi, aktarılmadı
git diff ana kaynağı / ana
Şimdi, aşamalandırma alanından yerel depoya değişiklikleri gönderiyoruz ve farklılıklara bakıyoruz. Önce git commit'i çalıştırın ve sonra git diff --cached'i çalıştırın, fark yok, git diff master origin / master'ı çalıştırın, farkı görebilirsiniz:
Burada, ana yerel deponuz ve menşe / ana, uzak deponuzdur. Ana, ana dal anlamına gelir.Hepimiz ana şube üzerinde çalıştığımız için, burada her iki taraf da ana birimdir ve başlangıç uzaklığı temsil eder.
Düzenlemeyi geri al
Çeşitli değişikliklerin nasıl kontrol edileceğini anladıktan sonra, çeşitli geri alma işlemlerini denemeye başladık.
Değiştirildi, aşamalı değil
Dosyayı sadece düzenleyicide değiştirirsek, ancak git add çalıştırmadıysak, şu anda dosyamız hala çalışma alanındadır ve geçici depolama alanına girmemişse, kullanabiliriz:
git checkout.
veya
git sıfırlama - sert
Geri alma işlemini gerçekleştirmek için.
Gördüğünüz gibi, git checkout'u çalıştırdıktan sonra, değişiklik geri alındı ve git diff'te hiçbir şey yok.
Bir çift zıtlığın zıtlığı git add. Git checkout. Değişikliği yaptıktan sonra, ileriye doğru bir adım atmak ve değişikliğin geçici depolama alanına girmesine izin vermek istiyorsanız git add komutunu çalıştırın.Geri bir adım atmak ve değişikliği geri almak istiyorsanız git checkout'u çalıştırın.
Geçici olarak saklandı, gönderilmedi
Git add. Çalıştırdınız, ancak git commit -m "comment" komutunu çalıştırmadınız. Şu anda hatanın farkına vardınız ve bunu geri almak istiyorsanız, şunları yapabilirsiniz:
git sıfırla
git checkout.
veya
git sıfırlama - sert
Git reset, değişikliği git add'den önceki duruma döndürür, yani dosyanın kendisi hala değiştirilmiş ve geçmemiş durumdadır.Değiştirilmemiş duruma dönmek istiyorsanız, git kontrolünü gerçekleştirmeniz gerekir.
Fark etmiş olabileceğiniz gibi, yukarıdaki iki adım aynı komut git reset --hard ile yapılabilir. Evet, değişikliklerinizi tek adımda değiştirilmemiş duruma geri yükleyebilen bu güçlü komuttur.
Gönderildi, aktarılmadı
Elleriniz çok hızlı. İkiniz de git add ve git commit yaptınız. Şu anda kodunuz yerel deponuza girdi ama pişman oluyorsunuz, ne yapmalısınız? Merak etmeyin, bir yolu var.
git reset - sabit kökeni / ana
Hala bu git reset --hard komutu, ancak bu sefer ek bir origin / master parametresi var. Yukarıda söylediğimiz gibi, origin / master uzak depoyu temsil ediyor. Yerel deponuzu kirlettiğiniz için uzak depoyu kullanabilirsiniz. Kodu geri alın.
İtildi
Maalesef elleriniz çok hızlı. Git add, git commit ve git push var. Şu anda kodunuz uzak depoya girdi. Neyse ki geri yüklemek istiyorsanız, yerel deponuz ve uzak deponuz eşdeğer olduğu için, yalnızca yerel depoyu geri yüklemeniz ve ardından uzak depoya zorla göndermeniz gerekir:
git reset --hard KAFA ^
git push -f
sonuç olarak
Yukarıdaki 4 durumu iptal etmek için hepimiz git reset --hard komutunu kullanıyoruz.İlk 2 durumun kullanımı bile aynıdır, bu nedenle git reset --hard komutunun kullanımında ustalaştığınız sürece, bir daha asla işlem yapma konusunda endişelenmenize gerek kalmayacak. Yanlış.