Saya memiliki perubahan ke file, plus file baru, dan ingin menggunakan git simpanan untuk menempatkan mereka pergi sementara saya beralih ke tugas lain. Tapi git simpanan dengan sendirinya stash-satunya perubahan yang ada file; file baru tetap di saya bekerja pohon, mengacaukan pekerjaan di masa depan saya. Bagaimana aku simpanan ini terpantau file?
Untuk menyimpan direktori kerja anda seperti yang terpantau file (terutama mereka yang ada di .gitignore) maka anda mungkin ingin menggunakan cmd ini:
git simpanan --seperti-tidak terlacak
Update 17 Mei 2018:
Versi baru dari git sekarang memiliki git simpanan-semua
yang stash semua file, termasuk tidak terlacak dan mengabaikan file.
git simpanan --seperti-tidak terlacak
tidak lagi menyentuh diabaikan file (diuji pada git 2.16.2).
Asli jawabannya di bawah ini:
*[Peringatan, melakukan hal ini akan menghapus secara permanen file anda jika anda memiliki direktori/ entri di gitignore file.]1**
Sebagai versi 1.7.7 anda dapat menggunakan git simpanan --seperti-tidak terlacakatau
git menyimpan save-u` untuk menyimpan terpantau file tanpa pementasan mereka.
Add (git add
) file dan mulai melacak itu. Kemudian simpanan. Karena seluruh isi file yang baru, mereka akan disimpan, dan anda dapat memanipulasi seperti yang diperlukan.
Sebagai git 1.7.7, git simpanan
menerima --seperti-tidak terlacak
pilihan (atau pendek-tangan -u
). Untuk memasukkan terpantau file simpanan anda, gunakan salah satu perintah berikut:
git stash --include-untracked
git stash -u
*[Peringatan, melakukan hal ini akan menghapus secara permanen file anda jika anda memiliki direktori/ entri di gitignore file.]1**
Di git bash, menyembunyikannya dari tidak terlacak file ini dicapai dengan menggunakan perintah
git stash --include-untracked
atau
git stash -u
http://git-scm.com/docs/git-stash
git simpanan menghilangkan terpantau atau uncommited file dari ruang kerja anda. Dan anda dapat kembali git simpanan dengan menggunakan perintah berikut
git stash pop
Ini akan menempatkan file kembali di anda lokal kerja.
Pengalaman saya
Aku harus melakukan modifikasi untuk saya gitIgnore file untuk menghindari pergerakan .classpath dan .proyek file ke remote repo. Saya tidak diizinkan untuk bergerak ini dimodifikasi .gitIgnore di remote repo seperti sekarang.
.classpath dan .proyek file-file penting untuk eclipse yang saya java editor.
Saya pertama-tama secara selektif menambahkan saya sisa file dan berkomitmen untuk pementasan. Namun, dorongan terakhir tidak dapat dilakukan kecuali dimodifikasi .gitIgnore fiels dan tidak terlacak file yaitu. .proyek dan .classpath yang tidak disembunyikan.
Aku digunakan
git stash
untuk menyimpan modifikasi .gitIgnore file.
Untuk menyembunyikannya .classpath dan .file proyek, saya digunakan
git stash --include-untracked
dan itu dihapus file dari ruang kerja. Tidak adanya file-file ini mengambil kemampuan saya mengerjakan pekerjaan saya lokasi di eclipse. Saya melanjutkan dengan menyelesaikan prosedur untuk mendorong berkomitmen file ke remote. Setelah ini dilakukan berhasil, saya digunakan
git stash pop
Ini disisipkan di file yang sama kembali di ruang kerja. Ini memberi kembali kepada saya kemampuan saya untuk bekerja pada proyek yang sama di eclipse. Harapan ini sikat selain kesalahpahaman.
Seperti yang telah dikatakan di tempat lain, jawabannya adalah git add
file. misalnya:
git add path/to/untracked-file
git stash
Namun, pertanyaan ini juga dibesarkan di lain menjawab: Bagaimana jika anda don't benar-benar ingin menambahkan file? Nah, sejauh yang saya dapat memberitahu anda, anda harus. Dan berikut ini akan *TIDAK ***** pekerjaan:
git add -N path/to/untracked/file # note: -N is short for --intent-to-add
git stash
ini akan gagal, sebagai berikut:
path/to/untracked-file: not added yet
fatal: git-write-tree: error building trees
Cannot save the current index state
Jadi, apa yang dapat anda lakukan? Nah, anda harus benar-benar menambahkan file, namun, anda dapat secara efektif un-add nanti, dengan git rm --cached
:
git add path/to/untracked-file
git stash save "don't forget to un-add path/to/untracked-file" # stash w/reminder
# do some other work
git stash list
# shows:
# stash@{0}: On master: don't forget to un-add path/to/untracked-file
git stash pop # or apply instead of pop, to keep the stash available
git rm --cached path/to/untracked-file
Dan kemudian anda dapat terus bekerja, dalam keadaan yang sama seperti anda berada di sebelum git add
(yaitu dengan tidak terlacak file yang bernama path/ke/tidak terlacak-file
; ditambah perubahan lain yang anda mungkin harus dilacak file).
Kemungkinan lain untuk alur kerja ini akan menjadi sesuatu seperti:
git ls-files -o > files-to-untrack
git add `cat files-to-untrack` # note: files-to-untrack will be listed, itself!
git stash
# do some work
git stash pop
git rm --cached `cat files-to-untrack`
rm files-to-untrack
[Catatan: Seperti yang disebutkan dalam komentar dari @mancocapac, anda mungkin ingin menambahkan --exclude-standar
untuk git ls-file perintah
(jadi, git ls-file -o --exclude-standar
).]
... yang juga bisa dengan mudah scripted -- bahkan alias akan melakukan (disajikan dalam zsh sintaks; menyesuaikan sesuai kebutuhan) [aku juga disingkat dengan nama file sehingga semua cocok di layar tanpa bergulir di jawaban ini; merasa bebas untuk pengganti alternatif nama file yang anda pilih]:
alias stashall='git ls-files -o > .gftu; git add `cat .gftu`; git stash'
alias unstashall='git stash pop; git rm --cached `cat .gftu`; rm .gftu'
Perhatikan bahwa yang terakhir mungkin akan lebih baik sebagai sebuah shell script atau fungsi, untuk memungkinkan parameter yang akan dipasok ke git simpanan
, dalam kasus anda don't ingin pop
tapi berlaku
, dan/atau ingin bisa tentukan tertentu simpanan, bukan hanya mengambil satu. Mungkin ini (bukan kedua alias, di atas) [spasi dilucuti untuk fit tanpa bergulir; re-menambahkan untuk meningkatkan keterbacaan]:
function unstashall(){git stash "${@:-pop}";git rm --cached `cat .gftu`;rm .gftu}
Catatan: Dalam bentuk ini, anda perlu untuk memasok suatu tindakan argumen serta pengenal jika anda're akan pasokan simpanan identifier, misalnya unstashall menerapkan simpanan@{1}
atau unstashall pop simpanan@{1}
Yang tentu saja anda'd dimasukkan ke dalam .zshrc
atau setara dengan membuat ada jangka panjang.
Mudah-mudahan jawaban ini bermanfaat untuk seseorang, meletakkan segala sesuatu bersama-sama semua dalam satu jawaban.
Pada git versi 2.8.1: berikut bekerja untuk saya.
Untuk menyimpan modifikasi dan tidak terlacak file simpanan tanpa nama
git stash save -u
Untuk menyimpan modifikasi dan tidak terlacak file simpanan dengan nama
git stash save -u <name_of_stash>
Anda dapat menggunakan salah pop atau menerapkan kemudian sebagai berikut.
git stash pop
git stash apply stash@{0}
Saya mampu untuk simpanan hanya yang tidak terlacak file dengan melakukan:
git stash save "tracked files I'm working on"
git stash save -u "untracked files I'm trying to stash"
git stash pop stash@{1}
Yang terakhir muncul simpanan dari dilacak file, sehingga hanya menyisakan terpantau file yang disembunyikan.
let's misalkan baru dan tidak terlacak file ini disebut: "pandangan.json". jika anda ingin mengubah cabang dengan menyimpan state dari aplikasi anda, saya biasanya jenis:
git add views.json
Maka:
git stash
Dan itu akan tersimpan. Maka saya hanya dapat mengubah cabang dengan
git checkout other-nice-branch
Anda hanya dapat melakukannya dengan perintah di bawah ini
git stash save --include-untracked
atau
git stash save -u
Untuk lebih lanjut tentang git simpanan Kunjungi posting ini (Klik di Sini)
Ada beberapa jawaban yang benar di sini, tetapi saya ingin menunjukkan bahwa untuk seluruh direktori, 'git add path'
akan *TIDAK **** bekerja. Jadi jika anda memiliki banyak file baru dalam tidak terlacak-jalan* dan melakukannya:
git add untracked-path
git stash "temp stash"
ini akan menyimpan dengan pesan berikut:
Saved working directory and index state On master: temp stash
warning: unable to rmdir untracked-path: Directory not empty
dan jika tidak memiliki jalur-jalur adalah satu-satunya jalan anda're menyembunyikannya, simpanan "temp stash" akan menjadi kosong simpanan. Cara yang benar adalah dengan menambahkan seluruh jalan, tidak hanya nama direktori (yaitu akhir jalan dengan '/'):
git add untracked-path/
git stash "temp stash"
Saya pikir ini bisa diselesaikan dengan memberitahu git bahwa file yang ada, daripada melakukan semua isinya ke area stage, dan kemudian memanggil git simpanan
. Araqnid menjelaskan cara dilakukan mantan.
git add --intent-to-add path/to/untracked-file
atau
git update-index --add --cacheinfo 100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 path/to/untracked-file
Namun, yang terakhir doesn't bekerja:
$ git stash
b.rb: not added yet
fatal: git-write-tree: error building trees
Cannot save the current index state
Aku digunakan untuk merenungkan dan keinginan fitur yang sama. Tapi seiring waktu, saya melihat itu benar-benar isn't diperlukan. Ketika anda menyimpan, it's OK untuk meninggalkan file baru. Ada "buruk" dapat terjadi pada mereka (ketika anda memeriksa sesuatu yang lain, git akan error dan tidak menimpa terpantau file)
Dan karena biasanya time frame antara git simpanan
dan git simpanan pop
agak kecil, anda'akan membutuhkan terpantau file dengan cepat lagi.
Jadi saya akan mengatakan ketidaknyamanan file muncul di git status
sementara anda're bekerja pada sesuatu yang lain (antara git simpanan
dan git simpanan pop
) lebih kecil maka ketidaknyamanan yang disebabkan oleh pekerjaan dan membutuhkan perhatian itu akan biaya untuk mencoba untuk menambahkan terpantau file untuk simpanan anda.