untuk file tunggal , alih-alih menyulap perintah simpanan, pendekatan yang jauh lebih mudah adalah menyalin file tunggal dan ketika Anda ingin mengembalikannya hanya dengan menyalin di atas aslinya. misalnya. cp just_my_file.txt just_my_file.txt.manualstash sekarang Anda dapat melakukan semua checkout dan hal-hal dan karena salinannya adalah "file tidak terlacak", Anda dapat bergerak melintasi cabang dan melakukan tanpa masalah. Ketika Anda berada di cabang kanan / komit di mana Anda ingin "menggabungkan file tunggal " lakukan saja mv just_my_file.txt.manualstash just_my_file.txtdan sekarang Anda dapat meninjau perubahan dan komit jika perlu
Dimitry K
Jawaban:
173
Saya pikir stash -pmungkin itu pilihan yang Anda inginkan, tetapi kalau-kalau Anda mengalami hal-hal yang bahkan lebih rumit di masa depan, ingatlah bahwa:
Stashbenar-benar hanya alternatif yang sangat sederhana untuk hanya branchset yang sedikit lebih kompleks . Stash sangat berguna untuk memindahkan barang dengan cepat, tetapi Anda dapat menyelesaikan hal-hal yang lebih kompleks dengan cabang tanpa banyak sakit kepala dan pekerjaan.
lanjutkan dan lakukan apa yang Anda inginkan, dan kemudian cukup rebasedan / atau mergetmpbranch. Ini benar-benar tidak bahwa pekerjaan banyak tambahan ketika Anda perlu melakukan pelacakan lebih berhati-hati dari simpanan akan memungkinkan.
Jawaban ini tampaknya yang paling lurus ke depan untuk saya ketika pembuatan mengubah perubahan: git stash -- filename.ext, git commit --amend, git stash pop
Brandon Dewey
1
Saya pikir ini harus bergantung pada beberapa fungsi yang sangat baru. Itu tidak bekerja di git 2.1.4.
Richard Smith
Ini menghasilkan beberapa perilaku aneh bagi saya, dengan simpanan disimpan, tetapi file yang sama ditambahkan ke pementasan pada saat yang sama (git v2.20.1),
paradroid
58
Anda dapat secara interaktif menyimpan satu baris dengan git stash -p(analog dengan git add -p).
Itu tidak mengambil nama file, tetapi Anda bisa melewatkan file lain dengan dsampai Anda mencapai file yang Anda inginkan disimpan dan menyimpan semua perubahan di sana bersama a.
Ini membutuhkan waktu lama jika Anda memiliki banyak file yang tidak ingin disimpan.
jjj
23
Saya tidak tahu kapan ini berubah tetapi git 2.14.1Anda dapat menentukan nama filegit stash -p <filename>
muon
21
Opsi terbaik adalah mem-stage semuanya kecuali file ini, dan beri tahu simpanan untuk menyimpan indeksnya git stash save --keep-index, dengan demikian menyimpan file yang tidak dipentaskan:
Seperti yang ditunjukkan Dan, thefiletostashadalah satu-satunya yang akan direset oleh simpanan, tetapi juga simpanan file lainnya, jadi bukan yang Anda inginkan.
Meskipun ini menjaga indeks dalam keadaan yang sama, bukankah ini juga menyimpan file yang ada dalam indeks? Dengan kata lain, jika setelah melakukan ini Anda mengkomit indeks ke cabang saat ini, kemudian beralih ke cabang lain dan lakukan git stash pop, bukankah itu akan menerapkan semua file, bukan hanya satu file yang ingin kami simpan?
Dan Moulding
@DanMoulding: Anda memang benar, saya belum memikirkan hal ini.
CharlesB
16
Kalau-kalau Anda benar-benar bermaksud 'buang perubahan' setiap kali Anda menggunakan 'git stash' (dan jangan benar-benar menggunakan git stash untuk menyimpannya sementara), dalam hal ini Anda dapat menggunakan
git checkout -- <file>
Perhatikan bahwa git simpanan hanyalah alternatif yang lebih cepat dan sederhana untuk bercabang dan melakukan hal-hal.
Saya pikir ini adalah jawaban terbaik jika Anda ingin menghapus semua perubahan yang dimodifikasi untuk satu file.
Mohamed Haseel
dan saya akan ini adalah jawaban terbaik untuk tugas khusus itu
Zakir Hussain
6
Pertanyaannya cukup jelas dan tidak bertanya bagaimana mengembalikan perubahan ke satu file. Diturunkan.
Richard Smith
Ini adalah jawaban yang bagus, dengan jelas menunjukkan sebagai alternatif. Tetapi beberapa orang akan cukup keras kepala untuk menggunakan downvote sebagai fitur yang menyalahgunakan: +1
Mukul Jain
@MukulJain Saya sebenarnya perlu menggunakan stash-per-file dengan cara yang sangat sementara (pada dasarnya memisahkan beberapa perubahan dalam dua komit yang mempengaruhi baris yang sama, untuk satu file). Saya tidak akan benar-benar downvote, hanya menyatakan bahwa itu tidak berguna bagi saya.
cp just_my_file.txt just_my_file.txt.manualstash
sekarang Anda dapat melakukan semua checkout dan hal-hal dan karena salinannya adalah "file tidak terlacak", Anda dapat bergerak melintasi cabang dan melakukan tanpa masalah. Ketika Anda berada di cabang kanan / komit di mana Anda ingin "menggabungkan file tunggal " lakukan sajamv just_my_file.txt.manualstash just_my_file.txt
dan sekarang Anda dapat meninjau perubahan dan komit jika perluJawaban:
Saya pikir
stash -p
mungkin itu pilihan yang Anda inginkan, tetapi kalau-kalau Anda mengalami hal-hal yang bahkan lebih rumit di masa depan, ingatlah bahwa:Stash
benar-benar hanya alternatif yang sangat sederhana untuk hanyabranch
set yang sedikit lebih kompleks . Stash sangat berguna untuk memindahkan barang dengan cepat, tetapi Anda dapat menyelesaikan hal-hal yang lebih kompleks dengan cabang tanpa banyak sakit kepala dan pekerjaan.lanjutkan dan lakukan apa yang Anda inginkan, dan kemudian cukup
rebase
dan / ataumerge
tmpbranch. Ini benar-benar tidak bahwa pekerjaan banyak tambahan ketika Anda perlu melakukan pelacakan lebih berhati-hati dari simpanan akan memungkinkan.sumber
Jika Anda tidak ingin menentukan pesan dengan perubahan simpanan Anda, berikan nama file setelah tanda hubung ganda.
Jika ini file yang tidak dilacak / baru, Anda harus mengaturnya terlebih dahulu.
Namun, jika Anda tidak ingin menentukan sebuah pesan, penggunaan
push
.Kedua metode bekerja di git versi 2.13+
sumber
git stash -- filename.ext
,git commit --amend
,git stash pop
Anda dapat secara interaktif menyimpan satu baris dengan
git stash -p
(analog dengangit add -p
).Itu tidak mengambil nama file, tetapi Anda bisa melewatkan file lain dengan dsampai Anda mencapai file yang Anda inginkan disimpan dan menyimpan semua perubahan di sana bersama a.
sumber
git 2.14.1
Anda dapat menentukan nama filegit stash -p <filename>
Opsi terbaik adalah mem-stage semuanya kecuali file ini, dan beri tahu simpanan untuk menyimpan indeksnya
git stash save --keep-index
, dengan demikian menyimpan file yang tidak dipentaskan:Seperti yang ditunjukkan Dan,
thefiletostash
adalah satu-satunya yang akan direset oleh simpanan, tetapi juga simpanan file lainnya, jadi bukan yang Anda inginkan.sumber
git stash pop
, bukankah itu akan menerapkan semua file, bukan hanya satu file yang ingin kami simpan?Kalau-kalau Anda benar-benar bermaksud 'buang perubahan' setiap kali Anda menggunakan 'git stash' (dan jangan benar-benar menggunakan git stash untuk menyimpannya sementara), dalam hal ini Anda dapat menggunakan
Perhatikan bahwa git simpanan hanyalah alternatif yang lebih cepat dan sederhana untuk bercabang dan melakukan hal-hal.
sumber