Baiklah, katakanlah suatu hari kita membuat banyak modifikasi dan ketika kita berkomitmen, kita perhatikan kita sedang mengerjakan cabang yang salah.
Bagaimana kita bisa memaksa git untuk berganti cabang tanpa membuang perubahan lokal .
Saya mungkin akan membahas hal ini dengan cara yang naif sementara saya menunggu jawaban, tetapi saya ingin tahu apakah ada prosedur yang benar karena saya akan berbohong jika saya mengatakan ini belum terjadi pada saya sebelumnya ...
- Cadangkan repo yang diubah
git reset --hard
git checkout right-branch
- Kembalikan perubahan
git commit -m "changes"
git
git-branch
megawac
sumber
sumber
git stash
git-scm.com/book/en/Git-Tools-StashingJawaban:
Ada banyak cara berbeda tergantung pada seberapa jauh Anda berada dan cabang mana yang Anda inginkan.
Mari kita lakukan kesalahan klasik:
Jadi sekarang Anda ingin perubahan ini, yang Anda belum berkomitmen untuk
master
, aktifdevelop
.Jika Anda tidak memiliki sebuah
develop
belum, metode ini sepele:Ini menciptakan
develop
cabang baru mulai dari manapun Anda berada sekarang. Sekarang Anda dapat melakukan dan hal-hal baru sudah aktifdevelop
.Anda memiliki sebuah
develop
. Lihat apakah Git akan membiarkan Anda beralih tanpa melakukan apa pun:Ini akan berhasil, atau mengeluh. Jika berhasil, bagus! Komit saja. Jika tidak (
error: Your local changes to the following files would be overwritten ...
), Anda masih memiliki banyak opsi.Mungkin yang termudah adalah
git stash
(karena semua jawaban lain yang mengalahkan saya untuk mengklik postkata). Jalankangit stash save
ataugit stash push
, 1 atau sekadar polosgit stash
yang merupakan kependekan darisave
/push
:Ini mengkomit kode Anda (ya, itu benar-benar membuat komit) menggunakan metode non-branch-y yang aneh. Komit yang dibuatnya bukan "on" cabang apa pun tetapi sekarang disimpan dengan aman di repositori, jadi Anda sekarang dapat beralih cabang, lalu "menerapkan" simpanan:
Jika semuanya berjalan dengan baik, dan Anda menyukai hasilnya, Anda harus
git stash drop
menyimpannya. Ini menghapus referensi ke commit non-branch-y yang aneh. (Mereka masih dalam repositori, dan kadang-kadang dapat diambil dalam keadaan darurat, tetapi untuk sebagian besar tujuan, Anda harus menganggap mereka hilang pada saat itu.)The
apply
langkah melakukan penggabungan perubahan disembunyikan, menggunakan mesin merge Git yang kuat yang mendasari, hal yang sama menggunakan ketika Anda melakukan penggabungan cabang. Ini berarti Anda bisa mendapatkan "gabungkan konflik" jika cabang yang Anda kerjakan secara tidak sengaja, cukup berbeda dari cabang yang Anda maksudkan sedang dikerjakan. Jadi ide yang baik untuk memeriksa hasilnya dengan cermat sebelum Anda menganggap bahwa simpanan diterapkan dengan bersih, bahkan jika Git sendiri tidak mendeteksi adanya konflik gabungan.Banyak orang menggunakan
git stash pop
, yang merupakan kependekan darigit stash apply && git stash drop
. Sejauh ini tidak apa-apa, tetapi itu berarti bahwa jika aplikasi menghasilkan kekacauan, dan Anda memutuskan Anda tidak ingin melanjutkan jalan ini, Anda tidak bisa mendapatkan simpanan kembali dengan mudah. Itu sebabnya saya merekomendasikanapply
hasil yang terpisah , periksa,drop
hanya jika / ketika puas. (Ini tentu saja memperkenalkan titik lain di mana Anda dapat mengambil rehat kopi lagi dan melupakan apa yang Anda lakukan, kembali, dan melakukan hal yang salah , jadi itu bukan obat yang sempurna.)1 The
save
digit stash save
adalah kata kerja tua untuk menciptakan simpanan baru. Git versi 2.13 memperkenalkan kata kerja baru untuk membuat hal-hal lebih konsisten denganpop
dan untuk menambahkan lebih banyak opsi ke perintah penciptaan. Git versi 2.16 secara resmi menghentikan kata kerja yang lama (meskipun masih bekerja di Git 2.23, yang merupakan rilis terbaru pada saat saya mengedit ini).sumber
git stash
sehingga komit — karenagit stash
, Anda mendapatkan dua komit per entri simpanan, dalam pengaturan yang tidak biasa — tidak ada cabang. Namun, kecuali untuk kasus khusus jangka pendek, saya biasanya lebih suka membuat komit normal. Anda bisagit reset --soft
ataugit reset --mixed
nanti, atau menggunakannyagit commit --amend
untuk mendorongnya ke samping, ketika Anda kembali bekerja di cabang itu. (Dalam Git modern, Anda juga dapat menggunakangit worktree add
, yang mungkin merupakan solusi yang lebih baik.)Gunakan simpanan git
Ini mendorong perubahan ke stack. Saat Anda ingin menariknya, gunakan kembali
Anda bahkan dapat menarik item individual. Untuk sepenuhnya menerbangkan simpanan:
sumber
git stash drop
;git stash clear
akan menghapus seluruh tumpukan simpanan, termasuk simpanan yang mungkin tidak terkait dengan set perintah ini.git stash
untuk menyimpan perubahan yang tidak dikomitgit stash list
untuk daftar simpanan simpanan Anda yang tidak disimpangit stash apply stash@{x}
di mana x dapat 0,1,2..tidak ada simpanan yang telah Anda buatsumber
Anda dapat:
Gunakan
git stash
untuk menyimpan perubahan Anda atau,Buat cabang lain dan komit perubahan Anda di sana, lalu gabungkan cabang itu ke direktori kerja Anda
sumber