Git yerel dosyaların üzerine yazmak nasıl yapılır?

git pull yerel dosyaların zorla üzerine yazılması nasıl?

Komut aşağıdaki gibidir:

  • Ekip üyesi, üzerinde çalıştığımız site şablonlarını değiştirir
  • Görüntü kataloguna bazı görüntüler eklerler (ancak kaynak kodun kontrolünde eklemeyi unutmayınız)
  • Fotoğrafları bana postayla yolladılar.
  • Kaynak kodun kontrolü altında görüntüler ekliyorum ve diğer değişikliklerle birlikte GitHub'a koyuyorum.
  • GitHub'dan güncelleme alamazlar çünkü Git dosyalarının üzerine yazmak istemiyor.

Bu alıyorum hatadır:

hata: izlenmeyen çalışma ağacı dosyası 'public / images / icon.gif' birleştirme işleminin üzerine yazılacak

Git'in üzerine yazmalarını nasıl sağlayabilirim? Bu kişi bir tasarımcı. Tüm çatışmaları genellikle el ile çözüyorum, bu yüzden en son sürüm sadece bilgisayarlarında güncellemeleri gereken sunucuya yüklendi.

5705
14 июля '09 в 17:58 2009-07-14 17:58 Jakub Troszok tarafından 14 Temmuz 09 'da 17:58' de istedi 2009-07-14 17:58
@ 39 cevaplar
  • 1
  • 2

Önemli: Yerel değişiklikleriniz varsa kaybolur. - --hard seçeneğiyle veya - --hard olmadan, --hard tüm yerel taahhütler kaybolacaktır. [*]

Git tarafından izlenmeyen dosyalarınız varsa (örneğin, indirilen kullanıcı içeriği), bu dosyalar etkilenmeyecektir.


Bence bu doğru yol:

 git fetch --all 

O zaman iki seçeneğin var:

 git reset --hard origin/master 

VEYA Başka bir şubedeyseniz:

 git reset --hard origin/<branch_name> 

açıklama:

git fetch , hiçbir şeyi birleştirmeye veya taşımaya çalışmadan uzaktaki bir bilgisayardan en son verileri indirir.

Daha sonra git reset ana dalı az önce aldığınız şeye sıfırlar. - --hard seçeneği çalışma ağacınızdaki tüm dosyaları origin/master içindeki dosyalara göre değiştirir.


Mevcut yerel komisyonları koru

[*] : Geçerli yerel taahhütleri, master sıfırlamaya dal oluşturarak kaydedebileceğinize dikkat edin:

 git checkout master git branch new-branch-to-save-current-commits git fetch --all git reset --hard origin/master 

Ondan sonra, tüm eski taahhütler new-branch-to-save-current-commits depolanır.

Bekleyen değişiklikler

Ancak, düzeltilmemiş değişiklikler (hatta aşamalı) kaybedilecek. İhtiyacınız olan her şeyi sakladığınızdan ve aktardığınızdan emin olun .. Bunu yapmak için, aşağıdakileri çalıştırabilirsiniz:

 git stash 

Ve sonra bu kabul edilmemiş değişiklikleri tekrar uygulayın:

 git stash pop 
7980
17 янв. cevap RNA 17 jan verilir . 2012-01-17 03:02 '12, 03:02 2012-01-17 03:02

Aşağıdakileri deneyin:

 git reset --hard HEAD git pull 
border=0

Ne istersen yapmalı.

798
09 мая '10 в 22:45 2010-05-09 22:45 Cevapladı Travis Reeder 09 Mayıs, 10, 10: 45'te 2010-05-09 22:45

DİKKAT: git clean tüm takip edilemeyen dosyalarınızı / dizinlerinizi kaldırır ve geri alınamaz.


Bazen sadece clean -f yardımcı olmuyor. İzlenen dizininiz yoksa, -d seçeneği de gereklidir:

 # WARNING: this can't be undone! git reset --hard HEAD git clean -f -d git pull 

DİKKAT: git clean tüm takip edilemeyen dosyalarınızı / dizinlerinizi kaldırır ve geri alınamaz.

-n ( --dry-run ) --dry-run kullanmayı deneyin. Bu, hiçbir şeyi silmeden neyin kaldırılacağını size gösterecektir:

 git clean -n -f -d 

Örnek çıktı:

 Would remove untracked-file-1.txt Would remove untracked-file-2.txt Would remove untracked/folder ... 
406
19 марта '11 в 12:10 2011-03-19 12:10 Cevap David Avsajanishvili tarafından 19 Mart 11: 12'de verildi: 2011-03-19 12:10

Kirpi gibi, cevapların korkunç olduğunu düşünüyorum. Ancak Kirpi'nin cevabı daha iyi olsa da, olabileceği kadar zarif olduğunu sanmıyorum. Bunu bulmamın yolu "örnekleme" ve "birleştirme" yi belirli bir stratejiyle kullanmak. Bu, yerel değişikliklerinizin üzerine yazmaya çalıştığınız dosyalardan biri olana kadar kaydedildiğinden emin olmalıdır.

İlk önce değişiklikleri yap.

  git add * git commit -a -m "local file server commit message" 

Ardından değişiklikleri alın ve bir çakışma varsa yeniden yazın.

  git fetch origin master git merge -s recursive -X theirs origin/master 

"- X", seçeneğin adıdır ve "onların", bu seçeneğin değeridir. Bir çakışma olursa, "sizin" değişiklikleriniz yerine "değişikliklerinizi" kullanmayı tercih edersiniz.

347
11 апр. Cevap. Cevap Richard Kersey 11 Nis 2012-04-11 23:13 '12 11:13 PM 2012-04-11 23:13

Bunun yerine:

 git fetch --all git reset --hard origin/master 

Aşağıdakileri yapmanızı öneririm:

 git fetch origin master git reset --hard origin/master 

Sağdaki menşe / ana şubeye sıfırlamak için tüm konsolları ve şubeleri kullanmanıza gerek yok mu?

248
26 апр. Johanneke 26 Nis tarihinde gönderildi 2013-04-26 16:48 '13, 16:48 2013-04-26 16:48

Yapılacak en iyi şey şuna benziyor:

 git clean 

Kullanılmayan tüm dosyaları kaldırmak ve sonra normal git pull ile devam etmek ...

125
14 июля '09 в 18:16 2009-07-14 18:16 Cevap Jakub Troszok tarafından 14 Temmuz 099 'da 18: 16'da verilmiştir 2009-07-14 18:16

Dikkat, gitignore dosyanızda herhangi bir / * dizin girişi varsa, bu dosyalar kalıcı olarak silinir.

Bazı cevaplar korkunç görünüyor. David Avsadjanishvili’nin önerisini takiben @Lauri’nin başına gelenler anlamında korkunç.

Aksine (git> v1.7.6):

 git stash --include-untracked git pull 

Daha sonra geçmiş önbelleğini temizleyebilirsiniz.

El ile, birer birer:

 $ git stash list stash@{0}: WIP on <branch>: ... stash@{1}: WIP on <branch>: ... $ git stash drop stash@{0} $ git stash drop stash@{1} 

Zalim, hepsi bir kerede:

 $ git stash clear 

Elbette sakladığın şeye geri dönmek istersen:

 $ git stash list ... $ git stash apply stash@{5} 
102
12 февр. Cevap, 12 Şubat'ta Hedgehog tarafından verildi. 2012-02-12 02:00 '12, 02:00 2012-02-12 02:00

Bu komutu yerel değişiklikleri silmek için yararlı bulabilirsiniz:

 git checkout <your-branch> -f 

Sonra temizleme işlemini yapın (ham dosyaları çalışan ağaçtan siler):

 git clean -f 

İz bırakmayan dosyalara ek olarak gereksiz dizinleri silmek istiyorsanız:

 git clean -fd 
88
05 авг. Cevap Vishal 05 Ağustos tarafından verilmiştir . 2010-08-05 21:06 '10, 21:06 2010-08-05 21:06

git pull ile birleştirmek yerine git pull deneyin:

git fetch --all

ardından:

git reset --hard origin/master .

81
22 нояб. Cevap 22 Mart'ta Lloyd Moore tarafından verildi. 2012-11-22 13:56 '12, 01:56, 2012-11-22 13:56

İşe yarayan tek şey şuydu:

 git reset --hard HEAD~5 

Bu size beş taahhüt verecek, ve sonra

 git pull 

Bunu, git birleştirme işlemini nasıl iptal edeceğime bakarak buldum.

54
06 мая '11 в 0:53 2011-05-06 00:53 Cevap Chris BIllante tarafından 06 Mayıs 11'de 0:53 2011-05-06 00:53 tarihinde verilmiştir.

Tüm bu çözümlerle ilgili sorun, ya çok karmaşık olmaları ya da daha da ciddi bir sorun, istemeyen tüm ham dosyaları web sunucusundan silmek olmalarıdır, çünkü her zaman sunucuda bulunan yapılandırma dosyaları her zaman zorunludur. ve git deposunda değil.

İşte kullandığımız en temiz çözüm:

51
06 нояб. Strahinja Kustudic Kasım 06 tarafından verilen cevap 2012-11-06 02:32 '12, 02:32 2012-11-06 02:32

Bende de aynı problem var. Kimse bana bu çözümü vermedi, ama benim için çalıştı.

Buna karar verdim:

  1. Tüm dosyaları sil. Sadece .git dizinini bırakın.
  2. git reset --hard HEAD
  3. git pull
  4. git push

Şimdi çalışıyor.

38
13 янв. Cevap 13 Ocak'ta John John Pichler tarafından verildi. 2011-01-13 02:58 '11, 02:58 2011-01-13 02:58

Her şeyden önce standart yolu deneyin:

 git reset HEAD --hard # To remove all not committed changes! git clean -fd # To remove all untracked (non-git) files and folders! 

Uyarı : Yukarıdaki komutlar sadece sabit değilse, veri / dosya kaybına neden olabilir! Emin değilseniz, önce tüm depo klasörünüzü yedekleyin.

Sonra tekrar çekin.

Yukarıdakiler yardımcı olmuyorsa ve takip edilmeyen dosyalarınıza / dizinlerinize ihtiyacınız yoksa (önce sadece yedekleyin), aşağıdaki basit adımları deneyin:

 cd your_git_repo # where 'your_git_repo' is your git repository folder rm -rfv * # WARNING: only run inside your git repository! git pull # pull the sources again 

Bu, tüm git dosyalarını kaldırır (tüm .git/ bulunduğu .git/ dir hariç) ve tekrar .git/ .


Neden git reset HEAD --hard bazı durumlarda çalışmayabilir?

  1. .gitattributes file kullanıcı kuralları

    Eol eol=lf kuralının .gitattributes içindeki varlığı, bazı metin dosyalarında CRLF satırlarının sonunu LF'ye dönüştürerek git dosyasının bazı dosya değişikliklerini değiştirmesine neden olabilir.

    Öyleyse, bu CRLF / LF değişikliklerini ( git status ) git config core.autcrlf false ya da denemek için: git config core.autcrlf false geçici olarak yoksaymak için git config core.autcrlf false .

  2. Dosya sistemi uyumsuzluğu

    İzin özelliklerini desteklemeyen bir dosya sistemi kullandığınızda. Örneğin, biri Linux / Mac ( ext3 / hfs+ ), diğeri de FAT32 / NTFS tabanlı dosya sistemleri için iki havuzunuz var.

    Fark ettiğiniz gibi, iki farklı türde dosya sistemi vardır, bu nedenle Unix izinlerini desteklemeyen bir sistem temelde bu tür izinleri desteklemeyen bir sistemdeki dosyalar için izinleri sıfırlayamaz, bu nedenle ne kadar uğraşırsanız deneyin, git daima bazı "değişiklikleri" algılar.

33
26 окт. cevabı kenorb 26 ekim olarak verildi . 2012-10-26 12:17 '12 12:17 2012-10-26 12:17

Bonus:

Önceki cevaplarda çekme / alma / birleştirme'den bahsetmişken, ilginç ve üretken bir numarayı paylaşmak isterim:

git pull --rebase

Bu takım, çok zaman kazandıran Git'teki hayatımdaki en faydalı takım.

Yeni taahhüdünüzü sunucuya göndermeden önce, bu komutu deneyin; otomatik olarak en son sunucu değişikliklerini senkronize et (getirme + birleştirme ile) ve taahhüdünüzü Git günlüğünün en üstüne koyun. Manuel çıkarma / birleştirme konusunda endişelenmenize gerek yok.

"Git pull - rebase" nedir? .

31
23 дек. Cevap 23 Aralık'ta Sazzad Hissain Khan tarafından verildi. 2015-12-23 18:41 '15, 18:41 2015-12-23 18:41

Diğer cevapları özetledim. git pull işlemini hatasız gerçekleştirebilirsiniz:

 git fetch --all git reset --hard origin/master git reset --hard HEAD git clean -f -d git pull 

Uyarı. Bu komut dosyası çok güçlü, bu yüzden değişikliklerinizi kaybedebilirsiniz.

27
07 авг. Cevap Robert Moon 07 Ağustos tarafından verilmiştir . 2015-08-07 06:03 '15, 06:03 2015-08-07 06:03

Ben de benzer bir problem yaşadım. Bunu yapmak zorundaydım:

 git reset --hard HEAD git clean -f git pull 
27
14 янв. Cevap Ryan Jan tarafından verilir 14 2011-01-14 18:18 '11 18:18 2011-01-14 18:18

Bu tür kendi deneyimlerime dayanarak, yukarıda Strahinja Kustudic'in sunduğu çözüm bugüne dek en iyisi. Diğerlerinin de belirttiği gibi, basit bir sıfırlama işlemi gerçekleştirmek, yapılandırma dosyaları gibi silmek istemediğiniz birçok şeyi içerebilecek tüm denenmemiş dosyaları kaldıracaktır. Daha güvenli, yalnızca eklenmesi gereken dosyaları silmeniz gerekir ve bu nedenle, muhtemelen güncellenmesi gereken yerel olarak değiştirilmiş dosyaları da kontrol etmek istersiniz.

Bu yüzden, Kustudic betiğini sadece bunu yapmak için güncelledim. Ayrıca bir yazım hatası düzelttim (orijinalinden eksik).

26
27 февр. Cevap 27 Şubat tarihinde Rolf Kaiser tarafından verildi. 2013-02-27 17:43 '13, 17:43 2013-02-27 17:43

Çatışmanın ayrı ayrı çözülmesi gereken iki olası nedeni olduğuna ve söyleyebildiğim kadarıyla, yukarıdaki cevapların hiçbirinin ikisiyle de ilişkili olmadığını düşünüyorum:

  • İzlenmeyen yerel dosyalar manuel olarak kaldırılmalı (daha güvenli) veya diğer yanıtlarda önerildiği gibi git clean -f -d

  • Uzak dalda olmayan yerel taahhütler de silinmelidir. IMO bunu başarmanın en kolay yoludur: git reset --hard origin/master ("master" ı üzerinde çalıştığınız herhangi bir şubeyle değiştirin ve ilk önce git fetch origin çalıştırın)

23
12 дек. Cevap 12 Aralık'ta verilecek. 2011-12-12 22:54 '11, 10:54 pm 2011-12-12 22:54

Daha kolay bir yol:

 git checkout --theirs /path/to/file.extension git pull origin master 

Bu, yerel git dosyanızı geçersiz kılar.

20
05 мая '15 в 11:03 2015-05-05 11:03 Cevap Maximus 69 05 Mayıs '15 11:03 2015-05-05 11:03 tarihinde verilmiştir.

Buradaki cevapların çoğunun master şubeye odaklandığı görülüyor; ancak bazen iki farklı yerde aynı fonksiyon dalında çalıştığım durumlar var ve bunlardan birinin çemberin içinde çok fazla atlama olmadan birisini diğerine yansıtmasını istiyorum.

RNA cevabı ve benzer bir soruya cevap torek'in kombinasyonuna dayanarak mükemmel bir iş buldum:

 git fetch git reset --hard @{u} 

Daldan çalıştırın, yalnızca yerel dalınızı yukarı akış sürümüne sıfırlar.

Bu, git ( git forcepull ) git forcepull kolayca yerleştirilebilir:

git config alias.forcepull "!git fetch ; git reset --hard @{u}"

Veya .gitconfig dosyasında:

 [alias] forcepull = "!git fetch ; git reset --hard @{u}" 

Tadını çıkarın!

19
25 февр. Cevap 25 Şubat'ta JacobEvelyn tarafından verildi . 2014-02-25 20:19 '14, 20:19 2014-02-25 20:19

Ben de aynı problemi yaşadım ve hatta bir nedenden dolayı git clean -f -d bunu yapmazdı. Bu nedenle: Bir nedenden ötürü, dosyanız Git tarafından görmezden gelinirse (.gitignore girişi aracılığıyla, sanırım), hala üzerine yazma ve sonra bağlantıyı kesmekle ilgili endişe duyuyor, ancak eklemediğiniz sürece net onu silmeyecek -x .

19
03 авг. Cevapla Tierlieb 03 aug. 2011-08-03 12:23 '11 12:23 2011-08-03 12:23

Sadece kendim karar verdim:

18
03 дек. Simon B. tarafından verilen cevap 03 dec. 2010-12-03 18:00 '10 18:00 2010-12-03 18:00

Ne git clean ne de git reset işe yaramazsa garip bir durum var. Takip edilmeyen her dosya için aşağıdaki betiği kullanarak çakışan dosyayı git index kaldırmam gerekiyor:

 git rm [file] 

O zaman ben sadece iyi çekebilirim.

17
19 сент. Cevap 19 Eylül tarihinde Chen Zhang tarafından verildi. 2011-09-19 17:18 '11 17:18 2011-09-19 17:18

Daha basit ve daha az acı verici bir yöntem biliyorum:

 $ git branch -m [branch_to_force_pull] tmp $ git fetch $ git checkout [branch_to_force_pull] $ git branch -D tmp 

Öyle!

16
05 сент. Cevap ddmytrenko 05 eylülde verilir . 2015-09-05 21:23 '15 21:23 2015-09-05 21:23

Bu dört takım benim için çalışıyor.

 git reset --hard HEAD git checkout origin/master git branch -D master git checkout -b master 

Bu komutları yürüttükten sonra kontrol etmek / çıkarmak için

 git pull origin master 

Çok denedim ama sonunda bu takımlarda başarı elde ettim.

13
20 марта '14 в 7:24 2014-03-20 07:24 Cevap vishesh chandra tarafından 20 Mart, 14, 07 : 24'te verildi 2014-03-20 07:24

Orijinal soruya rağmen, en iyi cevaplar, benzer bir sorunu olan ancak yerel dosyalarını kaybetmek istemeyen insanlar için sorunlara neden olabilir. Örneğin, Al-Punk ve crizCraig tarafından yapılan Yorumlar'a bakınız.

Bir sonraki sürüm, zaman dalındaki yerel değişikliklerinizi ( tmp ) düzeltir, kaynak dalı denetler (ki, master olduğunu varsayırım) ve güncellemeleri birleştirir. Bunu stash ile yapabilirsiniz, ancak sadece branş / birleştirme yaklaşımını kullanmayı genellikle daha kolay buldum.

 git checkout -b tmp git add *; git commit -am "my temporary files" git checkout master git fetch origin master git merge -s recursive -X theirs origin master 

Başka bir deponun origin master olduğunu varsayarsak.

12
22 окт. Cevap Snowcrash tarafından 22 Ekim'de verildi . 2014-10-22 20:31 '14, 20:31 2014-10-22 20:31

Sadece yap

 git fetch origin branchname git checkout -f origin/branchname // This will overwrite ONLY new included files git checkout branchname git merge origin/branchname 

Bu yolla, saklamak istediğiniz dosyaları veya dizinleri silmek gibi istenmeyen tüm yan etkilerden kaçınırsınız.

12
19 окт. Tarafından verilen cevap user2696128 Eki 19 2015-10-19 12:54 '15 12:54 2015-10-19 12:54

İşaretçiyi sıfırla ve origin/master , ancak çalışan ağacı sıfırlama:

 git reset origin/master 
11
15 февр. Cevap 1581 tarihinde user811773 tarafından verilmiştir. 2013-02-15 16:41 '13 4:41 pm 2013-02-15 16:41

gereksinimleri:

  • Yerel değişiklikleri izle, böylece kimse kaybetmez.
  • Yerel veri deposunu uzak kaynak deposuyla uyumlu hale getirin.

çözüm:

  • Yerel değişiklikleri gizle .
  • Temiz dosyalarla alın ve ihmal edersin .

     git stash --include-untracked git fetch --all git clean -fdx git reset --hard origin/master 
9
02 сент. Cevap verilen vezenkov 02 Eyl 2015-09-02 02:00 '15, 02:00 2015-09-02 02:00

Tüm cevapları okudum, ancak bunun için bir emir arıyordum. Ben de öyle yaptım. .Gitconfig dosyasına git alias eklendi

 [alias] fp = "!f(){ git fetch ${1} ${2}  git reset --hard ${1}/${2};};f" 

Komutu çalıştırın

 git fp origin master 

eşittir

 git fetch origin master git reset --hard origin/master 
9
08 июля '16 в 16:11 2016-07-08 16:11 Cevap, Venkat Kotra tarafından 08 Temmuz 16, 16: 11'te düzenlendi 2016-07-08 16:11
  • 1
  • 2

etiketleri ile ilgili diğer sorular veya Soru Sor