pengembangan-web-mp-pd.com

Cara menarik cabang jauh dari repo orang lain

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:

  1. Karena mereka bercabang proyek saya, kedua repo kami berbagi 'sejarah' yang sama
  2. Meskipun GitHub menunjukkan proyek mereka diambil dari tambang, repositori lokal saya tidak memiliki referensi ke proyek orang ini. Apakah saya perlu menambahkannya sebagai remote?
  3. Saya belum memiliki cabang bernama "foo" - Saya tidak tahu apakah saya harus membuat ini secara manual terlebih dahulu.
  4. Saya pasti ingin ini ditarik ke cabang terpisah dan bukan tuan saya.
211
Colin O'Dell
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
277
ralphtheninja

Tidak, Anda tidak perlu menambahkannya sebagai remote. Itu akan merepotkan dan menyusahkan setiap kali melakukannya.

Meraih komitmen mereka:

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.

Mendorongnya kembali kepada 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.

67
antak

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>
5
Peter

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
1
J Smith

GitHub memiliki opsi baru relatif terhadap jawaban sebelumnya, cukup salin/tempelkan baris perintah dari PR:

  1. Gulir ke bagian bawah PR untuk melihat tombol Merge atau Squash and merge
  2. Klik tautan di sebelah kanan: view command line instructions
  3. Tekan ikon Salin di sebelah kanan Langkah 1
  4. Rekatkan perintah di terminal Anda
0
Robert Monfera

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. 

0
Subfuzion