git: Kodumun en son sürümünü nasıl edinebilirim?


200

Git 1.7.4.1 kullanıyorum. Kodumun en son sürümünü depodan almak istiyorum, ancak hata alıyorum ...

$ git pull
….
M   selenium/ant/build.properties
….
M   selenium/scripts/linux/get_latest_updates.sh
M   selenium/scripts/windows/start-selenium.bat
Pull is not possible because you have unmerged files.
Please, fix them up in the work tree, and then use 'git add/rm <file>' as appropriate to mark resolution, or use 'git commit -a'.

Aracın şikayet ettiği dosyaların yerel kopyalarını sildim, ancak yine de hataları alıyorum. Uzak depodan en son sürümü nasıl kontrol edebilirim? - Dave


1
@ Kzqai'nin aşağıdaki cevabı bana yardımcı oldu: sadece önce yapmayı dene git fetch. Çatışmalar alamıyordum, ancak kodun en son sürümünü bu şekilde aldım.
Chris K

Yanıtlar:


258

Herhangi bir yerel değişiklikle ilgilenmiyorsanız (henüz burada olan izlenmemiş veya oluşturulmuş dosyalar veya alt pozisyonlar dahil) ve yalnızca depodan bir kopya almak istiyorsanız:

git reset --hard HEAD
git clean -xffd
git pull

Yine, bu, yerel olarak yaptığınız değişiklikleri bozacak, bu yüzden dikkatli kullanın. rm -RfBunu yaparken düşünün .


1
Bu komutları denedim ve hala "CONFLICT (içerik): selenyum / ant / build.xml dosyasında (diğerlerinin yanı sıra) çakışmayı birleştirdim. Sadece dosyamın en son sürümünün repodakilerle üzerine yazmak istiyorum. Ne yapabilirim??
Dave

31
git clean -faslında cevabın bir parçası değil. Havuzda tutulmayan dosyaları siler (örneğin benim durumumda günlük dosyaları); git pulltekrar çalışmaya başlamak için bunu yapmanız gerekmez , sadece git reset --hard HEADyeterlidir.
Darren Cook

12
Esh, dostum, yeni başlayanlar için birkaç silme komutundan birini önermeyin.
Kzqai

6
@DarrenCook Deponuzun gerçekten temizlenmesini git clean -fistiyorsanız bunun önemli olduğunu düşünüyorum . TFS'de "Tümünü klasörden sil -> Son sürümü al / Özelleştir" i yapmaya eşdeğerdir ve benim durumumda istediğim buydu.
RPDeshaies

3
@Darren Bence git clean -f`` de önemli. En son sürümü almak istiyorum ve eski önbellek girdilerini veya repo üzerinde olmayan diğer oluşturulan kaynakları tutmak istemiyorum. Cevap, yerel değişimi kaldıracağı ve son sürümü repodan taklit edeceği konusunda net, bu yüzden bana mükemmel görünüyor. Gerçekten güncellemeler arasında tutmam gerekirse günlük dosyalarımı başka bir yere taşıyacağım.
Balmipour

231

Durum 1: Yerel değişikliklerle ilgilenmeyin

  • Çözüm 1: En son kodu alın ve kodu sıfırlayın

    git fetch origin
    git reset --hard origin/[tag/branch/commit-id usually: master]
    
  • Çözüm 2: Klasörü silin ve tekrar klonlayın: D

    rm -rf [project_folder]
    git clone [remote_repo]
    

Durum 2: Yerel değişikliklerle ilgilenin

  • Çözüm 1: Yeni çevrimiçi sürümle çakışma yok

    git fetch origin
    git status
    

    şöyle bir şey bildirir:

    Your branch is behind 'origin/master' by 1 commit, and can be fast-forwarded.
    

    Sonra en son sürümü edinin

    git pull
    
  • Çözüm 2: Yeni çevrimiçi sürümle çakışmalar

    git fetch origin
    git status
    

    şöyle bir şey bildirir:

    error: Your local changes to the following files would be overwritten by merge:
        file_name
    Please, commit your changes or stash them before you can merge.
    Aborting
    

    Yerel değişikliklerinizi yapın

    git add .
    git commit -m ‘Commit msg’
    

    Değişiklikleri almaya çalışın (başarısız olacaktır)

    git pull
    

    şöyle bir şey bildirir:

    Pull is not possible because you have unmerged files.
    Please, fix them up in the work tree, and then use 'git add/rm <file>'
    as appropriate to mark resolution, or use 'git commit -a'.
    

    Çakışma dosyasını açın ve çakışmayı düzeltin. Sonra:

    git add .
    git commit -m ‘Fix conflicts’
    git pull
    

    şöyle bir şey bildirir:

    Already up-to-date.
    

Daha fazla bilgi: Bir önceki işleme geri dönmek için 'git reset --hard HEAD' i nasıl kullanabilirim?


@ tvl. şubemde kodumu (çakışmalar) taahhüt etmeden en son güncellemeleri nasıl alabilirim .. lütfen bana yardım et
user3354457

@ user3354457 xm, ilginç bir soru. Daha önce hiç denemedim ama deneyebilir ve geri rapor edebilirsiniz;) yani: - Değişikliklerle bir yama yapın: git diff> uncommited-changes.patch - Şube sıfırlama - değişiklikleri çekme - yamayı uygulama
tvl

3
Bu cevap, cevap olarak kabul edilenden çok daha fazla oyu hak ediyor.
James

@James :) Cevabımın size yardımcı olmasından memnunum. İpucu, bir konu hakkında hiçbir şey bilmediğiniz gibi belgeler yazmaya çalışın ve kesinlikle ayrıntılar size yardımcı olacaktır.
tvl

4
Git getirme için en iyi tam cevap. Bu yazı kilitli olmalı
Callat

17

Olanların, değiştirdiğiniz dosyaları silmiş olabileceğinizden şüpheleniyorum (çünkü bu değişiklikleri umursamadınız) ve şimdi git bir değişiklik olarak silme işlemini alıyor.

Değişikliklerinizi çalışma kopyanızdan ve "saklamak" a (aslında tekrar ihtiyaç duyduğunuzda geri alınabilir) hareket ettiren bir yaklaşımdır, böylece en son değişiklikleri yukarı akıştan aşağı çekebilirsiniz.

git stash  
git pull

Dosyalarınızı (yukarı akış değişiklikleri ve tümü ile olası çakışmalar) almak istiyorsanız, git stash applybu değişiklikleri kodunuzun üzerine yapıştırmak için a komutunu çalıştırın . Böylece "geri al" yaklaşımınız olur.


1
git stash popGit stashes
Rapnar

7

Önce dosyalarınızı birleştirmelisiniz. git statusBirleştirilmesi gereken dosyaların neler olduğunu görmek için a yapın (önce çakışmaları çözmeniz gerektiği anlamına gelir). Bu yapıldıktan sonra tekrar git add file_mergedyapın ve yapın pull.


2
Teşekkürler. Bu sorunla karşı karşıyaydım. Taahhüt etmek istemediğim çalışma dosyalarımda bazı değişiklikler var. Ama bu durumda git çekme yapamıyorum. Bu yüzden - git stash, git pull --rebase, git stash pop. Sonra elle birleştirme ve git file_merged ekle
RuntimeException

6

bu kodu dene

cd /go/to/path
git pull origin master

5
Stackoverflow'a hoş geldiniz! Sorunu nasıl çözdüğünü daha iyi açıklamak için lütfen çözümünüze bir açıklama eklemeyi düşünün. Bu, cevaplarınızı daha da kullanışlı hale getirecektir
dkackman

2

Sadece çalışma klasörünüzdeki her şeyi atmak istiyorsanız (örn. Başarısız veya iptal edilmiş birleştirme sonuçları) ve temiz bir önceki işleme geri dönün git reset --hard.


1

Yerel değişikliklerinizi çöpe atmak ve uzaktan kumandanızdakileri yıkmak istediğinizi anlıyor musunuz?

Eğer her şey başarısız olursa ve (sıfırlanabilir bir şekilde) “sıfırlama” dan korkuyorsanız, en basit şey, yeni bir dizine kökeni klonlamak ve eskinizi çöpe atmaktır.


1

Bu komutu çalıştırarak genellikle projenizin sürümü olan en son etiketi alırsınız:

git describe --abbrev=0 --tags

0

Bana core.autocrlf-problemleri varmış gibi geliyor. core.autocrlf = true, depoya CRLF yeni satırları işaretlenmişse Windows'ta tanımladığınız gibi sorunlar verebilir. Depo için core.autocrlf dosyasını devre dışı bırakmayı deneyin ve donanımdan sıfırlama yapın.


0

Git GUI kullanıyorsanız önce getirin, sonra birleştirin.

Uzak menü >> Getir >> Menşei ile getir. Birleştir menüsünden Birleştir >> Yerel Birleştir.

Aşağıdaki iletişim kutusu görünür.

resim açıklamasını buraya girin

İzleme dalı radyo düğmesini seçin (ayrıca varsayılan olarak seçilidir), sarı kutuyu boş bırakın ve birleştir'e basın; bu dosyaları güncellemelidir.

Bu adımları atmadan önce bazı yerel değişiklikleri geri almıştım, çünkü bunları yine de atmak istedim, böylece daha sonra birleştirme yoluyla ortadan kaldırmak zorunda kalmam.

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.