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




13 Answers

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

git checkout test

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

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

git checkout -b test HEAD
git git-checkout remote-branch

دفع أحدهم فرعًا يسمى test مع git push origin test إلى مستودع مشترك. أستطيع أن أرى الفرع مع git branch -r .

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

لقد حاولت:

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

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

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




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

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

$ git checkout -b remote_branch origin/remote_branch

fatal: git checkout: تحديث المسارات غير متوافق مع تبديل الفروع.
هل تنوي الخروج "المنشأ / 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 للفرع البعيد ، يمكننا ببساطة تشغيل git checkout remote_branch فوائد التتبع عن بعد.




هذا DWIM لجهاز بعيد لم يتم تسميته باسم ( documentation ):

$ git checkout -t remote_name/remote_branch

لإضافة جهاز تحكم جديد ، ستحتاج إلى إجراء ما يلي أولاً:

$ git remote add remote_name location_of_remote
$ git fetch remote_name

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




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

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

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

git fetch && git checkout test

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




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

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

أو

git fetch
git checkout -b local_branch_name origin/branch_name



الأوامر

git fetch --all
git checkout -b <ur_new_local_branch_name> origin/<Remote_Branch_Name>

تساوي

 git fetch --all

وثم

 git checkout -b fixes_for_dev origin/development

كلاهما سيخلق latest fixes_for_dev من development




إذا كان الفرع على شيء آخر غير البعيد origin أود القيام بما يلي:

$ git fetch
$ git checkout -b second/next upstream/next

سيؤدي هذا إلى الخروج من الفرع next على جهاز التحكم عن بعد في الفرع المحلي المسمى second/next . مما يعني أنه إذا كان لديك بالفعل فرع محلي اسمه التالي فلن يتعارض.

$ git branch -a
* second/next
  remotes/origin/next
  remotes/upstream/next



git branch -r يقول اسم الكائن غير صالح ، لأن اسم الفرع هذا ليس في قائمة فروع Git المحلية. قم بتحديث قائمة الفروع المحلية الخاصة بك من الأصل مع:

git remote update

ثم حاول سحب فرعك البعيد مرة أخرى.

هذا العمل بالنسبة لي.

أعتقد أن git fetch الشوائب في جميع الفروع البعيدة ، وهو ما لا يريد الملصق الأصلي.




سوف يسرد الأمر git remote show <origin name> جميع الفروع (بما في ذلك الفروع غير المتعقبة). بعد ذلك ، يمكنك العثور على اسم الفرع البعيد الذي تحتاج إلى جلبه.

مثال:

$ git remote show origin

استخدم هذه الخطوات لجلب الفروع البعيدة:

git fetch <origin name> <remote branch name>:<local branch name>
git checkout <local branch name > (local branch name should the name that you given fetching)

مثال:

$ git fetch origin test:test
$ git checkout test



يمكنك بدء تتبع جميع الفروع البعيدة باستخدام النص البرمجي Bash التالي:

#!/bin/bash
git fetch --all
for branch in `git branch -r --format="%(refname:short)" | sed 's/origin\///'`
  do git branch -f --track "$branch" "origin/$branch"
done

هنا أيضا نسخة من سطر واحد:

git fetch --all; for branch in `git branch -r --format="%(refname:short)" | sed 's/origin\///'`; do git branch --track "$branch" "origin/$branch" ; done ;



ببساطة تشغيل git checkout مع اسم الفرع البعيد. سيقوم Git تلقائيًا بإنشاء فرع محلي يتتبع جهاز التحكم عن بعد:

git fetch
git checkout test

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

git checkout --track origin/test

أو

git checkout -b test origin/test

في عام 2.19 ، تعلم Git تكوين checkout.defaultRemote ، والذي يحدد جهاز تحكم عن بعد إلى الافتراضي عند حل مثل هذا الغموض.




كنت عالقاً في موقف رؤية error: pathspec 'desired-branch' did not match any file(s) known to git. لجميع الاقتراحات أعلاه. أنا على إصدار GIT 1.8.3.1.

لذلك عمل هذا بالنسبة لي :

git fetch origin && git checkout branch_name 

التفسير وراء ذلك هو أنني لاحظت أنه عند جلب الفرع البعيد ، تم جلبه إلى FETCH_HEAD:

git fetch origin desired-branch
git checkout -b desired-branch FETCH_HEAD



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

على سبيل المثال ، حاولت الخروج من فرع بعيد يسمى #9773 لكن الأمر لم يعمل بشكل صحيح ، كما هو موضح في الصورة أدناه:

لسبب ما ، تساءلت عما إذا كان الرمز الحاد (#) يمكن أن يكون له علاقة به ، ثم حاولت أن أحيط اسم الفرع بعلامات اقتباس مفردة ، مثل '#9773' 9773 '#9773' rathen من مجرد #9773 9773 ، وأنها عملت بشكل جيد.

$ git checkout -b '#9773' origin/'#9773'



Related