Saya punya proyek yang di-host di GitHub yang telah dicabuti seseorang. Di cabang mereka, mereka telah membuat cabang baru "foo" dan membuat beberapa perubahan. Bagaimana cara menarik "foo" mereka ke cabang baru yang juga bernama "foo" di repo saya?
Saya mengerti mereka bisa mengirimkan permintaan tarik kepada saya, tetapi saya ingin memulai proses ini sendiri.
Asumsikan yang berikut:
git remote add coworker git://path/to/coworkers/repo.git
git fetch coworker
git checkout --track coworker/foo
Ini akan mengatur cabang lokal foo
, melacak cabang jauh coworker/foo
. Jadi, ketika rekan kerja Anda membuat beberapa perubahan, Anda dapat dengan mudah menariknya:
git checkout foo
git pull
Respon terhadap komentar:
Keren :) Dan jika saya ingin membuatnya sendiri perubahan ke cabang itu, harus saya buat cabang "bar" cabang kedua dari "foo" dan bekerja di sana alih-alih langsung di "foo" saya?
Anda tidak perlu membuat cabang baru, meskipun saya merekomendasikannya. Anda mungkin juga berkomitmen langsung ke foo
dan meminta rekan kerja Anda menarik cabang Anda. Tapi cabang itu sudah ada dan cabang Anda foo
perlu disetel sebagai cabang upstream untuknya:
git branch --set-upstream foo colin/foo
dengan asumsi colin
adalah repositori Anda (jarak jauh ke repositori rekan kerja Anda) yang didefinisikan dengan cara yang sama:
git remote add colin git://path/to/colins/repo.git
Tidak, Anda tidak perlu menambahkannya sebagai remote. Itu akan merepotkan dan menyusahkan setiap kali melakukannya.
git fetch [email protected]:theirusername/reponame.git theirbranch:ournameforbranch
Ini menciptakan cabang lokal bernama ournameforbranch
yang persis sama dengan apa yang theirbranch
bagi mereka. Sebagai contoh pertanyaan, argumen terakhir adalah foo:foo
.
Catatan bagian :ournameforbranch
dapat lebih jauh ditinggalkan jika memikirkan nama yang tidak bertentangan dengan salah satu cabang Anda sendiri merepotkan. Dalam hal ini, referensi yang disebut FETCH_HEAD
tersedia. Anda dapat git log FETCH_HEAD
untuk melihat komit mereka kemudian melakukan hal-hal seperti cherry-picked
untuk memilih komitmen mereka.
Seringkali, Anda ingin memperbaiki sesuatu milik mereka dan mendorongnya kembali. Itu mungkin juga:
git fetch [email protected]:theirusername/reponame.git theirbranch
git checkout FETCH_HEAD
# fix fix fix
git Push [email protected]:theirusername/reponame.git HEAD:theirbranch
Jika bekerja di keadaan terpisah membuat Anda khawatir, tentu saja buat cabang menggunakan :ournameforbranch
dan ganti FETCH_HEAD
dan HEAD
di atas dengan ournameforbranch
.
Jika jawaban antak:
git fetch [email protected]:<THEIR USERNAME>/<REPO>.git <THEIR BRANCH>:<OUR NAME FOR BRANCH>
memberi anda:
Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
Kemudian (mengikuti saran Przemek D) gunakan
git fetch https://github.com/<THEIR USERNAME>/<REPO>.git <THEIR BRANCH>:<OUR NAME FOR BRANCH>
Jika repo bercabang dilindungi sehingga Anda tidak dapat mendorong langsung ke dalamnya, dan tujuan Anda adalah membuat perubahan pada foo mereka, maka Anda perlu memasukkan foo cabang mereka ke dalam repo Anda seperti:
git remote add protected_repo https://github.com/theirusername/their_repo.git
git fetch protected_repo
git checkout --no-track protected_repo/foo
Sekarang Anda memiliki salinan foo lokal tanpa hulu yang terkait dengannya. Anda dapat melakukan perubahan padanya (atau tidak) dan kemudian Dorong foo Anda ke repo jarak jauh Anda sendiri.
git Push --set-upstream Origin foo
Sekarang foo ada di repo Anda di GitHub dan foo lokal Anda melacaknya. Jika mereka terus melakukan perubahan pada foo, Anda dapat mengambilnya dan bergabung dengan foo Anda.
git checkout foo
git fetch protected_repo
git merge protected_repo/foo
GitHub memiliki opsi baru relatif terhadap jawaban sebelumnya, cukup salin/tempelkan baris perintah dari PR:
Merge
atau Squash and merge
view command line instructions
Berikut ini adalah solusi yang bagus yang bekerja dengan GitHub untuk memeriksa cabang PR dari garpu pengguna lain. Anda perlu mengetahui ID permintaan tarik (yang ditampilkan GitHub bersama dengan judul PR).
Contoh:
Memperbaiki kode tidak aman Anda # 8
alice ingin menggabungkan 1 commit ke your_repo:master
dari her_repo:branch
git checkout -b <branch>
git pull Origin pull/8/head
Gantikan remote Anda jika berbeda dari Origin
.
Ganti 8
dengan ID permintaan tarik yang benar.