Git'in daha önce sormaktan korktuğunuz kısımları hakkında daha fazla bilgi edinmek istiyorsanız, o zaman bu liste tam size göre. Burada en tipik durumlar ve bunların her ikisini de çözmenin yolları toplanmıştır. kişisel deneyim yazar ve İnternet'in her yerinde toplanmıştır.

Yorum kaydetmede hata

Kayıt henüz sunucuya gönderilmediyse (push), mesajın metnini son işleme kadar düzenlemenizi sağlayan basit bir komut kullanabilirsiniz.

git commit --amend

Son taahhüdü nasıl geri alırım?

Git reset'i şu şekilde kullanabilirsiniz:

git sıfırlama --hard HEAD ~ 1

HEAD ~ 1, HEAD'den önce bir işlem anlamına gelir, yani mevcut konuma. Bunun tüm değişiklikleri geri alacak "nükleer" bir yöntem olduğunu belirtmekte fayda var. Yaptığınız her şeyi kaydetmeniz gerekiyorsa, ancak taahhüt etmek için henüz zamanınız yoksa, şunu kullanın:

git sıfırlama --yumuşak KAFA ~ 1

Sunucudaki dalı sil

git push kaynağı - şube_adı silme

"Git çekme" ve "git getirme" arasındaki fark nedir?

git çekme aslında bir git getirme işlemidir ve hemen ardından git birleştirme gelir. git fetch, sunucudaki değişiklikleri alır ve bunları refs / remotes / içinde depolar. Bu, yerel şubeleri ve mevcut değişiklikleri hiçbir şekilde etkilemez. Ve git pull zaten tüm bu değişiklikleri yerel kopyaya itiyor.

Kaydetmeden önce "git add" nasıl geri alınır?

Git add dosya adını yanlışlıkla çalıştırdınız ve bu dosyayı eklemeyi geri almak istiyorsunuz. Taahhüt henüz yapılmadıysa, bu yardımcı olacaktır:

git reset dosya adı

Birleştirme çakışmalarını nasıl çözerim?

Çakışmaları çözmek için uygun bir arayüz sağlayan git mergetool'u kullanın.

Git tarafından izlenmeyen tüm yerel dosyaları ve dizinleri mevcut kopyanızdan kaldırın

Dikkat! Bunu yapmadan önce bir yedek alsan iyi olur.

Sunucudan tüm dalları klonlayın

Muhtemelen bunu zaten yapmışsınızdır ve dallar gizlenmiştir. İşte hepsini göstermek için bir komut:

Git checkout origin / branchname'i istediğiniz şubeye bakmak için kullanabilirsiniz. Veya git checkout -b branch_name origin / branch_name uzak olana karşılık gelen yerel bir dal oluşturmak için.

Yerel şubeyi yeniden adlandırın

git şube -m eski ad yeni ad

Herhangi bir işleme geri dönün

Sıfırlamayı daha önce gösterildiği gibi kullanabilirsiniz, ancak bu, yalnızca bakmak değil, bulunduğunuz duruma kalıcı olarak geri dönmek istediğiniz anlamına gelir (bunun için kontrol etmeniz gerekir). Kaydetme kimliği, git log komutunun çıktısında görünenle aynı olmalıdır.

git reset --hard commit_id

Yine, bu mevcut değişiklikleri geri alacaktır, bu yüzden istediğinizin bu olduğundan emin olun. Veya --hard yerine --soft kullanın.

Alt modülü kaldır

Alt modüllerin oluşturulması nadiren kullanılır, ancak bazen yine de gereklidir. İşte ihtiyacınız olan şey:

git submodule deinit submodulename
git rm alt modül adı
git rm - önbelleğe alınmış alt modül adı
rm -rf .git / modüller / altmodül adı

Git çekme sırasında yerel dosyaların üzerine yaz

Git sıfırlama size tekrar yardımcı olacaktır:

git getir - hepsi
git reset - sabit kökeni / ana

Depoya boş bir dizini nasıl eklerim?

Olmaz! Basitçe desteklenmez ve sizin için gerekli görülmez. Ama bir numara var. İstediğiniz dizinde aşağıdaki içeriklerle bir .gitignore dosyası oluşturabilirsiniz:

# Bu dizindeki her şeyi yok sayın
*
# Dosyanın kendisi hariç. Gitignore
! .gitignore

"Svn dışa aktarımına" benzer şekilde kaynakları dışa aktarma

Git arşivini şu şekilde kullanın:

git arşiv --format zip --output /path/to/file/file.zip master

Planlanan işleme zaten eklenenler dışındaki tüm değişiklikleri geri alın

git checkout -.

Geçerli yerel şubeden sunucuda yeni bir şube oluşturun

git config --global push.default akımı
git push -u

Silinen dosyayı kurtar

İlk olarak, dosyanın hala var olduğu son kaydı bulmanız gerekir.

Uzak şubeler, uzak depolarınızdaki şubelerin durumuna bağlantılardır. Bunlar yerel şubelerdir ve taşınamaz; ağ üzerinden her iletişim kurduğunuzda otomatik olarak hareket ederler. Uzak şubeler, uzak havuzlardaki şubelerin onlara en son bağlandığınızda nerede olduğunu size hatırlatmak için yer imi görevi görür.

(Uzak depo adı) / (şube) gibi görünürler. Örneğin, kaynak sunucudaki ana şubeye en son bağlandığınızda neye benzediğini görmek istiyorsanız, kaynak / ana dalı kontrol edin. Siz ve bir ortak aynı sorun üzerinde çalıştıysanız ve onlar da iss53 şubesini yüklediyseniz, kendi yerel iss53 şubeniz olabilir; ancak sunucudaki bu dal, origin / iss53'teki commit'i gösterecektir.

Tüm bunlar muhtemelen kafa karıştırıcıdır, bu yüzden bir örneğe bakalım. Git.ourcompany.com adresinde çevrimiçi olarak kendi Git sunucunuz olduğunu varsayalım. Ondan bir şey klonlarsanız, Git otomatik olarak orijini adlandıracak, oradan tüm verileri alacak, ana dalın işaret ettiği şeyi gösteren bir işaretçi oluşturacak ve yerel olarak orijin / ana olarak adlandıracaktır (ancak onu taşıyamazsınız) ... Git ayrıca sizi kaynağın ana dalıyla aynı yerde başlayan kendi ana dalınızı da yapacak, böylece üzerinde çalışacak bir şeyiniz olacak (bkz. Şekil 3-22).

Şekil 3-22. Bir Git projesini klonlamak size kendi ana dalınızı ve başlangıçtaki ana dala işaret eden başlangıç \u200b\u200b/ ana dalınızı verir.

Yerel ana şubenizde bir şey yaparsanız ve bu arada başka biri değişiklikleri git.ourcompany.com'a iter ve orada ana şubeyi güncellerse, öyküleriniz farklı şekilde devam edecektir. Ayrıca, kaynak sunucuya bağlanana kadar, kaynak / ana işaretçiniz hareket etmeyecektir (bkz. Şekil 3-23).



Şekil 3-23. Yerel çalışma yaparken ve biri değişiklikleri uzak bir sunucuya iterken, her hikaye farklı bir şekilde devam eder.

Çalışmanızı senkronize etmek için git fetch origin komutunu çalıştırın. Bu komut hangi sunucu kaynağının eşleştiğini arar (bizim durumumuzda git.ourcompany.com); oradan henüz sahip olmadığınız tüm verileri alır ve yerel veri deponuzu günceller; orijin / ana işaretçiyi yeni bir konuma taşır (bkz. Şekil 3-24).


Şekil 3-24. Git fetch komutu uzak bağlantılarınızı güncelleyecektir.

Nasıl görüneceklerini göstermek için uzak şubeler Birden çok uzak sunucunun bulunduğu bir durumda, geliştirme ekiplerinizden yalnızca biri tarafından geliştirme için kullanılan başka bir dahili Git sunucunuz olduğunu varsayalım. Bu sunucu git.team1.ourcompany.com adresinde bulunmaktadır. Git remote add komutunu kullanarak halihazırda üzerinde çalışmakta olduğunuz projeye yeni bir uzak bağlantı olarak ekleyebilirsiniz, tıpkı Bölüm 2'de açıklandığı gibi. Bu uzak sunucu ekibini adlandırın, bu tam URL'nin kısaltması olacaktır (bkz. 3-25).



Şekil 3-25. İlave bir uzak sunucu eklemek.

Artık sunucudaki istemediğiniz her şeyi almak için git fetch teamone çalıştırabilirsiniz. Bu sunucu şu anda yalnızca başlangıçtaki verilerin bir alt kümesine sahip olduğundan, Git herhangi bir veri almaz, ancak teamone / master adında uzak bir dalı çıkarır ve bu, teamone'daki ana dalla aynı işleme işaret eder ( Şekil 3-26'ya bakın).



Şekil 3-26. Artık teamone'un ana şubesine yerel bir bağlantınız var.

Değişiklikleri gönderme

Başkasıyla çalışmak istediğiniz bir serverfix şubeniz varsa, ilk şubenizi gönderdiğiniz gibi gönderebilirsiniz. Git push (uzak sunucu) (şube) çalıştırın:

$ git push origin serverfix Sayma nesneleri: 20, tamamlandı. Nesnelerin sıkıştırılması:% 100 (14/14), yapıldı. Nesne yazma:% 100 (15/15), 1.74 KiB, bitti. Toplam 15 (delta 5), \u200b\u200byeniden kullanılan 0 (delta 0) [e-posta korumalı]: schacon / simplegit.git * serverfix -\u003e serverfix

Bu bir tür kasılma. Git, serverfix dal adını otomatik olarak refs / Heads / serverfix: refs / Heads / serverfix olarak genişletir, bu da "yerel serverfix dalımı al ve uzak serverfix dalını buradan güncelle" anlamına gelir. Referansları / başlıkları / kısmı Bölüm 9'da ayrıntılı olarak tartışacağız, ancak genellikle ihmal edilebilir. Ayrıca git push origin serverfix: serverfix'i çalıştırabilirsiniz - aynısı olacak - "serverfix'imi al ve uzak serverfix yap" diyor. Bu biçimi, yerel bir şubeyi farklı bir adla uzak bir şubeye göndermek için kullanabilirsiniz. Dalın uzak sunucuda serverfix olarak adlandırılmasını istemiyorsanız, önceki komut yerine git push origin serverfix: awesomebranch komutunu çalıştırın. Bu, yerel serverfix dalınızı uzaktaki projenin harika dal dalına gönderecektir.

$ git uzak kökeni getir: Nesneleri sayma: 20, tamam. uzak: Nesneleri sıkıştırma:% 100 (14/14), tamamlandı. uzak: Toplam 15 (delta 5), \u200b\u200byeniden kullanılan 0 (delta 0) Nesneleri açma:% 100 (15/15), bitti. Nereden [e-posta korumalı]: schacon / simplegit * serverfix -\u003e origin / serverfix

Veri aldığınızda yeni uzak şubeleriniz olduğunda, bunlar için otomatik olarak yerel düzenlenebilir kopyalar almadığınızı unutmamak önemlidir. Başka bir deyişle, bizim durumumuzda yeni bir serverfix şubesi almayacaksınız - sadece değiştiremeyeceğiniz kaynak / serverfix işaretçisi.

Bu çalışmayı mevcut çalışma dalınızla birleştirmek için git merge origin / serverfix'i çalıştırın. Üzerinde çalışabileceğiniz kendi serverfix şubenize ihtiyacınız varsa, uzak şubeye göre bir tane oluşturabilirsiniz:

$ git checkout -b serverfix origin / serverfix Şube serverfix uzak şube başvuruları / uzak / kaynak / serverfix'i izlemek için ayarlandı. Yeni bir "serverfix" dalına geçildi

Bu size üzerinde çalışmanız için yerel bir şube verecektir. Origin / serverfix'in olduğu yerden başlayacaktır.

Şubelerin takibi

Uzak bir şubeden git checkout ile yerel bir şubeyi kontrol etmek, adı verilen şeyi otomatik olarak oluşturur izlenen şube... İzlenen şubeler, doğrudan uzak şubeye bağlı yerel şubelerdir. İzlenen bir dalda git push yazarsanız Git, hangi sunucuya ve hangi dala değişiklikleri göndereceğini zaten bilir. Aynı şekilde, bu dallardan birinde bir git pull çalıştırmak önce tüm uzak bağlantıları alır ve ardından karşılık gelen uzak dalla otomatik olarak birleşir.

Bir depoyu klonlarken, kural olarak, origin / master'ı izleyen bir ana dal otomatik olarak oluşturulur, bu nedenle git push ve git pull bu dal için kutudan çıkar ve ek bağımsız değişkenler gerektirmez. Ancak diğer şubeler için takip kurabilirsiniz. uzak depo... Bunun nasıl yapılacağına dair basit bir örnek gördünüz - git checkout -b [şube] [silindi. sunucu] / [şube]. Git 1.6.2 veya sonraki bir sürümünü kullanıyorsanız --track kısayolunu da kullanabilirsiniz:

$ git checkout --track origin / serverfix Şube serverfix uzak şube başvuruları / uzak / kaynak / serverfix'i izlemek için ayarlanmış. Yeni bir "serverfix" dalına geçildi

Uzak şubeden farklı bir adla yerel bir şube ayarlamak için, ilk sürümü farklı bir yerel şube adıyla kolayca kullanabilirsiniz:

$ git checkout -b sf origin / serverfix Dal sf uzak şube başvuruları / uzak / kaynak / serverfix'i izlemek için ayarlandı. Yeni bir "sf" dalına geçildi

Artık yerel sf şubeniz değişiklikleri otomatik olarak origin / serverfix'ten itecek ve çekecektir.

Uzak bir sunucudaki dalları kaldırma

Diyelim ki siz ve ortak çalışanlarınız bir yeniliği tamamladınız ve bunu uzak sunucudaki ana dalda (veya kararlı kodun depolandığı başka bir şubede) birleştirdiniz. Biraz saçma sözdizimi git push [remote. sunucu]: [şube]. Sunucudaki serverfix dalını kaldırmak için aşağıdakileri yapın:

$ git push kaynağı: serverfix To [e-posta korumalı]: schacon / simplegit.git - serverfix

Alkış. Sunucunuzda artık şube yok. Bu komuta ihtiyacınız olacağından ve sözdizimini büyük olasılıkla unutacağınız için geçerli sayfayı işaretlemek isteyebilirsiniz. Git push [delete.] Sözdizimine geri dönerek bu komutu hatırlayabilirsiniz. sunucu] [loc. şube]: [sil. şube], biraz daha önce baktık. [Lok. şube], aslında “depomda hiçbir şey almayın ve [uzak. şube] aynıydı. "

Parola doğrulama kullanılıyorsa:

  1. $ git clone https: // kullanıcı adı: [e-posta korumalı]/opt/git/repository.git

Şubelerle çalışmak

Tüm şubeleri göster:
  1. $ git şubesi
Yeni bir şube oluşturun:
  1. $ git şubesi
Yeni şubeye geç:
  1. $ git ödeme
Yeni bir şube oluşturun ve ona geçin:
  1. $ git ödeme -b
Yerel şubeyi silin:
  1. $ git şube -d
Uzak depodan dalı kaldır:
  1. $ git itme kaynağı - silme

Kaydetme ile çalışma

Son kaydı nasıl kaldırırım?

  1. $ git reset - yumuşak KAFA ^
Git Nasıl Yapılır. Bölüm 16. Taahhütleri iptal etme
Git Nasıl Yapılır. Bölüm 17. Bir şubeden taahhütleri kaldırma
Resmi Git Belgeleri. Git Basics - Değişiklikleri Tersine Çevirme

Son kaydı nasıl değiştiririm?

  1. $ git new_file.txt ekle
  2. $ git commit --amend

Son kaydetme için yorumu nasıl değiştiririm?

  1. $ git commit --amend
  2. $ git commit --amend -m "Yeni yorum"

Birden çok kaydetmeyi nasıl birleştiririm?

  1. $ git rebase -i HEAD ~ 3
HEAD ~ 3 yerine commit hashini kullanabilirsiniz. Her şeyi birleştirmek (düzleştirmek) istediğiniz kesinleştirmenin karmasını iletmeniz gerekir.
Bir düzenleyici, en eski commit en üstte olacak şekilde bir commit listesi ile açılır.
  1. 1111111 1 yorum kaydet
  2. 2222222 Kaydet 2 yorum seç
  3. 3333333 Kaydet 3 yorum
Bunu elde etmek için pick'i squash ile değiştirmemiz gerekiyor:
  1. 1111111 1 yorum kaydet
  2. squash 2222222 İşlem 2 yorum
  3. squash 3333333 3 yorum kaydet
Ardından, dosyayı kaydetmeniz ve çıkmanız gerekir. Tekrar açılacak metin düzeltici taahhütler için tüm yorumlarla. Düzenlemeniz, kaydetmeniz ve çıkmanız gerekiyor. Bu adımlardan sonra taahhütler birleştirilecektir.

Belirli bir dosyadaki değişiklikleri nasıl geri alabilirim ve onu son işlemden sonraki durumuna nasıl döndürebilirim?

  1. $ git checkout - file.txt

Taahhüt edilmemiş (taahhüt edilmemiş) tüm değişiklikleri nasıl geri alabilirim?

  1. $ git ödeme

Bir sonraki işleme için bazı dosyaları nasıl tutarım?

Diyelim ki bazı dosyalarda değişiklik yapmak ve sonraki kaydetmede diğer dosyalarda değişiklik yapmak istiyorsunuz. Daha sonra bunları arşivden geçici olarak kaldırabilir (unstage dosyaları) ve sonra tekrar ekleyebilirsiniz.
  1. $ git reset HEAD file.txt
Bu komut dosyayı depodan kaldıracak, eski kayıtlarda kalacaktır. Head, geçerli daldaki son işleme işaret eder.

Deponun mevcut sürümünün uzak depodakinden daha az olması nedeniyle uzak depoya gönderim yapamıyorsanız

Bu durumda, zorla itme yapabilirsiniz.
  1. $ git push -f kaynak yöneticisi

Dalları birleştirme

Başka bir şubeden sadece bazı dosyaları nasıl alabilirim?

  1. $ git checkout şube adı - / dosyaya / dosyaya giden yol

Uzak depolar

Uzak bir depo hakkında bilgi görüntüleme

  1. $ git uzak gösteri kaynağı
Bunun gibi bir şey gösterecek:
  1. * uzak menşe
  2. URL'yi getir: [e-posta korumalı]: /opt/git/test-project.git
  3. İtme URL'si: [e-posta korumalı]: /opt/git/test-project.git
  4. HEAD dalı: usta
  5. Uzak şube:
  6. ana yeni (sonraki getirme uzaktan / başlangıç \u200b\u200bnoktasında saklanacak)
  7. "Git push" için yapılandırılan yerel ref:
  8. ana, ustalaşmaya itiyor (yerel güncel değil)

Uzak bir depo ekleme

  1. $ git uzaktan kaynak ekle [e-posta korumalı]: /opt/git/test-project.git