it-swarm.asia

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

دفع شخص ما فرعًا يسمى test مع git Push Origin test إلى مستودع مشترك. أستطيع أن أرى الفرع مع git branch -r.

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

لقد حاولت:

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

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

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

6088
Juri Glass

تحديث

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

git fetch
git checkout test

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

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

أو الاختزال

git checkout -t <name of remote>/test

الجواب القديم

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

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

git fetch Origin

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

git branch -v -a

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

git checkout -b test Origin/test
8411
hallski

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

git checkout test

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


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

git checkout -b test HEAD
1190
Jakub Narębski

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

$ git branch test Origin/test

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

528
ndim

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

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

$ git checkout -b remote_branch Origin/remote_branch

fatal: 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 وسنكتسب فوائد التتبع عن بُعد.

439
Corey Ballou

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

git fetch Origin 'remote_branch':'local_branch_name'

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

226
Sahil kalra

هذه الإرادة DWIM لجهاز تحكم عن بعد غير مسمى الأصل ( وثائق ):

$ git checkout -t remote_name/remote_branch

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

$ git remote add remote_name location_of_remote
$ git fetch remote_name

الأول يحكي جيت البعيد ، والثاني يحصل على ارتكاب.

105
tacaswell

استعمال:

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

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

100
matanster

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

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

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

git fetch && git checkout test

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

 git fetch

78
Alireza

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

كابل بيانات

52
Madhan Ayyasamy

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

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

أو

git fetch
git checkout -b local_branch_name Origin/branch_name
34
uma

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

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

git fetch Origin branch_name

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

git checkout -b branch_name Origin/branch_name

-b سينشئ فرعًا جديدًا بالاسم المحدد من الفرع البعيد الذي اخترته.

28
Silent Spectator

الأوامر

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

27
sreekumar

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

git checkout --track Origin/other_remote_branch
25
priyankvex

إذا كان الفرع موجودًا في شيء آخر غير جهاز التحكم عن بعد Origin ، فأود القيام بما يلي:

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

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

$ git branch -a
* second/next
  remotes/Origin/next
  remotes/upstream/next
23
Kris

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

git remote update

ثم حاول التحقق من الفرع البعيد مرة أخرى.

هذا عملت لي.

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

16
webdevguy

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

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

15
brianyang

git fetch && git checkout your-branch-name

15
Inder Kumar Rathore

ببساطة قم بتشغيل git checkout مع اسم الفرع البعيد. Git will ينشئ تلقائيًا فرعًا محليًا يتتبع الفرع البعيد:

git fetch
git checkout test

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

git checkout --track Origin/test

أو

git checkout -b test Origin/test

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

13
Eugene Yarmash

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

هذا عملت لي :

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

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

$ git fetch Origin desired-branch
From github.com:MYTEAM/my-repo
    * branch            desired-branch -> FETCH_HEAD
13
alisa

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

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

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

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

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

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

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

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

للحصول على فروع تم إنشاؤها حديثًا

git fetch

للتبديل إلى فرع آخر

git checkout BranchName
7
Hasib Kamal

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

جلب من جهاز التحكم عن بعد والخروج من الفرع.

git fetch <remote_name> && git checkout <branch_name> 

على سبيل المثال:

git fetch Origin && git checkout feature/XYZ-1234-Add-alerts

6
Pranav

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

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

 enter image description here

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

$ git checkout -b '#9773' Origin/'#9773'
1
Ulysses Alves

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

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'
1
Mehedi Hasan