Saya membuka permintaan tarik ke rel repo di github dengan menggunakan tombol Fork & Edit file ini .
Sekarang, Setelah mendapatkan umpan balik tentang PR saya, saya ingin menambahkan beberapa komitmen lagi. jadi inilah yang saya akhiri dengan melakukan
$ git clone [email protected]:gaurish/rails.git #my forked repo
$ git rebase -i 785a2e5 #commit hash of my commit using which PR was opened
$ git checkout patch-3 #branch name I had to send my commits under to be shown in that PR
$ git commit -am "Changes done as per feedback"
$ git push origin patch-3
Ini bekerja dengan baik tetapi tampaknya alur kerja yang cukup kompleks. Mungkin saya salah, ada yang salah di sini?
pertanyaan saya adalah: Apakah saya melakukan ini dengan cara yang benar? jika tidak, lalu apa cara yang tepat untuk melakukan ini?
git
github
pull-request
CuriousMind
sumber
sumber
Jawaban:
Karena Anda menggunakan alat GitHub dan hanya mengubah satu file, Anda juga dapat menelusuri file di GitHub, pilih cabang yang tepat dari sudut kiri atas di bawah menu tarik-turun "pohon:" (
patch-3
dalam kasus Anda), dan sekarang pilih "Edit file ini". Sekarang perubahan Anda akan dilakukan ke cabang ini dan akan muncul di permintaan penarikan Andasumber
Saya baru saja membuat blog tentang topik ini:
Bagaimana kami terus memperbarui cabang fitur ini? Menggabungkan komit upstream terbaru itu mudah, tetapi Anda ingin menghindari pembuatan komit penggabungan, karena itu tidak akan dihargai ketika didorong ke hulu: Anda kemudian secara efektif melakukan kembali perubahan upstream, dan komit upstream tersebut akan mendapatkan hash baru ( saat mereka mendapatkan orang tua baru). Ini sangat penting, karena komit yang digabungkan tersebut akan tercermin dalam permintaan penarikan GitHub Anda ketika Anda mendorong pembaruan tersebut ke cabang fitur GitHub pribadi Anda (bahkan jika Anda melakukannya setelah Anda mengeluarkan permintaan penarikan.)
Itulah mengapa kita perlu melakukan rebase daripada menggabungkan:
Baik opsi rebase dan perintah rebase ke git akan menjaga struktur Anda tetap bersih, dan menghindari menggabungkan komit. Namun perlu diingat bahwa itu adalah komit pertama Anda (dengan mana Anda mengeluarkan permintaan tarik pertama) yang sedang di-rebased, dan yang sekarang memiliki hash komit baru, yang berbeda dari hash asli yang masih ada di cabang repo github jarak jauh Anda .
Sekarang, mendorong pembaruan tersebut ke cabang fitur GitHub pribadi Anda akan gagal di sini, karena kedua cabang berbeda: pohon cabang lokal dan pohon cabang jarak jauh “tidak sinkron”, karena hash komit yang berbeda tersebut. Git akan memberi tahu Anda untuk pertama kali
git pull --rebase
, lalu mendorong lagi, tetapi ini tidak akan menjadi dorongan maju cepat yang sederhana, karena riwayat Anda telah ditulis ulang. Jangan lakukan itu!Masalahnya di sini adalah Anda akan kembali mengambil komit pertama yang diubah seperti aslinya, dan itu akan digabungkan di atas cabang lokal Anda. Karena status tidak sinkron, tarikan ini tidak berlaku dengan baik. Anda akan mendapatkan riwayat rusak di mana komit Anda muncul dua kali. Saat Anda memasukkan semua ini ke cabang fitur GitHub, perubahan tersebut akan tercermin pada permintaan penarikan asli, yang akan menjadi sangat, sangat buruk.
AFAIK, sebenarnya tidak ada solusi yang benar-benar bersih untuk ini. Solusi terbaik yang saya temukan adalah memaksa mendorong cabang lokal Anda ke cabang GitHub Anda (sebenarnya memaksa pembaruan non-percepat-maju):
Sesuai git-push (1):
Jadi jangan ditarik, paksa saja dorong seperti ini:
atau:
Ini sebenarnya akan menimpa cabang jarak jauh Anda, dengan semua yang ada di cabang lokal Anda. Komit yang berada di aliran jarak jauh (dan menyebabkan kegagalan) akan tetap ada, tetapi akan menjuntai, yang akhirnya akan dihapus oleh git-gc (1). Bukan masalah besar.
Seperti yang saya katakan, AFAICS adalah solusi terbersih. Kelemahan dari ini, adalah bahwa PR Anda akan diperbarui dengan komitmen terbaru tersebut, yang akan mendapatkan tanggal kemudian, dan dapat muncul tidak sinkron dalam riwayat komentar PR. Bukan masalah besar, tetapi berpotensi membingungkan.
sumber
Anda juga dapat membuat permintaan tarik baru yang terikat ke,
master
bukan yang spesifikabc1234
revisi .Dengan cara itu, setiap commit / push baru ke repositori Anda akan ditambahkan ke permintaan pull.
sumber
Ya - Anda melakukan lebih banyak pekerjaan daripada yang Anda butuhkan. Buat saja komit tambahan lalu paksa dorong. Anda akan melihat komit asli serta yang baru didorong saat Anda menyegarkan github di browser Anda.
sumber