كيف يمكنني التحقق من فرع Git البعيد؟

سئل على ٢٣ نوفمبر ٢٠٠٩  ·  تمت مشاهدة 5.5M مرة  ·  مصدر

Juri Glass picture
في ٢٣ نوفمبر ٢٠٠٩

دفع شخص ما فرعًا يسمى test بـ git push origin test إلى مستودع مشترك. يمكنني رؤية الفرع بـ git branch -r .

الآن أحاول التحقق من الفرع البعيد test .

لقد حاولت:

  • git checkout test الذي لا يفعل شيئًا

  • git checkout origin/test يعطي * (no branch) . وهو أمر محير. كيف يمكنني أن أكون في "لا يوجد فرع"؟

كيف يمكنني التحقق من فرع Git البعيد؟

الإجابات

hallski picture
في ٢٣ نوفمبر ٢٠٠٩
9544

مع جهاز تحكم واحد

إجابة جاكوب تتحسن في الواقع من هذا. مع إصدارات Git ≥ 1.6.6 ، مع جهاز تحكم واحد فقط ، يمكنك القيام بما يلي:

git fetch
git checkout test

كما يشير المستخدم masukomi في تعليق ، لن يعمل git checkout test في git الحديث إذا كان لديك عدة أجهزة تحكم عن بعد. في هذه الحالة استخدم

git checkout -b test <name of remote>/test

أو الاختزال

git checkout -t <name of remote>/test

مع> 1 جهاز تحكم عن بعد

قبل أن تتمكن من بدء العمل محليًا على فرع بعيد ، تحتاج إلى جلبه كما هو موضح في الإجابات أدناه.

لجلب فرع ، ما عليك سوى:

git fetch origin

سيؤدي هذا إلى جلب جميع الفروع البعيدة لك. يمكنك الاطلاع على الفروع المتاحة للدفع مع:

git branch -v -a

مع وجود الفروع البعيدة في متناول اليد ، تحتاج الآن إلى التحقق من الفرع الذي تهتم به ، مما يمنحك نسخة عمل محلية:

git checkout -b test origin/test
Jakub Narębski picture
في ٢٤ نوفمبر ٢٠٠٩
1302

Sidenote: مع Git الحديث (> = 1.6.6 ) ، يمكنك استخدام ملفات

git checkout test

(لاحظ أنه "اختبار" وليس "أصل / اختبار") لإجراء DWIM السحري وإنشاء "اختبار" فرع محلي لك ، والذي سيكون فرع التتبع عن بعد "أصل / اختبار".


الناتج * (no branch) في git branch يعني أنك على فرع غير مسمى ، في ما يسمى بحالة "رأس منفصل" (يشير HEAD مباشرة إلى الالتزام ، وليس مرجعًا رمزيًا لبعض الفروع المحلية). إذا قمت ببعض الالتزامات على هذا الفرع غير المسمى ، فيمكنك دائمًا إنشاء فرع محلي من الالتزام الحالي:

git checkout -b test HEAD

** تحرير (محرر وليس مؤلف) **

لقد وجدت تعليقًا مدفونًا أدناه يبدو أنه يُحدث هذه الإجابة:

Dennis: git checkout <non-branch> ، على سبيل المثال git checkout origin/test يؤدي إلى فصل رأس / فرع غير مسمى ، بينما ينتج git checkout test أو git checkout -b test origin/test في الفرع المحلي test (مع جهاز التحكم عن بعد تتبع فرع origin/test كما المنبع) - ياكوب Narębski 9 يناير '14 في 08:17

التركيز على git checkout origin/test

ndim picture
في ٢٣ نوفمبر ٢٠٠٩
580

في هذه الحالة ، ربما تريد إنشاء فرع محلي test يتتبع الفرع البعيد test :

$ git branch test origin/test

في الإصدارات السابقة من git ، كنت بحاجة إلى خيار --track صريح ، ولكن هذا هو الخيار الافتراضي الآن عندما تتفرع من فرع بعيد.

Corey Ballou picture
في ٧ ديسمبر ٢٠١٢
484

الإجابة المقبولة لا تعمل من أجلك؟

في حين أن الإجابة الأولى والمحددة صحيحة من الناحية الفنية ، هناك احتمال أنك لم تسترد جميع الكائنات والمراجع من المستودع البعيد. إذا كانت هذه هي الحالة ، فستتلقى الخطأ التالي:

$ git checkout -b remote_branch origin/remote_branch

فادح: git checkout: تحديث المسارات غير متوافق مع تبديل الفروع.
هل كنت تنوي الخروج من "origin / remote_branch" التي لا يمكن حلها كالتزام؟

المحلول

إذا تلقيت هذه الرسالة ، يجب عليك أولاً إجراء git fetch origin حيث origin هو اسم المستودع البعيد قبل تشغيل git checkout remote_branch . إليك مثال كامل مع الردود:

$ git fetch origin
remote: Counting objects: 140, done.
remote: Compressing objects: 100% (30/30), done.
remote: Total 69 (delta 36), reused 66 (delta 33)
Unpacking objects: 100% (69/69), done.
From https://github.com/githubuser/repo-name
   e6ef1e0..5029161  develop    -> origin/develop
 * [new branch]      demo       -> origin/demo
   d80f8d7..359eab0  master     -> origin/master

$ git checkout demo
Branch demo set up to track remote branch demo from origin.
Switched to a new branch 'demo'

كما ترى ، أدى تشغيل git fetch origin استرداد أي فروع بعيدة لم نقم بإعدادها بعد لتتبعها على أجهزتنا المحلية. من هناك ، نظرًا لأن لدينا الآن مرجعًا للفرع البعيد ، يمكننا ببساطة تشغيل git checkout remote_branch وسنكتسب فوائد التتبع عن بُعد.

Sahil kalra picture
في ١٨ أكتوبر ٢٠١٣
275

لقد جربت الحل أعلاه ، لكنه لم ينجح. جرب هذا ، إنه يعمل:

git fetch origin 'remote_branch':'local_branch_name'

سيؤدي هذا إلى جلب الفرع البعيد وإنشاء فرع محلي جديد (إذا لم يكن موجودًا بالفعل) باسم local_branch_name وتتبع الفرع البعيد فيه.

tacaswell picture
في ٢٨ أبريل ٢٠١٢
111

سيؤدي هذا إلى DWIM لأصل بعيد غير مسمى ( وثائق ):

$ git checkout -t remote_name/remote_branch

لإضافة جهاز تحكم عن بعد جديد ، ستحتاج إلى القيام بما يلي أولاً:

$ git remote add remote_name location_of_remote
$ git fetch remote_name

الأول يخبر Git أن جهاز التحكم عن بعد موجود ، والثاني يحصل على الالتزامات.

matanster picture
في ٢١ فبراير ٢٠١٦
107

استعمال:

git checkout -b <BRANCH-NAME> <REMOTE-NAME>/<BRANCH-NAME>

الإجابات الأخرى لا تعمل مع Git الحديثة في حالتي الحميدة. قد تحتاج إلى السحب أولاً إذا كان الفرع البعيد جديدًا ، لكنني لم أتحقق من هذه الحالة.

Alireza picture
في ٥ سبتمبر ٢٠١٧
91

حسنًا ، الإجابة سهلة ... أنت ترى الفرع بشكل أساسي ، لكن ليس لديك نسخة محلية بعد! ...

تحتاج إلى fetch الفرع ...

يمكنك ببساطة الجلب ثم الخروج إلى الفرع ، استخدم أمر سطر واحد أدناه للقيام بذلك:

git fetch && git checkout test

لقد أنشأت أيضًا الصورة أدناه لكي تشارك الاختلافات ، وانظر إلى كيفية عمل fetch وأيضًا كيف يختلف عن pull :

git fetch

Madhan Ayyasamy picture
في ٢١ يناير ٢٠١٣
59

لاستنساخ مستودع Git ، قم بما يلي:

git clone <either ssh url /http url>

يقوم الأمر أعلاه بفحص جميع الفروع ، ولكن سيتم فقط تهيئة الفرع master . إذا كنت ترغب في التحقق من الفروع الأخرى ، قم بما يلي:

git checkout -t origin/future_branch (for example)

يتحقق هذا الأمر من الفرع البعيد ، وسيكون اسم الفرع المحلي الخاص بك هو نفسه الفرع البعيد.

إذا كنت تريد تجاوز اسم الفرع المحلي الخاص بك عند الخروج:

git checkout -t -b enhancement origin/future_branch

الآن اسم فرعك المحلي هو enhancement ، لكن اسم فرعك البعيد هو future_branch .

uma picture
في ٢٤ مارس ٢٠١٤
40

يمكنك المحاولة

git fetch remote
git checkout --track -b local_branch_name origin/branch_name

أو

git fetch
git checkout -b local_branch_name origin/branch_name