Kadang-kadang saya mengalami masalah memiliki kode tidak berkomitmen pada workstation yang tidak siap untuk komit tetapi perlu diselesaikan pada workstation atau laptop yang berbeda.
Apakah ada yang punya solusi untuk masalah ini, seperti "komitmen lunak" atau cara lain untuk mentransfer perubahan ke mesin lain untuk mengerjakannya di tempat lain?
Saya lebih suka tidak dipaksa untuk melakukan dan mendorong perubahan yang tidak diterapkan dengan benar.
git stash
...?Jawaban:
Berikut ini mengasumsikan repo lokal Anda adalah klon dari repo di server lain, misalnya github; dan bahwa Anda memiliki hak untuk membuat perubahan pada server hulu. Dalam contoh saya, saya telah menyebut repo hulu ini "asal". Jalankan
git remote show
untuk daftar repo lain, ini dapat memberi Anda petunjuk tentang apa namanya.Saya sarankan membuat cabang, maka Anda dapat memeriksa cabang di komputer lain. Bahkan, jika Anda membuat cabang segera setelah Anda mulai bekerja, Anda dapat "melakukan" ke cabang Anda, memiliki jejak dan cadangan pekerjaan Anda, tanpa harus memiliki codeset yang stabil. Setelah Anda puas dengan pekerjaan Anda, Anda dapat menggabungkannya kembali ke cabang "master" Anda.
git checkout -b MyNewBranch
git push origin MyNewBranch
git checkout MyNewBranch
git checkout master
git merge MyNewBranch
git branch
sumber
git branch -d master
", saya bingung, bukankah itu meminta git untuk menghapus cabang master ?? (itulah kesan yang saya dapatkan dari membaca manual cabang git)Anda dapat menggunakan
git diff
untuk membuat tambalan dan kemudian menerapkannya di mesin lain. Atau Anda dapat membuat komit sementara, lalu tarik dari mesin lain. Anda bahkan dapat membuat cabang sementara di mesin lain, tekan komit sementara Anda di sana, lalu hapus cabang.Metode favorit saya adalah yang kedua: membuat komit sementara, kemudian pergi ke komputer lain dan melakukan sesuatu seperti ini:
sumber
git format-patch
?git diff
. Apakah ada sesuatu yang saya lewatkan?git format-patch deadbee..badcab1e
- Ini membuat.patch
file untuk setiap komit secara terpisah dengan nama yang bagus dan pesan komit dipertahankan.Saya berkomitmen . Saya mendorongnya ke cabang pribadi , memeriksa di sisi lain dan mengubah. Dan hapus cabang pribadi setelah selesai.
Tentu saja Anda dapat mendorong langsung di antara repo, Anda dapat menggunakan bundel atau
format-patch
/am
, tetapi cabang pribadi sejauh ini merupakan solusi termudah. Dan menulis ulang sejarah bukanlah masalah besar asalkan tidak didorong ke cabang bersama. Dalam banyak proyek, orang-orang seharusnya memundurkan cabang fitur agar lebih mudah dipahami untuk ditinjau.sumber
Pendekatan yang mudah adalah yang Anda jelaskan: salin
.git
direktori tersembunyi dan proyeksikan file ke komputer lain tempat Anda dapat melakukan dan menyelesaikan, atau terus bekerja.The
.git
direktori di mana sejarah git Anda disimpan, sehingga melestarikan ini bersama dengan file yang sebenarnya membuat seluruh sejarah proyek Anda utuh.Jika Anda selesai menggunakan mesin asli, saya mungkin akan merekomendasikan pendekatan ini.
sumber
Seperti yang dijawab orang lain, dengan Git Anda tidak perlu peduli dengan kode yang belum selesai di cabang pribadi Anda. Namun, jika karena alasan tertentu, Anda benar-benar benar-benar tidak ingin pekerjaan Anda yang belum selesai menyentuh repo utama, Anda dapat memanfaatkan sifat terdistribusi Git!
Ada alat sederhana bernama
git bundle
yang dapat membantu Anda dengan mudah melewati perubahan tanpa repositori pusat. Pertama, klon repo:buat beberapa perubahan dan komit ke cabang sementara:
Sekarang, bundel perubahan itu:
Sekarang Anda memiliki file bundel yang dapat Anda kirim ke mesin baru Anda. Bagaimana Anda menggunakannya di sana? Mari kita membuat copy pekerjaan baru:
kita perlu memperlakukan bundel kita sebagai remote lain, sehingga kita dapat mengambil perubahan darinya
karena intinya adalah untuk mentransfer perubahan tanpa meninggalkan jejak, kami ingin memasukkannya ke dalam copy pekerjaan untuk kehilangan komit temp:
dan yang tersisa adalah menghapus remote sementara:
BIOLA! Perubahan ditransfer ke copy pekerjaan baru tanpa meninggalkan jejak cabang atau komit!
Tapi sungguh - proses ini cukup panjang dan rumit. Ini Git, bukan SVN - seharusnya tidak ada alasan untuk tidak mendorong cabang pribadi Anda ke repo pusat.
sumber