git perubahan simpanan berlaku untuk cabang baru?

348

Saya sedang bekerja di cabang utama, membuat beberapa perubahan dan kemudian menyimpannya. Sekarang, tuanku ada di HEAD.

Tapi sekarang, saya ingin mengambil perubahan ini tetapi ke cabang baru yang bercabang dari versi HEAD dari cabang master.

Bagaimana saya melakukan ini?

Yash Desai
sumber
3
Saya pikir Anda mencari ini? stackoverflow.com/questions/556923/…
zx1986

Jawaban:

503

Apakah prosedur standar tidak berfungsi?

  • membuat perubahan
  • git stash save
  • git branch xxx HEAD
  • git checkout xxx
  • git stash pop

Singkat:

  • membuat perubahan
  • git stash
  • git checkout -b xxx
  • git stash pop
Andrejs Cainikovs
sumber
8
@ sfletche jika Anda ingin memberi nama simpanan Anda, Anda perlu melakukan git simpanan simpan <nama>, jika tidak, seperti yang Anda katakan, itu sama dengan simpanan git.
SgtPooki
5
Setelah menggunakan pendekatan ini, tampaknya jika Anda kembali ke cabang sebelumnya, perubahan simpanan telah kembali. Apakah mungkin untuk hanya menyimpan perubahan simpanan di cabang baru?
Thomas Higginbotham
Cukup komit perubahan Anda ke cabang baru.
ChrisR
2
@ThomasHigginbotham no. Direktori Kerja adalah umum di antara cabang-cabang dan disalin dari satu ke yang lain ketika Anda berpindah dari satu cabang ke cabang lainnya. Untuk "mencapai" apa yang Anda inginkan, saya biasanya membuat simpanan yang berbeda, menambahkan deskripsi yang berguna dengan git stash save "description"perintah yang disebutkan sebelumnya; dan kemudian saya git clearcabang (untuk membuang direktori kerja yang sebenarnya) dan kemudian git stash apply stash@{my_desired_stash}di cabang yang diinginkan (setelah beralih ke itu dengan git checkout <branch>jelas). Saya tahu itu bukan solusi nyata, tetapi adalah yang terbaik yang dapat Anda lakukan dengan git .
Kamafeather
Saya juga menyelesaikan ini dengan git stash dropsekali saya lakukan
oddmeter
221

Karena Anda telah menyembunyikan perubahan Anda, yang Anda butuhkan hanyalah satu kalimat ini:

  • git stash branch <branchname> [<stash>]

Dari dokumen ( https://www.kernel.org/pub/software/scm/git/docs/git-stash.html ):

Membuat dan memeriksa cabang baru bernama < branchname > mulai dari komit tempat < stash > awalnya dibuat, menerapkan perubahan yang direkam dalam < stash > ke pohon dan indeks kerja yang baru. Jika itu berhasil, dan < stash > adalah referensi dari form stash @ {< revisi >}, itu kemudian menjatuhkan < stash >. Ketika tidak ada < simpanan > diberikan, terapkan yang terbaru.

Ini berguna jika cabang tempat Anda menjalankan git simpanan telah cukup berubah sehingga git simpanan gagal karena konflik. Karena simpanan diterapkan di atas komit yang HEAD pada saat simpanan git dijalankan, simpanan memulihkan kondisi simpanan semula tanpa konflik.

Rodney Golpe
sumber
3
Untuk simpanan tunggal inilah cara yang harus ditempuh. Referensi nama simpanan tidak diperlukan karena Git akan menerapkan simpanan terbaru, beralih ke cabang baru dan menerapkan simpanan dalam 1 perintah.
sinisterOrange
@RodneyGolpe Tampaknya ini juga berlaku simpanan untuk 'tuan'? Apa yang ingin saya lakukan adalah, dari 'master', simpanan git, maka saya akan berharap 'git simpanan cabang [branchname] untuk menerapkan simpanan ke cabang baru, meninggalkan master tanpa suntingan?
David Doria
2
@ Davidvidoria Anda harus melakukan perubahan pada cabang baru Anda sebelum kembali ke master.
Rodney Golpe
Sekarang juga melakukan perubahan untuk dikuasai juga ... Aku benar-benar bingung ... jelas aku masih tidak begitu mengerti git. Setelah master reset lunak kemudian menarik dari repo jarak jauh sekarang saya di mana saya ingin berada. Master ada dalam kondisi sebelum perubahan. Cabang baru menyimpan perubahan.
Ekkstein
1

Jika Anda memiliki beberapa perubahan pada ruang kerja Anda dan Anda ingin menyimpannya di cabang baru gunakan perintah ini:

git stash branch branchName

Itu akan membuat:

  1. cabang baru
  2. pindahkan perubahan ke cabang ini
  3. dan hapus simpanan terbaru (Seperti: git stash pop)
Hamed Yarandi
sumber