Bagaimana cara memperbarui permintaan tarik dari repo forked?

592

Jadi saya pertama-tama bercabang repo dan kemudian membuat komitmen untuk repo bercabang itu. Saya kemudian membuka permintaan tarik. Permintaan tarik mencantumkan semua perubahan yang saya inginkan.

Setelah meninjau permintaan penarikan saya, ada sejumlah perubahan yang diinginkan pemilik repo sebelum saya menerimanya. Saya telah membuat perubahan itu dalam garpu saya, sekarang bagaimana cara memperbarui permintaan tarik dengan perubahan itu (atau apakah ini bukan cara saya harus menanganinya)?

stevebot
sumber
7
@PaulDraper Saya tidak setuju, bahwa pengguna sudah tahu dan menyajikan berbagai metode untuk memperbarui permintaan tarik, dan bertanya mana yang terbaik. Saya di sisi lain, tidak tahu metode apa pun dan bertanya tentang keberadaan mereka. Seperti yang ditunjukkan oleh popularitas pertanyaan ini, inilah yang terjadi pada banyak pengguna lain.
stevebot
6
Saya pikir popularitasnya disebabkan oleh fakta bahwa (1) ini benar-benar bagus, pertanyaan umum dan (2) beberapa pengguna memilih di sini daripada di sana. Jika pada awalnya diidentifikasi sebagai duplikat, mereka akan menemukan pertanyaan lain yang sama dan menjawab pertanyaan mereka.
Paul Draper

Jawaban:

585

Anda telah melakukannya dengan benar. Permintaan tarik akan diperbarui secara otomatis. Prosesnya adalah:

  1. Buka permintaan tarik
  2. Komit perubahan berdasarkan umpan balik di repo lokal Anda
  3. Dorong ke cabang yang relevan dari garpu Anda

Permintaan tarik akan secara otomatis menambahkan komitmen baru di bagian bawah diskusi permintaan tarik (yaitu, sudah ada di sana, gulir ke bawah! )

shelhamer
sumber
73
bagus! Saya sedang memeriksa di mana-mana tetapi permintaan tarik yang sebenarnya. sihirnya, sihir hitam, aku tidak akan mempertanyakannya.
stevebot
57
Ini adalah alasan bagus untuk bekerja di cabang. Jika, misalnya, Anda selalu mendorong untuk menguasai, Anda dapat secara tidak sengaja menambah permintaan tarikan sebelumnya.
Brian Pan
3
Ini tampaknya tidak lagi menjadi masalah, meskipun dulu. Berikut adalah contoh permintaan tarik yang saya buat ( github.com/toopay/bootstrap-markdown/pull/167 ) dibandingkan dengan cabang itu sendiri ( github.com/mhuggins/bootstrap-markdown/commits/… ). Ingin tahu bagaimana melakukan ini lagi karena prosesnya tampaknya telah berubah.
Matt Huggins
1
GitHub sebenarnya memberi tahu Anda: "Tambahkan lebih banyak komit dengan mendorong ke cabang SolveWorldHunger di ChangeTheWorldProject."
flow2k
1
Hal yang sama di sini - saya tidak melihat perubahan dari repo bercabang di repositori utama. Tampak seperti bug GitHub
andrfas
78

Memperbarui permintaan tarikan di GitHub semudah melakukan perubahan yang diinginkan ke cabang yang ada (yang digunakan dengan permintaan tarikan), tetapi sering juga ingin memecah perubahan menjadi komit tunggal:

git checkout yourbranch
git rebase -i origin/master

# Edit command names accordingly
  pick   1fc6c95 My pull request
  squash 6b2481b Hack hack - will be discarded
  squash dd1475d Also discarded

git push -f origin yourbranch

... dan sekarang permintaan tarik hanya berisi satu komit.


Tautan terkait tentang rebasing:

jmu
sumber
2
Suara positif untuk menyebutkan rebase. Ini membantu mengurangi kebisingan dalam sejarah revisi.
stevebot
+11 (ya saya bermaksud rrrrepeating kunci. Menggunakan git rebase / pick / squash bekerja dengan baik.
javadba
11
Kelemahan dari pendekatan ini adalah Anda menghapus komitmen Anda sebelumnya. Itu berarti jika dalam permintaan tarik komentar dibuat mereka akan hilang, dan menghilang bersama dengan komit asli.
blowekamp
Di Bitbucket Anda dapat melihat komentar pada "versi sebelumnya" dari file dalam permintaan tarik. Meskipun akan menyenangkan untuk melihat sesuatu seperti di Gerrit di mana Anda menambal komitmen dan dapat melihat seluruh sejarah dengan komentar. Itu membuat untuk sejarah git rapi dan keterlacakan ketika Anda dapat kembali dan melihat diskusi lengkap tentang komitmen apa pun.
Cinta
36

Cukup dorong ke cabang yang menarik referensi permintaan. Selama permintaan tarik masih terbuka, itu harus diperbarui dengan setiap komitmen tambahan secara otomatis.

igorw
sumber
14

Saya melakukannya menggunakan langkah-langkah di bawah ini:

  1. git reset --hard <commit key of the pull request>
  2. Apakah perubahan kode saya ingin saya lakukan
  3. git add
  4. git commit --amend
  5. git push -f origin <name of the remote branch of pull request>
Vikasdeep Singh
sumber
1
Sangat bagus, saya lebih suka pendekatan ini! GitHub bahkan menyembunyikan (tetapi menyimpan) bagian kode yang ketinggalan jaman dan komentar terkait. Ada baiknya untuk diingat bahwa jika permintaan tarikan berisi beberapa komit dan yang memerlukan perbaikan tidak di ujung cabang, "git reset --hard" akan membuang semua perubahan yang dilakukan setelah ID yang ditentukan. Saya memiliki cadangan yang saya terapkan secara manual. Tidak terlalu nyaman jika ada lebih dari satu komit tambahan ...
Nagev
3

Jika menggunakan GitHub di Windows :

  1. Buat perubahan secara lokal.
  2. Buka GitHub, alihkan ke repositori lokal, klik dua kali repositori.
  3. Pindahkan cabang (dekat bagian atas jendela) ke cabang tempat Anda membuat permintaan tarik (yaitu cabang di sisi garpu perbandingan)
  4. Seharusnya melihat opsi untuk memasukkan komit komentar di sebelah kanan dan komit perubahan pada repo lokal Anda.
  5. Klik sinkronisasi di atas, yang antara lain, mendorong komit Anda dari lokal ke garpu jarak jauh Anda di GitHub.
  6. Permintaan tarikan akan diperbarui secara otomatis dengan komit tambahan. Ini karena permintaan yang ditarik mewakili perbedaan dengan cabang garpu Anda. Jika Anda pergi ke halaman permintaan tarik (halaman di mana Anda dan orang lain dapat mengomentari permintaan tarik Anda) maka tab Komit harus memiliki komit tambahan Anda.

Inilah sebabnya, sebelum Anda mulai membuat perubahan sendiri, Anda harus membuat cabang untuk setiap set perubahan yang Anda rencanakan untuk dimasukkan ke dalam permintaan tarik. Dengan begitu, setelah Anda membuat permintaan tarikan, Anda kemudian dapat membuat cabang lain dan melanjutkan pekerjaan pada beberapa tugas / fitur / perbaikan bug tanpa mempengaruhi permintaan tarikan sebelumnya.

AaronLS
sumber