Karena git pada dasarnya tentang mengelola semua konten dan indeks penyimpanan (dan bukan satu atau beberapa file), git stash
kesepakatan, tidak mengherankan,dengan semua direktori yang berfungsi.
Sebenarnya, sejak Git 2.13 (Q2 2017), Anda dapat menyimpan file individual, dengan git stash push
:
git stash push [--] [<pathspec>...]
Ketika pathspec
diberikan ke ' git stash push
', simpanan baru merekam status yang dimodifikasi hanya untuk file yang cocok dengan pathspec. Lihat " Menyimpan perubahan ke file tertentu " untuk informasi lebih lanjut.
Contoh sederhana:
git stash push path/to/file
Kasing uji untuk fitur ini menunjukkan beberapa opsi lagi:
test_expect_success 'stash with multiple pathspec arguments' '
>foo &&
>bar &&
>extra &&
git add foo bar extra &&
git stash push -- foo bar &&
test_path_is_missing bar &&
test_path_is_missing foo &&
test_path_is_file extra &&
git stash pop &&
test_path_is_file foo &&
test_path_is_file bar &&
test_path_is_file extra
Jawaban asli (di bawah, Juni 2010) adalah tentang memilih secara manual apa yang ingin Anda sembunyikan.
Komentar Casebash :
Ini ( stash --patch
solusi asli) bagus, tetapi sering saya sudah memodifikasi banyak file sehingga menggunakan tambalan mengganggu
bukzor 's jawaban (upvoted, November 2011) menyarankan solusi yang lebih praktis, berdasarkan
git add
+git stash --keep-index
.
Pergi dan lihat jawabannya, yang seharusnya jawaban resmi (bukan milik saya).
Tentang opsi itu, chhh menunjukkan alur kerja alternatif di komentar:
Anda harus " git reset --soft
" setelah simpanan untuk mendapatkan pementasan yang jelas kembali:
Untuk sampai ke keadaan semula - yang merupakan area pementasan yang jelas dan hanya dengan beberapa modifikasi un-staged, seseorang dapat dengan lembut mengatur ulang indeks untuk mendapatkan (tanpa melakukan hal seperti Anda - bukzor - lakukan).
(Jawaban asli Juni 2010: simpanan manual)
Namun, git stash save --patch
dapat memungkinkan Anda untuk mencapai simpanan parsial yang Anda kejar:
Dengan --patch
, Anda dapat secara interaktif memilih bakhil dari dalam perbedaan antara KEPALA dan pohon yang akan disimpan.
Entri simpanan dikonstruksi sedemikian sehingga status indeksnya sama dengan status indeks repositori Anda, dan tabel kerjanya hanya berisi perubahan yang Anda pilih secara interaktif. Perubahan yang dipilih kemudian dibatalkan dari meja kerja Anda.
Namun itu akan menyimpan indeks penuh (yang mungkin bukan yang Anda inginkan karena mungkin termasuk file lain yang sudah diindeks), dan sebagian worktree (yang bisa terlihat seperti yang Anda ingin menyimpan).
git stash --patch --no-keep-index
mungkin lebih cocok.
Jika --patch
tidak berhasil, proses manual mungkin:
Untuk satu atau beberapa file, solusi perantara adalah dengan:
- salin di luar repo Git
(Sebenarnya, eleotlecram mengusulkan alternatif yang menarik )
git stash
- salin kembali
git stash
# kali ini, hanya file yang Anda inginkan yang disimpan
git stash pop stash@{1}
# Terapkan ulang semua modifikasi file Anda
git checkout -- afile
# reset file ke konten KEPALA, sebelum ada modifikasi lokal
Pada akhir proses yang agak rumit itu, Anda hanya akan memiliki satu atau beberapa file yang disimpan.
git stash --keep-index
memang menjaga indeks, tetapi menyimpan semua - baik dalam indeks dan keluar.