Git'te yalnızca bir dosya çekmek mümkün müdür?


177

Bazı kırık testleri olan bir Git dalı üzerinde çalışıyorum ve bu testleri zaten sabit oldukları başka bir daldan (değişiklikleri birleştirmek, sadece üzerine yazmak değil) çekmek istiyorum.

Yapabileceğimi biliyorum

git pull origin that_other_branch

ancak bu, diğer dosyaları birleştirmeye çalışacaktır, çünkü henüz hazır değilim.

Başka bir şubeden yalnızca belirtilen dosyayı (her şeyi değil) çekmek ve birleştirmek mümkün mü?

Bu, yalnızca bir dosya için Git çekme isteğinin bir kopyası değildir, çünkü bu soruya verilen tüm yanıtlar, yerel olarak değiştirilen dosyanın herhangi bir dalı değiştirmeden depo sürümüne nasıl döndürüleceğidir.


7
Bu sayfadaki girişlerin hiçbirinin soruya cevap vermediğine inanıyorum. Soru, uzak bir sunucudan sadece bir dosya çekmek, tüm dosyaları çekmek değil ve yalnızca bir dosyayı yerel olarak kontrol etmek anlamına gelir. Bu yüzden soru yeniden yapılmalı veya seçilen cevap soruya çözüm olarak işaretlenmemelidir.
mljrg

Yanıtlar:


153

Bu yolla yalnızca bir dosyayı alıp teslim edebilirsiniz:

git fetch
git checkout -m <revision> <yourfilepath>
git add <yourfilepath>
git commit

Komutla ilgili olarak git checkout: <revision> - bir şube adı, yani origin/master <yourfilepath>havuz adını içermez ( copy pathGitHub'daki bir dosya sayfasındaki düğmeyi tıklatarak alabilirsiniz ), yaniREADME.md


23
-M anahtarının gerektirdiği karma kodlar git branch -v ile yazdırılabilir. Müthiş!
Audrius Meskauskas

2
Mükemmel. Bu bana birden fazla kez yardımcı oldu. Açıklığa kavuşturmak için, -m bayrağı, tekli dosyanızı çekmek istediğiniz taahhüdün karmasından memnun görünüyor.
rd108

1
Bu benim için de işe yaradı. Gerçi, geri dönüşü bulmak için uzak şubemde git log'u çalıştırdım: örneğin $ git log remotes / origin / master
Dan

6
Belirli dosyaları başka dosyalar çekmeden çekmek mümkün müdür?
iyi hissediyorum ve programlama

3
@aleroot <revision> ne anlama geliyor?
Wakan Tanka

240

İşte bunu araştırırken bulduğum biraz daha kolay bir yöntem:

git fetch {remote}
git checkout FETCH_HEAD -- {file}

4
ölümcül: geçersiz başvuru: FETCH_HEAD
Antony D'Andrea

4
Bu cevap muhtemelen çalışan bir örnekten yoksundur. Bir sonraki işin yapılması gerekip gerekmediği belli değil.
Dr_Zaszuś

@Chris, zaten Şube'deysek {remote} 'a ihtiyacımız var mı? Evet ise, neden?
Cloud Cho

2
Birleştirme girişiminde bulunacak çekme ile aynı değil, bu yüzden çekme kullanmak istiyoruz.
JosephK

22
git checkout master -- myplugin.js

master = şube adı

myplugin.js = dosya adı


ve geri dönmenin bir yolu var mı?
liyuan

1
daha önce 'git pull' yapmayı unutmayın;)
matson kepson

16

@ Mawardy'nin cevabı benim için çalıştı, ancak değişikliklerim uzaktan kumandadaydı, bu yüzden kökeni belirtmek zorunda kaldım

git checkout origin/master -- {filename}

2

Evet, işlem şu şekildedir:

# Navigate to a directory and initiate a local repository
git init        

# Add remote repository to be tracked for changes:   
git remote add origin https://github.com/username/repository_name.git

# Track all changes made on above remote repository
# This will show files on remote repository not available on local repository
git fetch

# Add file present in staging area for checkout
git check origin/master -m /path/to/file
# NOTE: /path/to/file is a relative path from repository_name
git add /path/to/file

# Verify track of file(s) being committed to local repository
git status

# Commit to local repository
git commit -m "commit message"

# You may perform a final check of the staging area again with git status
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.