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



Answers

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

git checkout test

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

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

git checkout -b test HEAD
Question

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

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

لقد حاولت:

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

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

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




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

$ git checkout -t remote_name/remote_branch

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

$ git remote add remote_name location_of_remote
$ git fetch remote_name

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




يمكنك بدء تتبع جميع الفروع البعيدة باستخدام النص البرمجي 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 ;



إذا كان الفرع على شيء آخر غير البعيد 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 ، قم بما يلي:

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




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

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 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 فوائد التتبع عن بعد.




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

git remote update

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

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

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




أولاً ، عليك القيام بما يلي:

git fetch # إذا كنت لا تعرف اسم الفرع

git fetch origin branch_name

ثانيًا ، يمكنك التحقق من الفرع البعيد إلى موقعك المحلي من خلال:

git checkout -b branch_name origin/branch_name

-b سيقوم بإنشاء فرع جديد بالاسم المحدد من الفرع البعيد المحدد الخاص بك.




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

git checkout --track origin/other_remote_branch





Related