Skenario:
- Saya membuat beberapa perubahan dalam satu file secara lokal dan menjalankan
git add
,git commit
dangit push
- File didorong ke repositori master asal jarak jauh
- Saya memiliki repositori lokal lain yang digunakan melalui Capistrano dengan metode "remote_cache" dari repositori jarak jauh
- Sekarang saya tidak ingin menyebarkan seluruh aplikasi tetapi hanya memperbarui / checkout file tunggal itu.
Apakah ini entah bagaimana mungkin dengan git? Saya tidak dapat menemukan apa pun yang akan berhasil juga saya tidak bisa mengetahuinya. Dengan SVN saya baru saja melakukannya svn up file
dan voila.
git
git-checkout
foresth
sumber
sumber
git restore -s origin/master -- path/to/file
. Lihat jawaban saya di bawah ini .Jawaban:
Hal ini dimungkinkan untuk dilakukan (dalam repositori yang digunakan)
Pengambilan akan mengunduh semua perubahan terbaru, tetapi tidak akan memasukkannya ke dalam kode yang Anda periksa saat ini (area kerja).
Kasir akan memperbarui pohon kerja dengan file tertentu dari perubahan yang diunduh (
origin/master
).Setidaknya ini bekerja untuk saya untuk perbaikan kesalahan ketik kecil itu, di mana rasanya aneh untuk membuat cabang dll hanya untuk mengubah satu kata dalam file.
sumber
git status
saya melihatnya sebagaiChanges to be committed:
- artinya, saya perlu mengkomitnya lagi? (hanya mencatat bahwa saya ingin me-refresh satu file yang tidak disentuh tetapi repo itu sendiri disentuh dalam mesin yang berbeda)Kode berikut berfungsi untuk saya:
sumber
sumber
git archive --remote=https://github.com/git/git.git master:git/contrib/completion git-completion.bash | tar -x
Beri saya pesan kesalahan:fatal: Operation not supported by protocol.
tar
: s--to-stdout
,git archive --remote="gitolite3@<host>:<repo>" <tag> <file> | tar xf - --to-stdout
Dengan Git 2.23 (Agustus 2019) dan perintah baru (masih eksperimental)
git restore
, terlihat pada " Cara mengatur ulang semua file dari direktori yang berfungsi tetapi tidak dari area staging? ", Yaitu:Idenya adalah:
git restore
hanya berurusan dengan file, bukan file dan cabang sepertigit checkout
halnya.Lihat " Bingung oleh
git checkout
": di situlahgit switch
masuk)codersam menambahkan dalam komentar :
sumber
git restore -s upstream/master -- path/to/file
Yang dapat Anda lakukan adalah:
Perbarui git repo lokal Anda:
git fetch
Bangun cabang lokal dan lakukan checkout:
git branch pouet && git checkout pouet
Terapkan komit yang Anda inginkan di cabang ini:
git cherry-pick abcdefabcdef
(abcdefabcdef adalah sha1 dari commit yang ingin Anda terapkan)
sumber
git checkout -b pouet
.Atau git simpanan (jika Anda memiliki perubahan) pada cabang Anda aktif, checkout master, tarik untuk perubahan terbaru, ambil file itu ke desktop Anda (atau seluruh aplikasi). Periksa cabang tempat Anda berada. Git simpanan berlaku kembali ke status Anda sebelumnya, lalu perbaiki perubahan secara manual atau seret untuk mengganti file.
Cara ini tidak terlalu keren tapi itu berfungsi jika kalian tidak bisa menemukan yang lain.
sumber
Saya pikir saya telah menemukan hack yang mudah.
Hapus file yang Anda miliki di repositori lokal (file yang ingin Anda perbarui dari komit terbaru di server jauh)
Dan kemudian lakukan
git pull
Karena file dihapus, tidak akan ada konflik
sumber