Untuk memperbarui permintaan tarik
Untuk memperbarui permintaan tarik (titik # 1), satu-satunya hal yang perlu Anda lakukan adalah checkout dari cabang yang sama dengan permintaan tarik dan tekan lagi:
cd /my/fork
git checkout master
...
git commit -va -m "Correcting for PR comments"
git push
Opsional - Membersihkan riwayat komit
Anda mungkin diminta untuk meremas komit Anda bersama-sama sehingga riwayat repositori bersih, atau Anda sendiri ingin menghapus komit perantara yang mengalihkan perhatian dari "pesan" dalam permintaan tarikan Anda (poin # 2). Misalnya jika riwayat komit Anda terlihat seperti ini:
$ git remote add parent git@github.com:other-user/project.git
$ git fetch parent
$ git log --oneline parent/master..master
e4e32b8 add test case as per PR comments
eccaa56 code standard fixes as per PR comments
fb30112 correct typos and fatal error
58ae094 fixing problem
Merupakan ide yang bagus untuk menyatukan segala sesuatu sehingga mereka tampil sebagai satu komit:
$ git rebase -i parent/master
Ini akan meminta Anda untuk memilih cara menulis ulang riwayat permintaan tarik Anda, yang berikut akan ada di editor Anda:
pick 58ae094 fixing actual problem
pick fb30112 correct typos
pick eccaa56 code standard fixes
pick e4e32b8 add test case as per PR comments
Untuk komit apa pun yang Anda ingin menjadi bagian dari komit sebelumnya - ubah pilih ke squash:
pick 58ae094 fixing actual problem
squash fb30112 correct typos
squash eccaa56 code standard fixes
squash e4e32b8 add test case as per PR comments
Dan tutup editor Anda. Git kemudian akan menulis ulang riwayat dan meminta Anda untuk memberikan pesan komit untuk komit gabungan. Ubah sesuai dan riwayat komit Anda sekarang akan singkat:
$ git log --oneline parent/master..master
9de3202 fixing actual problem
Dorong itu ke garpu Anda:
$ git push -f
Counting objects: 19, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (5/5), done.
Writing objects: 100% (11/11), 978 bytes, done.
Total 11 (delta 9), reused 7 (delta 6)
To git@github.com:me/my-fork.git
f1238d0..9de3202 HEAD -> master
dan permintaan tarik Anda akan berisi satu komit, menggabungkan semua perubahan yang sebelumnya dibagi menjadi beberapa komit.
Mengubah sejarah pada repo publik adalah hal yang buruk
Menulis ulang sejarah dan menggunakan git push -f
pada cabang yang, berpotensi, telah dikloning oleh orang lain adalah hal yang buruk - itu menyebabkan sejarah repositori dan checkout itu berbeda.
Namun, mengubah sejarah fork Anda untuk memperbaiki perubahan yang Anda usulkan untuk diintegrasikan ke dalam repositori - adalah hal yang baik. Dengan demikian tidak ada reservasi yang menekan "kebisingan" dari permintaan tarik Anda.
Catatan tentang cabang
Pada contoh di atas, saya menunjukkan permintaan tarikan sebagai berasal dari master
cabang fork Anda, tidak ada yang salah dengan itu tetapi hal itu menciptakan batasan tertentu seperti, jika ini adalah teknik standar Anda, hanya mampu memiliki satu PR terbuka per repositori . Namun itu adalah ide yang lebih baik untuk membuat cabang untuk setiap perubahan yang ingin Anda usulkan:
$ git branch feature/new-widgets
$ git checkout feature/new-widgets
...
Hack hack hack
...
$ git push
# Now create PR from feature/new-widgets
master
adalah cabang juga, jadi secara teknis tidak masalah :)