Saya memiliki perubahan pada file, plus file baru, dan ingin menggunakan simpanan git untuk menyimpannya sementara saya beralih ke tugas lain. Tapi git simpanan dengan sendirinya menyimpan hanya perubahan ke file yang ada; file baru tetap di pohon kerja saya, mengacaukan pekerjaan masa depan saya. Bagaimana cara menyimpan file yang tidak terlacak ini?
1437
git stash show
tidak menghasilkan apa-apa dan Anda mungkin tergoda untuk menjatuhkannya (seperti yang baru saja saya lakukan saat berisi skrip berguna yang saya tulis beberapa bulan lalu) → cara memulihkan simpanan yang jatuh )Jawaban:
Untuk menyimpan direktori kerja Anda termasuk file yang tidak dilacak (terutama yang ada di .gitignore) maka Anda mungkin ingin menggunakan cmd ini:
git stash --include-untracked
Keterangan lebih lanjut:
Pembaruan 17 Mei 2018:
Versi baru git sekarang memiliki
git stash --all
simpanan semua file, termasuk file yang tidak dilacak dan diabaikan.git stash --include-untracked
tidak lagi menyentuh file yang diabaikan (diuji pada git 2.16.2).Jawaban asli di bawah ini:
Peringatan, melakukan ini akan menghapus file Anda secara permanen jika Anda memiliki entri direktori / * di file gitignore Anda.
Pada versi 1.7.7 Anda dapat menggunakan
git stash --include-untracked
ataugit stash save -u
untuk menyimpan file yang tidak terlacak tanpa mementaskannya.Tambahkan (
git add
) file dan mulai lacak. Lalu simpanan. Karena seluruh konten file baru, mereka akan disimpan, dan Anda dapat memanipulasi seperlunya.sumber
git stash --include-untracked
sebelumnyagit stash --all
dalam jawaban Anda karena dua alasan. Pertama itu menjawab pertanyaan OP lebih baik sekarang di 2019 dan kedua karena --semua melakukan sesuatu yang sebagian besar pengguna mungkin tidak inginkan karena itu menghapus semua file yang .gitignoredPada git 1.7.7,
git stash
menerima--include-untracked
opsi (atau short-hand-u
). Untuk memasukkan file yang tidak terlacak dalam simpanan Anda, gunakan salah satu dari perintah berikut:Peringatan, melakukan ini akan menghapus file Anda secara permanen jika Anda memiliki entri direktori / * di file gitignore Anda.
sumber
.gitignore
terlihat seperti iniignoredDirectory
dan bukanignoredDirectory/*
itu masih menghapus yang tidak terlacak. Bahkan file yang tidak terlacak bukan hanya direktori.*.extension
entri?git
1.8.3-u
(--include-untracked
) opsi dapat menyimpan dan mem-popgit stash show
file yang tidak di-Tambahkan file ke indeks:
Seluruh isi indeks, ditambah setiap perubahan yang tidak dipentaskan ke file yang ada, semua akan membuatnya menjadi simpanan.
sumber
git add .
tidak mempertimbangkannya untuk beberapa alasanDalam git bash, menyimpan file yang tidak terpecahkan dicapai dengan menggunakan perintah
atau
http://git-scm.com/docs/git-stash
git stash menghapus semua file yang tidak terlacak atau tidak dikomit dari ruang kerja Anda. Dan Anda dapat mengembalikan git simpanan dengan menggunakan perintah berikut
Ini akan menempatkan file kembali di ruang kerja lokal Anda.
Pengalaman saya
Saya harus melakukan modifikasi pada file gitIgnore saya untuk menghindari perpindahan file .class dan .project ke repo jarak jauh. Saya tidak diizinkan untuk memindahkan .gitIgnore yang dimodifikasi ini di repo jarak jauh seperti sekarang.
File .classpath dan .project penting untuk eclipse - yang merupakan editor java saya.
Saya pertama-tama secara selektif menambahkan sisa file saya dan berkomitmen untuk pementasan. Namun, dorongan terakhir tidak dapat dilakukan kecuali file .gitIgnore yang dimodifikasi dan file yang tidak dilacak yaitu. .project dan .classpath tidak disimpan.
Saya menggunakan
untuk menyimpan file .gitIgnore yang dimodifikasi.
Untuk menyimpan file .classpath dan .project, saya menggunakan
dan itu menghapus file dari ruang kerja saya. Tidak adanya file-file ini menghilangkan kemampuan saya bekerja di lokasi kerja saya di gerhana. Saya melanjutkan dengan menyelesaikan prosedur untuk mendorong file yang dikomit ke remote. Setelah ini berhasil dilakukan, saya menggunakan
Ini menempel file yang sama kembali di ruang kerja saya. Ini memberi saya kembali kemampuan saya untuk bekerja pada proyek yang sama dalam gerhana. Semoga ini menepis kesalahpahaman.
sumber
~/.gitignore
.Seperti yang telah dikatakan di tempat lain, jawabannya adalah ke
git add
file. misalnya:Namun, pertanyaannya juga muncul di jawaban lain: Bagaimana jika Anda tidak benar-benar ingin menambahkan file? Sejauh yang saya tahu, Anda harus. Dan berikut ini TIDAK akan bekerja:
ini akan gagal, sebagai berikut:
Jadi, apa yang bisa kamu lakukan? Nah, Anda harus benar-benar menambahkan file, namun , Anda dapat secara efektif membatalkannya nanti, dengan
git rm --cached
:Dan kemudian Anda dapat terus bekerja, dalam kondisi yang sama seperti sebelumnya
git add
(dengan file yang tidak terpantau disebutpath/to/untracked-file
; ditambah perubahan lain yang mungkin harus dilacak file).Kemungkinan lain untuk alur kerja tentang ini adalah sesuatu seperti:
[Catatan: Seperti disebutkan dalam komentar dari @mancocapac, Anda mungkin ingin menambahkan
--exclude-standard
kegit ls-files
perintah (jadi,git ls-files -o --exclude-standard
).]... yang juga dapat dengan mudah ditulis - bahkan alias akan melakukannya (disajikan dalam sintaks zsh; sesuaikan sesuai kebutuhan) [juga, saya mempersingkat nama file sehingga semuanya cocok di layar tanpa menggulirkan jawaban ini; jangan ragu untuk mengganti nama file alternatif yang Anda pilih]:
Perhatikan bahwa yang terakhir mungkin lebih baik sebagai skrip atau fungsi shell, untuk memungkinkan parameter diberikan
git stash
, jika Anda tidak inginpop
tetapiapply
, dan / atau ingin dapat menentukan simpanan tertentu, daripada hanya mengambil bagian atas satu. Mungkin ini (bukannya alias kedua, di atas) [spasi kosong dilucuti agar pas tanpa menggulir; tambahkan kembali untuk peningkatan keterbacaan]:Catatan : Dalam formulir ini, Anda perlu memberikan argumen tindakan serta pengidentifikasi jika Anda akan memberikan pengidentifikasi simpanan, misalnya
unstashall apply stash@{1}
atauunstashall pop stash@{1}
Yang tentu saja Anda masukkan ke dalam
.zshrc
atau setara untuk membuat ada jangka panjang.Semoga jawaban ini bermanfaat bagi seseorang, menyatukan semuanya dalam satu jawaban.
sumber
Pada git versi 2.8.1: berikut ini berfungsi untuk saya.
Untuk menyimpan file yang dimodifikasi dan tidak terlacak dalam simpanan tanpa nama
Untuk menyimpan file yang dimodifikasi dan tidak dilacak di simpanan dengan nama
Anda dapat menggunakan sembulan atau melamar nanti sebagai berikut.
sumber
git stash show
tidak menunjukkannya. Ketika saya mencobagit stash apply
, saya mendapat "kesalahan: tidak dapat mengembalikan file yang tidak terlacak dari simpanan". Namun, file-file itu sekali lagi terdaftar sebagai tidak terlacak, tetapi perubahan pada file yang dilacak tidak dikembalikan. Saya pikir file-file itu dapat dipulihkan secara individual dengan memeriksanya dari simpanan, tetapi solusi ini bukan yang saya harapkan.Saya dapat menyimpan hanya file yang tidak terlacak dengan melakukan:
Yang terakhir muncul sebagai simpanan file yang dilacak, sehingga hanya menyisakan file yang tidak terlacak.
sumber
git stash save -u
tidak hanya menyimpanuntracked
file, tetapi juga menyimpantracked
danuntracked
. Saya pikir penyelamatan pertama yang Anda lakukan tidak perlu dalam kasus ini. Ada diagram yang baik di atlassian.com/git/tutorials/saving-changes/...Jika Anda ingin menyimpan file yang tidak dilacak, tetapi simpan file yang diindeks (yang akan Anda komit misalnya), tambahkan saja
-k
(simpan indeks) opsi ke-u
sumber
Anda cukup melakukannya dengan perintah di bawah ini
atau
Untuk lebih lanjut tentang simpanan git Kunjungi posting ini (Klik Di Sini)
sumber
misalkan file yang baru dan tidak terlacak ini disebut: "views.json". jika Anda ingin mengubah cabang dengan menyembunyikan status aplikasi Anda, saya biasanya mengetik:
Kemudian:
Dan itu akan disimpan. Maka saya bisa mengganti cabang dengan
sumber
Ada beberapa jawaban yang benar di sini, tetapi saya ingin menunjukkan bahwa untuk seluruh direktori baru, TIDAK
'git add path'
akan berfungsi. Jadi jika Anda memiliki banyak file baru di jalur yang tidak dilacak dan lakukan ini:ini akan disimpan dengan pesan berikut:
dan jika jalur yang tidak dilacak adalah satu-satunya jalan yang Anda tempel, simpanan "temp temp" akan menjadi simpanan kosong. Cara yang benar adalah menambahkan seluruh path, bukan hanya nama direktori (mis. Akhiri path dengan '/'):
sumber
Saya pikir ini bisa diselesaikan dengan memberi tahu git bahwa file itu ada, daripada melakukan semua konten ke area pementasan, dan kemudian memanggil
git stash
. Araqnid menjelaskan bagaimana melakukan yang pertama.atau
Namun, yang terakhir tidak berfungsi:
sumber
favorit saya karena menyimpan juga file yang telah Anda tambahkan dan belum dipentaskan.
sumber
Saya mengalami masalah yang sama saat menggunakan Sourcetree dengan file yang baru dibuat (mereka juga tidak akan dimasukkan dalam simpanan).
Ketika saya pertama kali memilih 'panggung semua' dan kemudian menyimpan komponen yang baru ditambahkan di mana dilacak dan karena itu termasuk dalam simpanan.
sumber
Saya biasa merenungkan dan menginginkan fitur yang sama. Tapi seiring waktu, saya perhatikan itu benar-benar tidak diperlukan. Ketika Anda menyimpan, tidak apa-apa untuk meninggalkan file baru. Tidak ada yang "buruk" dapat terjadi pada mereka (ketika Anda memeriksa sesuatu yang lain, git akan kesalahan dan tidak menimpa file yang tidak terlacak yang ada)
Dan karena biasanya kerangka waktu antara
git stash
dangit stash pop
agak kecil, Anda akan memerlukan file yang tidak terlacak dengan cepat lagi. Jadi saya akan mengatakan ketidaknyamanan file muncul digit status
saat Anda sedang mengerjakan sesuatu yang lain (antaragit stash
dangit stash pop
) lebih kecil maka ketidaknyamanan yang disebabkan oleh pekerjaan dan membutuhkan perhatian yang seharusnya biaya untuk mencoba untuk menambahkan file tidak terlacak ke simpanan Anda.sumber