Menyimpan perubahan sambil menyimpan perubahan di direktori kerja di Git
145
Apakah ada git stashperintah yang menyembunyikan perubahan Anda, tetapi menyimpannya di direktori kerja juga? Jadi pada dasarnya git stash; git stash applysatu langkah?
@MariuszPawelski Tidak, tidak juga. Pertanyaan itu lebih spesifik daripada pertanyaan saya. Jawaban atas pertanyaan saya hanyalah "tidak". Terima kasih atas tautannya, mungkin bermanfaat bagi sebagian orang, atau bahkan saya sendiri di lain waktu.
Michael Dorst
Agar jelas, pertanyaan saya berbeda karena saya tidak memiliki persyaratan bahwa file tetap tidak tersentuh. Saya hanya mencari alternatif git stash && git stash apply. Anda akan melihat bahwa jawaban untuk pertanyaan itu sangat berbeda dari saya.
Michael Dorst
ah, benar, pertanyaanmu sedikit kurang spesifik. Tetapi saya mengajukan pertanyaan itu karena jawabannya juga memenuhi kebutuhan Anda. Dan dengan cara itu pertanyaan ini muncul sebagai "Tertaut" di bilah sisi, jadi mungkin bermanfaat bagi seseorang.
Mariusz Pawelski
Jawaban:
156
Untuk apa nilainya, cara lain untuk melakukan ini adalah dengan membuat perubahan yang ingin Anda pertahankan, dan kemudian menyimpan semuanya menggunakan --keep-index:
sejauh ini penjelasan yang paling jelas tentang --keep-index yang pernah saya lihat. Saya tidak mendapatkan cukup makna dengan cara itu tertulis di dokumen.
detektif
52
git stashdan kemudian git stash apply( git stash && git stash apply) akan menyimpan file dan menerapkan simpanan segera setelah itu. Jadi setelah semua Anda akan memiliki perubahan Anda di simpanan dan dir bekerja.
Anda dapat membuat alias jika Anda menginginkannya utuh. Masukkan sesuatu seperti ini ke ~/.gitconfig:
[alias]
sta = "!git stash && git stash apply"
Kelemahan dari pendekatan ini adalah bahwa semua file disimpan dan dibuat ulang. Ini berarti cap waktu pada file yang dimaksud akan diubah. (Menyebabkan Emacs mengeluh ketika saya mencoba menyimpan file jika dibuka sebelum saya melakukannya git sta, dan dapat menyebabkan pembangunan kembali yang tidak perlu jika Anda menggunakan makeatau teman.)
Bagaimana saya bisa memodifikasi alias ini untuk digunakan git stash savedengan argumen dan kemudian lakukan git stash apply?
spinningarrow
1
@ Jayayri, bang berarti itu sebenarnya perintah eksternal, bukan argumen git itu sendiri. Sesuai dokumen : "Seperti yang Anda tahu, Git hanya mengganti perintah baru dengan apa pun yang Anda inginkan. Namun, mungkin Anda ingin menjalankan perintah eksternal, bukan subperintah Git. Dalam hal ini, Anda memulai perintah dengan ! karakter! "
Madhead
10
Peningkatan kecil dalam jawaban yang secara praktis mungkin digunakan.
$ git add modified-file.txt
(OR $ git add . ---- for all modified file)
$ git stash save --keep-index "Your Comment"
CATATAN: tidak berfungsi tanpa "git add" (mis. Untuk modifikasi tetapi tidak ditambahkan ke file komit)
alex_1948511
4
Ada trik yang dapat membantu Anda, bukan menyembunyikan tetapi FWIW:
git add -A
git commit -m "this is what's called stashing" (create new stash commit)
git tag stash (mark the commit with 'stash' tag)
git reset HEAD~ (Now go back to where you've left with your working dir intact)
Dan sekarang Anda memiliki simpanan tagged komit yang Anda inginkan, git stash poptoh tidak mungkin untuk melakukan apa pun , tetapi Anda dapat melakukan hal-hal seperti membuat tambalan atau mengatur ulang file dll dari sana, file dir Anda yang berfungsi juga dibiarkan BTW utuh.
Perhatikan bahwa ini tidak melakukan semua yang git stash pushdilakukannya. Misalnya, itu tidak menambahkan nama cabang ke komit, misalnya " stash@{0}: On myBranch: Stash commit message".
git stash && git stash apply
. Anda akan melihat bahwa jawaban untuk pertanyaan itu sangat berbeda dari saya.Jawaban:
Untuk apa nilainya, cara lain untuk melakukan ini adalah dengan membuat perubahan yang ingin Anda pertahankan, dan kemudian menyimpan semuanya menggunakan
--keep-index
:Perintah di atas akan menyimpan semuanya, tetapi akan membiarkan file-file tersebut dipentaskan di direktori kerja Anda.
Dari dokumentasi Linux Kernel Git resmi untuk
git stash
atau dari git-scm :sumber
git stash
dan kemudiangit stash apply
(git stash && git stash apply
) akan menyimpan file dan menerapkan simpanan segera setelah itu. Jadi setelah semua Anda akan memiliki perubahan Anda di simpanan dan dir bekerja.Anda dapat membuat alias jika Anda menginginkannya utuh. Masukkan sesuatu seperti ini ke
~/.gitconfig
:Kelemahan dari pendekatan ini adalah bahwa semua file disimpan dan dibuat ulang. Ini berarti cap waktu pada file yang dimaksud akan diubah. (Menyebabkan Emacs mengeluh ketika saya mencoba menyimpan file jika dibuka sebelum saya melakukannya
git sta
, dan dapat menyebabkan pembangunan kembali yang tidak perlu jika Anda menggunakanmake
atau teman.)sumber
git stash; git stash apply
dangit stash && git stash apply
?&&
menjalankan perintah kedua hanya jika pertama kali mengembalikan kode status nol .git config --global alias.sta "!git stash && git stash apply"
harus melakukannya.git stash save
dengan argumen dan kemudian lakukangit stash apply
?Peningkatan kecil dalam jawaban yang secara praktis mungkin digunakan.
sumber
Ada trik yang dapat membantu Anda, bukan menyembunyikan tetapi FWIW:
Dan sekarang Anda memiliki simpanan tagged komit yang Anda inginkan,
git stash pop
toh tidak mungkin untuk melakukan apa pun , tetapi Anda dapat melakukan hal-hal seperti membuat tambalan atau mengatur ulang file dll dari sana, file dir Anda yang berfungsi juga dibiarkan BTW utuh.sumber
Anda dapat menggunakan
git stash create
untuk membuat simpanan simpanan, dan kemudian menyimpannya ke simpanan menggunakangit stash store
:Ini dapat disimpan ke alias git agar lebih nyaman:
Perhatikan bahwa ini tidak melakukan semua yang
git stash push
dilakukannya. Misalnya, itu tidak menambahkan nama cabang ke komit, misalnya "stash@{0}: On myBranch: Stash commit message
".sumber
man git-stash
mengatakan-m <message>
harus datang sebelum hash komit. Kecuali ada perubahan git terbaru.