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





remote-branch (23)


الأوامر

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

دفع أحدهم فرعًا يسمى 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 فوائد التتبع عن بعد.




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

git checkout test

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

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

git checkout -b test HEAD



تحديث

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

git fetch
git checkout test

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

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

الاجابه القديمة

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

لجلب فرع ، تحتاج ببساطة إلى:

git fetch origin

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

git branch -v -a

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

git checkout -b test origin/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 fetch && git checkout your-branch-name




يعطي الرجال والشباب الآخرين الحلول ، لكن ربما أستطيع أن أخبركم لماذا.

اختبار git الخروج الذي لا يفعل شيئا

Does nothing لا يساوي doesn't work ، لذلك أعتقد عندما تكتب "git checkout test" في الطرفية الخاصة بك واضغط على مفتاح enter ، لن تظهر أية رسالة ولا يحدث أي خطأ. هل انا على حق؟

إذا كان الجواب "نعم" ، يمكنني أن أخبرك السبب.

السبب هو وجود ملف (أو مجلد) يسمى "اختبار" في شجرة العمل الخاصة بك.

عندما يتم تحليل git checkout xxx ،

  1. يبدو Git على xxx كاسم فرع في البداية ، ولكن لا يوجد فرع يحمل اسم الاختبار.
  2. ثم يعتقد Git أن xxx هو مسار ، ولحسن الحظ (أو للأسف) ، يوجد ملف يحمل اسم الاختبار. لذا ، يعني git checkout xxx التخلص من أي تعديل في ملف xxx .
  3. إذا لم يكن هناك ملف مسمّى xxx ، فستحاول Git إنشاء xxx وفقًا لبعض القواعد. أحد القواعد هو إنشاء فرع يسمى xxx حالة وجود remotes/origin/xxx .



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

$ git branch test origin/test

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




أستخدم الأمر التالي:

git checkout --track origin/other_remote_branch



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

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

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

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



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

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

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

git fetch && git checkout test

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




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

$ git checkout -t remote_name/remote_branch

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

$ git remote add remote_name location_of_remote
$ git fetch remote_name

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




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

git fetch origin 'remote_branch':'local_branch_name'

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




ببساطة تشغيل 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 ، والذي يحدد جهاز تحكم عن بعد إلى الافتراضي عند حل مثل هذا الغموض.




إذا كان الفرع على شيء آخر غير البعيد 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 fetch remote
git checkout --track -b local_branch_name origin/branch_name

أو

git fetch
git checkout -b local_branch_name origin/branch_name



يرجى اتباع الأمر لإنشاء مجلد فارغ. أدخل ذلك واستخدم هذا الأمر:

saifurs-Mini:YO-iOS saifurrahman$ git clone your_project_url
Cloning into 'iPhoneV1'...
remote: Counting objects: 34230, done.
remote: Compressing objects: 100% (24028/24028), done.
remote: Total 34230 (delta 22212), reused 15340 (delta 9324)
Receiving objects: 100% (34230/34230), 202.53 MiB | 294.00 KiB/s, done.
Resolving deltas: 100% (22212/22212), done.
Checking connectivity... done.
saifurs-Mini:YO-iOS saifurrahman$ cd iPhoneV1/
saifurs-Mini:iPhoneV1 saifurrahman$ git checkout 1_4_0_content_discovery
Branch 1_4_0_content_discovery set up to track remote branch 1_4_0_content_discovery from origin.
Switched to a new branch '1_4_0_content_discovery'



سوف يسرد الأمر 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



أي من هذه الإجابات عملت بالنسبة لي. هذا عمل:

git checkout -b feature/branch remotes/origin/feature/branch




استعمال:

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

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




لاستنساخ مستودع 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 .

Documentation




إذا لاحظت أنك بحاجة إلى العودة مباشرة بعد الدمج ولم تقم بأي شيء آخر بعد محاولة الدمج ، يمكنك فقط إصدار هذا الأمر: git reset --hard [email protected]{1} .

بشكل أساسي ، سيشير sha الدمج الخاص بك إلى [email protected]{0} إذا لم يتم الالتزام بأي شيء آخر بعد الدمج ، وبالتالي سيكون [email protected]{1} هو النقطة السابقة قبل الدمج.





git git-checkout remote-branch