Saya memulai beberapa pekerjaan pada fitur baru dan setelah coding sedikit, saya memutuskan fitur ini harus di cabang sendiri.
Bagaimana cara memindahkan perubahan yang tidak dikomit yang ada ke cabang baru dan mengatur ulang yang sekarang?
Saya ingin mengatur ulang cabang saya saat ini sambil mempertahankan pekerjaan yang ada pada fitur baru.
git
git-branch
git-stash
git-reset
Dane O'Connor
sumber
sumber
Jawaban:
Gunakan yang berikut ini:
Ini akan meninggalkan cabang Anda saat ini, buat dan checkout cabang baru dan simpan semua perubahan Anda. Anda kemudian dapat melakukan perubahan pada file yang akan dikomit:
dan komit ke cabang baru Anda dengan:
Perubahan dalam direktori kerja dan perubahan yang dilakukan dalam indeks belum termasuk dalam cabang apa pun. Ini mengubah cabang tempat modifikasi itu akan berakhir.
Anda tidak mengatur ulang cabang asli Anda, tetap seperti apa adanya. Komitmen terakhir
<old-branch>
masih akan sama. Karena itu Andacheckout -b
kemudian berkomitmen.Pembaruan 2020 / Git 2.23
Git 2.23 menambahkan
switch
sub -perintah baru dalam upaya untuk menghapus beberapa kebingungan yang berasal dari penggunaan yang berlebihan daricheckout
(berpindah cabang, mengembalikan file, melepaskan HEAD, dll.)Dimulai dengan versi Git ini, ganti perintah di atas dengan:
Perilaku itu identik dan tetap tidak berubah.
sumber
git checkout -b <new branch>
perubahan di mana perubahan itu akan berakhir.git checkout .
/git reset --hard
unrecoverably akan menghapus merekaKalau tidak:
Simpan perubahan saat ini ke simpanan temp:
$ git stash
Buat cabang baru berdasarkan simpanan ini, dan beralih ke cabang baru:
$ git stash branch <new-branch> stash@{0}
Kiat: gunakan tombol tab untuk mengurangi mengetikkan nama simpanan.
sumber
git stash apply
.git checkout -b <new branch name>
git add -A
sebelum menyembunyikannya.Jika Anda telah membuat komit di cabang utama saat Anda berkode, tetapi sekarang Anda ingin memindahkan komit tersebut ke cabang lain, ini adalah cara cepat:
Salin riwayat Anda saat ini ke cabang baru, bawa juga perubahan yang tidak dikomit:
Sekarang paksa cabang "berantakan" asli untuk mundur: (tanpa beralih ke sana)
Sebagai contoh:
atau jika Anda telah membuat 4 komitmen:
Peringatan:
git branch -f master origin/master
akan mengatur ulang informasi pelacakan untuk cabang itu. Jadi, jika Anda telah mengkonfigurasimaster
cabangAndauntuk mendorong ke tempat lain selainorigin/master
itu konfigurasi itu akan hilang.Peringatan: Ada juga bahaya jika Anda rebase setelah bercabang, yang dijelaskan di sini . Satu-satunya cara untuk menghindarinya adalah dengan membuat sejarah baru menggunakan cherry-pick. Tautan itu menjelaskan metode pembodohan yang paling aman . Jika Anda memiliki perubahan yang tidak dikomit, Anda mungkin ingin
git stash
di awal dangit stash pop
di akhir.sumber
Skenario umum adalah sebagai berikut: Saya lupa membuat cabang baru untuk fitur baru, dan melakukan semua pekerjaan di cabang fitur lama. Saya telah melakukan semua pekerjaan "lama" ke cabang master, dan saya ingin cabang baru saya tumbuh dari "master". Saya belum membuat komitmen tunggal untuk pekerjaan baru saya. Berikut adalah struktur cabang: "master" -> "Old_feature"
sumber
Jika Anda komit, Anda juga bisa memilih satu komit tunggal. Saya sering melakukan ini ketika saya mulai bekerja di master, dan kemudian ingin membuat cabang lokal sebelum saya mendorong ke asal saya /.
Ada banyak yang bisa Anda lakukan dengan cherry-pick, seperti yang dijelaskan di sini , tetapi ini bisa menjadi kasus yang berguna bagi Anda.
sumber
Sebenarnya ada cara yang sangat mudah untuk melakukan ini dengan GitHub Desktop sekarang yang saya tidak percaya adalah fitur sebelumnya.
Yang perlu Anda lakukan adalah beralih ke cabang baru di GitHub Desktop, dan itu akan meminta Anda untuk meninggalkan perubahan di cabang saat ini (yang akan disimpan), atau membawa perubahan Anda ke cabang baru. Cukup pilih opsi kedua, untuk membawa perubahan ke cabang baru. Anda kemudian dapat melakukan seperti biasa.
sumber
Ini mungkin bermanfaat untuk semua alat yang menggunakan GIT
Perintah
Ganti cabang - ini akan memindahkan perubahan Anda ke cabang baru. Kemudian Anda dapat melakukan perubahan.
TortoiseGIT
Klik kanan pada repositori Anda dan kemudian gunakan TortoiseGit-> Switch / Checkout
SourceTree
Gunakan tombol "Checkout" untuk berganti cabang. Anda akan melihat tombol "checkout" di bagian atas setelah mengklik cabang. Perubahan dari cabang saat ini akan diterapkan secara otomatis. Maka Anda dapat melakukan mereka.
sumber
Saya menggunakan @Robin menjawab & mendaftar semua yang saya lakukan,
! Jika repo memiliki lebih dari satu simpanan, lihat mana yang akan diterapkan ke cabang baru:
dan memeriksa simpanan individu dengan,
Atau periksa semua simpanan sekaligus:
sumber