Saya melakukan proyek pada github dan berhasil membuat perubahan pada master lokal saya dan mendorong ke asal di github. Saya ingin mengirim permintaan tarik, tetapi hanya ingin memasukkan komit terakhir. UI permintaan tarik di github.com menunjukkan 9 commit terakhir dan saya tidak tahu cara memfilternya.
Saya mencoba memahami apakah saya harus membuat cabang lokal baru, periksa itu dan entah bagaimana mengatur ulang atau rebase ke hulu? Kemudian terapkan komit terakhir saya dari tuan saya dengan id ke cabang lokal baru dan gunakan itu untuk permintaan tarik?
Saya mencoba untuk mendapatkan konsep yang benar dan mencari tahu baris perintah yang tepat untuk melakukan apa yang saya butuhkan.
git
github
pull-request
Kevin Hakanson
sumber
sumber
Jawaban:
Anda pada dasarnya perlu membuat cabang baru & memetik ceri komit yang ingin Anda tambahkan.
Setelah itu, Anda akan melihat
<new-branch-name>
cabang di github, beralih ke sana dan dapat mengirimkan permintaan tarik dengan perubahan yang Anda inginkan.sumber
git remote add upstream <git repository>
dangit remote update
sebelum menjalankan git checkout -b upstream upstream / master.Buat cabang baru mulai dari komit terbaru, yang juga dalam repositori asal:
Kemudian gunakan
git cherry-pick
untuk mendapatkan komit tunggal yang Anda inginkan permintaan tariknya. Jika cabang dengan komit ini dipanggilfeature
dan komit yang Anda inginkan adalah komit terbaru di cabang ini, ini akan menjadiDengan asumsi tambalan ini berlaku tanpa konflik, Anda sekarang memiliki cabang tempat Anda dapat melakukan permintaan tarik.
Pada langkah kedua, Anda sekarang perlu memutuskan apa yang harus dilakukan dengan
feature
cabang Anda . Jika Anda belum mempublikasikan perubahan Anda di cabang ini, prosedur terbaik mungkin rebasing cabang ini pada cabang-baru (dan menghapus komit terakhir, jika ini tidak dilakukan secara otomatis olehgit rebase
).sumber
feature
sudah berkomitmenorigin/master
, tidak ada yang terjadi selamacherry-pick
. Cabang baru harus dariupstream/master
(yaitu, jawaban KevinSaya berakhir dalam situasi di mana saya telah bercabang dua garpu dan ingin mengajukan permintaan tarik kembali ke proyek asli.
Saya punya:
Untuk melakukan ini, saya:
Perintah git adalah sesuatu seperti:
Kemudian saya memilih permintaan fitur-saya sebagai cabang untuk permintaan tarik saya ke proyek asli.
sumber
Ini hampir berhasil untuk saya:
Satu-satunya perbedaan adalah ini:
Saya perlu mengubah baris terakhir sehingga git push akan membuat cabang hulu di repo GitHub saya sehingga saya bisa membuat PR dari situ.
sumber
Saya sudah membuat komitmen yang saya ingin dapat mengisolasi sebagai permintaan tarik kembali ke cabang saat ini.
Jadi saya memeriksa cabang baru
Dan di sinilah solusi saya berbeda dengan @Kevin Hakanson , karena saya perlu mengatur ulang cabang ini ke tempat dalam sejarah yang ingin saya bedakan
Dan ceri-pilih komit dari mana saya ingin membuat permintaan tarik terisolasi
Akhirnya dorong ke atas ke jarak jauh
Dan tarik permintaan dat shi.
sumber
Solusi untuk membuat cabang baru (sementara), memetik ceri dan membuat permintaan tarik untuk cabang itu tidak memuaskan saya. Saya tidak ingin mengubah repositori saya untuk membuat set komit tersedia, jadi saya datang dengan alternatif berikut:
Pertama buat file tambalan untuk semua komitmen yang menarik:
Jika komit minat terjadi menjadi yang terakhir yang dapat Anda gunakan
HEAD
sebagai gantinya<sha>
.Sekarang, Anda dapat mengirim tambalan ke pengelola repositori sumber, yang dapat menerapkannya:
Akhirnya ini akan terlihat sama seperti jika cabang sementara digabung oleh permintaan tarik, tetapi tanpa memiliki cabang tambahan di repositori-fork.
sumber
Berdasarkan jawaban @ kevin-hakanson, saya menulis skrip bash kecil ini untuk mempermudah proses ini. Ini akan menambahkan repo hulu jika belum ada (meminta Anda untuk URL) kemudian meminta kedua nama cabang baru untuk membuat dan tag / SHA dari komit untuk cherry pick ke cabang itu. Ini memeriksa apa cabang atau komit Anda saat ini kemudian menyimpan perubahan apa pun sehingga Anda dapat checkout cabang baru. Strategi penggabungan menjaga perubahan dari komit yang dipilih cherry. Setelah mendorong cabang baru ke
origin
(diasumsikan sebagai nama repo jarak jauh Anda), cabang atau komit Anda sebelumnya diperiksa kembali dan perubahan Anda sebelumnya muncul dari simpanan.(Ini telah bekerja untuk saya dalam beberapa tes sederhana, tapi saya bukan seorang programmer bash atau ahli git, jadi beri tahu saya jika ada kasus yang saya lewatkan yang dapat diotomatisasikan dengan lebih baik!)
sumber