Saya menggunakan git dan bekerja pada cabang master. Cabang ini memiliki file bernama app.js
.
Saya memiliki experiment
cabang di mana saya membuat banyak perubahan dan banyak komitmen. Sekarang saya ingin membawa semua perubahan yang dilakukan hanya app.js
dari dari experiment
ke master
cabang.
Bagaimana aku melakukan itu?
Sekali lagi saya tidak ingin penggabungan. Saya hanya ingin membawa semua perubahan app.js
dari experiment
cabang ke master
cabang.
git
git-checkout
Nick Vanderbilt
sumber
sumber
master
dapat berbedaexperiment
, misalnya dapat berisi perubahan yang digabungkan dari cabang lain yang akan hilang dalam file hanya disalin. PS di sisi lain ia tidak ingin bergabung, tetapi sejauh yang saya tahugit merge
istilah hanya untuk cabang, bukan untuk file tertentu, jadi tidak ada kontradiksi di sini.Jawaban:
Lihat juga git cara membatalkan perubahan satu file?
Pembaruan Agustus 2019, Git 2.23
Dengan yang baru
git switch
dangit restore
perintah, itu akan menjadi:Secara default, hanya pohon yang bekerja dipulihkan.
Jika Anda ingin memperbarui indeks juga (artinya mengembalikan konten file, dan menambahkannya ke indeks dalam satu perintah):
Seperti Jakub Narębski menyebutkan dalam komentar:
berfungsi juga, kecuali itu, sebagaimana dirinci dalam pertanyaan SO " Bagaimana cara mengambil satu file dari revisi tertentu di Git? ", Anda perlu menggunakan path lengkap dari direktori root repo.
Maka jalur / ke / app.js digunakan oleh Jakub dalam contohnya.
Seperti yang disebutkan Frosty dalam komentar:
Tetapi, untuk
git checkout
ataugit show
, Anda sebenarnya dapat mereferensikan revisi apa pun yang Anda inginkan, seperti yang diilustrasikan dalam pertanyaan SO " git checkout revisi file di git gui ":akan sama adalah $ FILENAME adalah path lengkap file berversi.
$REVISION
dapat seperti yang ditunjukkan padagit rev-parse
:dan seterusnya.
schmijos menambahkan dalam komentar :
sumber
experiment:./app.js
. (Anda tidak perlu menentukan path lengkap.) Saya belajar ini berkat pesan kesalahan yang sangat membantu, git memberi saya: "Apakah maksud Anda 'mybranch: full / path / to / my / file.xsl' aka 'mybranch: ./file.xsl '? " Ya saya lakukan! Saya tidak berpikir saya pernah begitu senang dengan pesan kesalahan fatal.git restore -s new-feature path/to/app.js
Semuanya lebih sederhana, gunakan checkout git untuk itu.
Misalkan
you're on master
cabang, untuk mendapatkanapp.js from new-feature
cabang lakukan:Ini akan membawa Anda isi file yang diinginkan. Anda dapat, seperti biasa, menggunakan bagian dari sha1 daripada nama cabang fitur baru untuk mendapatkan file seperti di komit tertentu.
Catatan :
new-feature
harus cabang lokal , bukan cabang jarak jauh.sumber
git checkout origin/source_branch path/to/file
karena jika Anda lalai memperbarui cabang sumber repo lokal Anda, Anda mungkin mendapatkan versi file yang lama ... Tanya saya bagaimana saya tahu. ;)Contoh:
Ini tidak akan berfungsi jika nama cabang Anda memiliki periode di dalamnya.
sumber
Tambahan untuk jawaban VonC dan chhh.
atau
sumber
--
) antara nama cabang dan jalur opsional? Apakah hanya untuk mencegah jalur, yang akan dimulai dengan tanda hubung, agar tidak diperlakukan sebagai opsi / switch?--
bersifat opsional, tetapi lebih bermanfaat untuk menghindari konflik dengan nama cabang. Misalnya,git checkout -- foo
berarti "periksa file foo dari HEAD" (mis. Menimpa perubahan lokal di foo , mis. Subset darigit reset --hard
), tetapigit checkout foo
dapat berarti bahwa atau "mari kita pergi ke branch foo ".Atau jika Anda ingin semua file dari cabang lain:
sumber
.
membuat perbedaan besar: alih-alih pindah ke cabang lain, ia menyalin semua file dari sana sambil tetap meninggalkan Anda pada yang sekarang. Anda mendapatkan konten dari cabang lain tanpa masuk ke dalamnya.Tinjau file di github dan tarik dari sana
Ini adalah pendekatan pragmatis yang tidak langsung menjawab OP, tetapi beberapa menemukan berguna:
Jika cabang yang dimaksud adalah di GitHub, maka Anda dapat menavigasi ke cabang dan file yang diinginkan menggunakan salah satu dari banyak alat yang ditawarkan GitHub, lalu klik 'Raw' untuk melihat teks biasa, dan (secara opsional) menyalin dan menempelkan teks sebagai diinginkan.
Saya suka pendekatan ini karena memungkinkan Anda melihat file jarak jauh secara keseluruhan sebelum menariknya ke mesin lokal Anda.
sumber
Jika Anda ingin file dari komit tertentu (cabang apa pun), katakan 06f8251f
git checkout 06f8251f path_to_file
misalnya, di windows:
git checkout 06f8251f C: \ A \ B \ C \ D \ file.h
sumber
Cara lain adalah membuat tambalan dengan perbedaan dan menerapkannya di cabang master Misalnya. Katakanlah komit terakhir sebelum Anda mulai bekerja di app.js adalah 00000aaaaa dan komit yang terdiri dari versi yang Anda inginkan adalah 00000bbbbb
Anda menjalankan ini di cabang percobaan:
Ini akan membuat file dengan semua perbedaan antara kedua commit untuk app.js yang dapat Anda terapkan di mana pun Anda inginkan. Anda dapat menyimpan file itu di mana saja di luar proyek
Kemudian, pada master Anda jalankan:
sekarang Anda akan melihat perubahan dalam proyek seolah-olah Anda membuatnya secara manual.
sumber
Semoga ini bisa membantu Anda. Tolong beri tahu saya jika Anda memiliki pertanyaan.
sumber