جدول المحتويات
مقدمة1. تكوين بوابة....
1.1 ملفات التكوين....
1.2 الإعدادات الافتراضية....
1.3 الأسماء المستعارة2. أساسيات بوابة....
2.1 إنشاء مستودع....
2.2 حالة الملف....
2.3 العمل مع الفهرس....
2.4 العمل مع ارتكاب....
2.5 مشاهدة التاريخ....
2.6 العمل مع مستودع بعيد3. المتفرعة في بوابة....
3.1 العمليات الأساسية....
3.2 دمج الفروع....
3.3 ريري4. المؤشرات في بوابة....
4.1 تحريك المؤشرات5. أوصت القراءةمقدمة
جيت هو نظام التحكم في النسخة الموزعة الأكثر شعبية.
[1] [2]الغرض الرئيسي من Git هو حفظ لقطات لتحسين ظروف مشروعك على التوالي (Pro git، 2019).
هذه المقالة مخصصة لأولئك الذين لديهم على الأقل معرفة ومهارة أساسية في العمل مع بوابة والذين يرغبون في توسيع معارفهم
يتم النظر هنا فقط في الجوانب التقنية للبوابة ، للحصول على غمر أكثر تفصيلًا في فلسفة البوابة وتنفيذها الداخلي ، أنصحك بقراءة العديد من الكتب المفيدة (انظر
القراءة الموصى بها ).
1. تكوين بوابة
قبل أن تبدأ العمل مع بوابة ، تحتاج إلى تكوينه لنفسك!
1.1 ملفات التكوين
- / etc / gitconfig - الإعدادات العامة لجميع المستخدمين والمستودعات
- ~ / .gitconfig أو ~ / .config / git / config - إعدادات مستخدم محددة
- .git / config - إعدادات لمستودع معين
هناك فريق خاص
git config [<>]
الذي سيسمح لك بتغيير السلوك القياسي لـ git ، إذا لزم الأمر ، ولكن يمكنك تحرير ملفات التكوين يدويًا (أعتقد ذلك بشكل أسرع).
وفقًا للمعلمة التي تمر بها إلى الأمر git config (- النظام ، - العالمي ، - المحلي) ، سيتم كتابة الإعدادات على أحد هذه الملفات. كل من هذه "المستويات" (النظام ، العالمي ، المحلي) تعيد تعريف قيم المستوى السابق!
لمعرفة أي الملفات يتم تثبيتها ، استخدم git config --list - show-Origin.
تجاهل الملفاتفي git ، يمكنك تحديد الملفات التي ستدخل في أي التزام ، ولكن ربما ترغب في ألا تكون ملفات معينة في الفهرس والالتزام ، ولا تظهر حتى في القائمة التي لم يتم تعقبها. للقيام بذلك ، يمكنك إنشاء ملف خاص (.gitignore) في مستودعك وكتابة قالب الملفات التي تم تجاهلها هناك. إذا كنت لا ترغب في إنشاء مثل هذا الملف في كل مستودع ، فيمكنك تعريفه على المستوى العالمي باستخدام core.excludesfile (انظر
الإعدادات المفيدة ). يمكنك أيضًا تنزيل
ملف .gitignore النهائي للغة البرمجة التي تعمل عليها.
لتخصيص .gitignore ، استخدم
تعبيرات bash العادية .
1.2 الإعدادات الافتراضية
هناك مجموعة من إعدادات git لكل من الخادم والعميل ، سيتم النظر في إعدادات العميل الأساسية فقط هنا.
استعمال
git config name value
حيث name هو اسم المعلمة ، والقيمة هي قيمتها من أجل ضبط الإعدادات.
مثال:
git config --global core.editor nano
سيتم تثبيت المحرر الافتراضي نانو.
يمكنك عرض قيمة المعلمة الحالية باستخدام git config --get [name] حيث يكون name هو المعلمة التي ترغب في الحصول على قيمتها.
إعدادات مفيدة:- اسم المستخدم - الاسم الذي سيتم استخدامه عند إنشاء الالتزام
- user.email - البريد الإلكتروني لاستخدامه عند إنشاء الالتزام
- core.excludesfile - ملف سيتم استخدام قالبه لتجاهل ملفات معينة على مستوى العالم
- core.editor - المحرر الافتراضي
- conf.template - الملف الذي سيتم استخدام محتوياته لرسالة الالتزام الافتراضية (انظر التعامل مع الالتزامات ).
- help.autocorrect - عند التعيين إلى 1 ، ستنفذ git الأوامر المكتوبة بشكل غير صحيح.
- credential.helper [الوضع] - لتعيين وضع تخزين بيانات الاعتماد. [ذاكرة التخزين المؤقت] - يتم حفظ بيانات الاعتماد لفترة معينة ، ولا يتم حفظ كلمات المرور (- المهلة [ثواني] عدد الثواني التي يتم بعدها حذف البيانات ، ويكون الإعداد الافتراضي هو 15 دقيقة). [store] - يتم تخزين بيانات الاعتماد لفترة غير محدودة في المربع الواضح (- يشير الملف [file] إلى مسار تخزين البيانات ، بشكل افتراضي ~ / .git-بيانات الاعتماد).
1.3 الأسماء المستعارة
إذا كنت لا ترغب في طباعة كل أمر لـ Git بالكامل ، فيمكنك تكوين الأسماء المستعارة بسهولة. لإنشاء اسم مستعار استخدم:
git config alias.SHORT_NAME COMMAND
حيث SHORT_NAME هو الاسم المختصر ، وأمر سطر الأوامر (الأوامر) التي يجب اختصارها. مثال:
git config --global alias.last 'log -1 HEAD'
بعد تنفيذ هذا الأمر ، يمكنك عرض معلومات حول الالتزام الأخير على الفرع الحالي عن طريق تشغيل git last.
أنصحك باستخدام الاختصارات التالية (يمكنك أيضًا تحديد أيٍّ من الاختصارات الخاصة بك):
- ش = الحالة
- الفصل = الخروج
- ر = فرع
- ملغ = دمج
- سم = الالتزام
- reb = rebase
- lg = "git log --pretty = format: '٪ h -٪ ar:٪ s'"
لعرض إعدادات التكوين ، استخدم: git config - list.
2. أساسيات بوابة
يتم سرد المعلمات إلزامية ومفيدة فقط (في رأيي) هنا ، لأن إدراج الكل غير مناسب. للقيام بذلك ، استخدم git command -help أو --help ، حيث command هو اسم الأمر للمساعدة التي تريد تلقيها.
2.1 إنشاء مستودع
- git init [<options>] - تنشئ مستودع git ودليل .git في الدليل الحالي (أو في الدليل المحدد بعد --separate-git-dir <git_root> ، وفي هذه الحالة سيكون دليل .git في مكان آخر) ؛
- git clone [<options>] [-] <repository> [<folder>] [-o، - origin <name>] [-b، --branch <branch>] [--single-branch] [- -لا- علامات] [- منفصلة - git-dir <git_root>] [-c، --config <key = value>] - نسخ مستودعات مع أصل الاسم (أو الذي تحدده -o <name> ) ، على الفرع الذي يشير إليه HEAD (أو الذي تحدده - ب <الامتياز>). يمكنك أيضًا استنساخ فرع HEAD الضروري فقط (أو الفرع المحدد في -b <branch>) من خلال تحديد -single-branch. بشكل افتراضي ، يتم استنساخ جميع العلامات ، ولكن عن طريق تحديد - لا يمكن استنساخها. بعد تنفيذ الأمر ، يتم إنشاء دليل .git في الدليل الحالي (أو في الدليل المحدد بعد -separate-git-dir <git_root> ، وفي هذه الحالة سيتم تحديد موقع دليل .git في مكان آخر) ؛
2.2 ملف الحالة
لعرض حالة الملفات في مستودعك ، استخدم:
git status [<>]
يمكن أن يوضح لك هذا الأمر: ما هو الفرع الذي تعمل عليه حاليًا وحالة جميع الملفات. لا توجد خيارات مطلوبة ، يمكن التمييز بين الخيارات فقط والخيارات المفيدة ، والتي ستظهر فكرة موجزة عن حالات الملفات.
دورة حياة الملف 
كما ترون في الصورة ، يمكن إلغاء تعقب الملفات وتعقبها. يمكن أن تكون الملفات المراقبة في 3 حالات: غير معدلة (غير معدلة) ، معدلة (معدلة) ، معدة (مخزنة).
إذا قمت بإضافة (باستخدام git add) ملف "غير مراقب" ، فسيذهب إلى حالة "Prepared".
إذا قمت بتغيير الملف إلى حالة "لم يتغير" ، فحينئذٍ ينتقل إلى حالة "تم التغيير". إذا قمت بحفظ الملف المعدل (أي في حالة "التعديل") ، فسيتم وضعه في حالة "الإعداد". إذا كنت ترتكب ملفًا (أي في حالة "Prepared") ، فستنتقل إلى حالة "Not Changed".
إذا كانت إصدارات الملف في HEAD ودليل العمل مختلفين ، فسيكون الملف في الحالات "المعدلة" ، وإلا (إذا كان الإصدار الموجود في HEAD ودليل العمل هو نفسه ") ، فسيكون الملف في حالات" غير متغيرة ".
إذا كان إصدار الملف في HEAD يختلف عن دليل العمل ، ولكنه لا يختلف عن الإصدار الموجود في الفهرس ، فسيكون الملف في حالة "Prepared".
يمكن تمثيل هذه الدورة على النحو التالي:
غير معدل -> تعديل -> نظم -> غير معدل
هذا هو ، يمكنك تعديل الملف ، وحفظه في الفهرس وجعل الالتزام ، ثم مرة أخرى.
2.3 العمل مع الفهرس
أتمنى أن تفهم كيف تبدو دورة حياة مستودع البوابة. لنرى الآن كيف يمكنك إدارة الفهرس والملفات في مستودع git.
الفهرس هو مكان وسيط بين الالتزام الأخير والتالي. يمكنك إضافة أو إزالة الملفات من الفهرس. عندما تلتزم ، تحصل على بيانات من الفهرس ، وليس من مساحة العمل.
لعرض الفهرس ، استخدم حالة git.
لإضافة ملفات لاستخدام الفهرس
git add [<>]
git مفيدة إضافة خيارات الأمر:
- -f ، - فرض - إضافة ملفات تجاهلها كذلك
- يو ، - تحديث - تحديث الملفات المتعقبة
لإزالة الملفات من الفهرس ، يمكنك استخدام 2 git reset و git استعادة الأوامر.
بوابة استعادة - استعادة ملفات شجرة العمل.
git-reset - إعادة تعيين HEAD الحالي إلى الحالة المحددة.
في الواقع ، يمكنك تحقيق نفس الشيء مع كلا الأمرين.
لإزالة بعض الملفات من الفهرس ، استخدم:
git restore --staged <file>
بهذه الطريقة ستقوم باستعادة الفهرس الخاص بك (أو بالأحرى ، حذف ملفات محددة من الفهرس) ، كما لو أن git add لم يتم تنفيذها لها منذ الالتزام الأخير. باستخدام هذا الأمر ، يمكنك استعادة دليل العمل بحيث يبدو أنه لم يتم إجراء أية تغييرات بعد الالتزام. لكن هذا الأمر له سلوك غريب بعض الشيء - إذا أضفت نسخة جديدة من الملف إلى الفهرس ، فلن يمكنك تغيير دليل العمل الخاص بك حتى يختلف الفهرس عن HEAD. لذلك ، تحتاج أولاً إلى استعادة الفهرس ثم دليل العمل فقط. لسوء الحظ ، لا يمكن القيام بذلك بأمر واحد ، لأنه عند تمرير كلتا الوسيطتين (git استعادة -SW) لا يحدث شيء. ونفس الشيء ، عندما يتم تمرير -W ، لن يحدث شيء إذا كان الملف في الفهرس والرأس مختلفًا. ربما قاموا بذلك من أجل الحماية بحيث لا تقوم بتغيير دليل العمل الخاص بك عن طريق الخطأ. ولكن في هذه الحالة ، لماذا يتم تمرير الوسيطة -W افتراضيًا؟ بشكل عام ، لا أفهم سبب القيام بذلك ولماذا تمت إضافة هذا الأمر على الإطلاق. بالنسبة لي ، إعادة تعيين تتواءم مع هذه المهمة أفضل بكثير ، ولها أيضا وظيفة أكثر ثراء لأنه يمكن نقل الفهرس ودليل العمل ليس فقط إلى الالتزام الأخير ، ولكن أيضا إلى أي دولة أخرى.
لكن المطورين أنفسهم يوصون باستخدام git restore -S لإعادة ضبط الفهرس. بدلا من بوابة إعادة تعيين HEAD.
باستخدام حالة git ، يمكنك معرفة الملفات التي تغيرت ، ولكن إذا كنت تريد أيضًا معرفة ما الذي تغير بالضبط في الملفات ، استخدم الأمر:
git diff [<options>]
وبالتالي ، عند تنفيذ الأمر بدون وسيطات ، يمكنك مقارنة الفهرس بدليل العمل. إذا كنت قد أضفت بالفعل ملفات إلى الفهرس ، فاستخدم git diff - مؤقتًا لرؤية الاختلافات بين الالتزام الأخير (أو الالتزام الذي تحدده) ودليل العمل. يمكنك أيضًا رؤية الاختلافات بين إثنين أو فرع من خلال تمريرها كوسيطة. مثال: git diff 00656c 3d5119 يوضح الاختلافات بين الالتزام 00656c و 3d5119.
2.4 العمل مع ارتكاب
الآن بعد أن أصبح فهرسك في الحالة الصحيحة ، فقد حان الوقت لارتكاب تغييراتك. تذكر أن جميع الملفات التي لم تقم بتشغيل git add لها بعد التحرير ليست مدرجة في هذا الالتزام. في الواقع ، سيكون هناك ملفات في ذلك ، ولكن فقط نسختهم القديمة (إن وجدت).
لتنفيذ التغييرات ، استخدم:
git commit [<>]
خيارات مفيدة لأمر الالتزام git:
- -F ، - ملف [ملف] - اكتب رسالة التزام من الملف المحدد
- - المؤلف [المؤلف] - استبدال صاحب البلاغ
- - تاريخ [تاريخ] - تغيير تاريخ الالتزام
- م ، - موضوع [رسالة] - رسالة الالتزام
- -a ، --all - الالتزام بجميع التغييرات على الملفات
- -i ، - تضمين [files ...] - أضف الملفات المحددة إلى الفهرس للالتزام التالي
- -o ، - فقط [الملفات ...] - ارتكب الملفات المحددة فقط
- - تعديل - استبدال الالتزام السابق
يمكنك تحديد رسالة الالتزام الافتراضية باستخدام conf.template. هذا التوجيه في ملف التكوين مسؤول عن الملف الذي سيتم استخدام محتوياته للالتزام الافتراضي. على سبيل المثال: git config --global perpet.template ~ / .gitmessage.txt.
يمكنك أيضًا تغيير أو حذف أو دمج أي التزام.
كما قد تكون لاحظت ، يمكنك الكتابة بسرعة على آخر التزام باستخدام بوابة الالتزام - تعديل.
لتغيير الالتزام في قصتك ، استخدم
git rebase -i <commit>
حيث الالتزام هو أعلى التزام في سلسلتك ترغب في تغيير أي شيء منه.
بعد تنفيذ git rebase -i في القائمة التفاعلية ، حدد ما تريد القيام به.
- اختر <الالتزام> = استخدام الالتزام
- أعد صياغة <commit> = استخدم الالتزام ، ولكن غيّر رسالة الالتزام
- تحرير <الالتزام> = استخدام الالتزام ، ولكن التوقف عن الإصلاح
- الاسكواش <commit> = استخدم الالتزام ، ولكن دمج مع الالتزام السابق
- إصلاح <commit> = كـ "سكواش" ، لكن تخطي رسالة الالتزام
- exec <command> = تنفيذ الأمر (باقي السطر) باستخدام shell
- استراحة = توقف هنا (تابع بـ "git rebase - Continue")
- إسقاط <الالتزام> = حذف الالتزام
- التصنيف <label> = اسم إلى العنوان الحالي
- إعادة تعيين <label> = إعادة تعيين HEAD إلى التسمية المحددة
لتغيير رسالة التزام محدد.يجب عليك تغيير اختيار التحرير على الالتزام الذي تريد تغييره.
مثال: تريد تغيير رسالة الالتزام 750f5ae.
اختيار 2748cb4 الالتزام الأول
تحرير 750f5ae الالتزام الثاني
اختيار 716eb99 الالتزام الثالث
بعد حفظ البرنامج النصي ، ستعود إلى سطر الأوامر وسيخبرك git بما يجب القيام به بعد ذلك:
توقف في 750f5ae ... الالتزام الثاني
يمكنك تعديل الالتزام الآن ، مع
بوابة ارتكاب - تعديل
بمجرد أن تشعر بالرضا عن التغييرات التي أجريتها ، قم بتشغيل
بوابة rebase - الاستمرار
كما هو مبين أعلاه ، يجب تشغيل git الالتزام - تعديل من أجل تغيير رسالة الالتزام. ثم تنفيذ بوابة rebase - متابعة. إذا قمت بتحديد عدة تعهدات لتغيير الاسم ، فستكون هناك حاجة إلى هذه العمليات عند كل التزام.
لحذف التزاميجب عليك حذف السطر مع الالتزام.
مثال: تريد حذف الالتزام 750f5ae
تحتاج إلى تغيير البرنامج النصي من هذا:
اختيار 2748cb4 الالتزام الثالث
اختيار 750f5ae الالتزام الثاني
اختيار 716eb99 الالتزام الأول
في هذا:
اختيار 2748cb4 الالتزام الأول
اختيار 716eb99 الالتزام الثالث
لدمج يرتكبيجب عليك تغيير اختيار الاسكواش على الالتزامات التي تريد دمجها.
على سبيل المثال: تريد الجمع بين ارتكاب 750f5ae و 716eb99.
تحتاج إلى تغيير البرنامج النصي من هذا:
اختيار 2748cb4 الالتزام الثالث
اختيار 750f5ae الالتزام الثاني
اختيار 716eb99 الالتزام الأول
على هذا
اختيار 2748cb4 الالتزام الثالث
الاسكواش 750f5ae الالتزام الثانية
الاسكواش 716eb99 الالتزام الأول
لاحظ أنه في البرنامج النصي التفاعلي ، يتم عرض الالتزامات بترتيب عكسي مقارنةً بسجلات git. باستخدام الاسكواش ، يمكنك دمج 750f5ae الالتزام مع 716eb99 والالتزام 750f5ae مع 2748cb4. نتيجة لذلك ، الحصول على التزام واحد يحتوي على تغييرات في الثلاثة.
2.5 مشاهدة التاريخ
باستخدام القيادة
git log [<>] [<->]
يمكنك عرض سجل الالتزام الخاص بمستودع التخزين الخاص بك. هناك أيضًا العديد من الخيارات للفرز والبحث عن التزام محدد.
خيارات أمر git log المفيدة:
- -p - يظهر الفرق لكل التزام.
- --stat - يعرض إحصائيات الملفات المعدلة لكل التزام.
- --graph - يعرض الرسم البياني ASCII مع فروع ودمج التاريخ.
يمكنك أيضًا فرز التعيينات حسب الوقت والكمية وما إلى ذلك.
- - (n) يعرض فقط آخر n يرتكب.
- - منذ ذلك الحين - - بعد - يظهر الالتزامات التي تم إجراؤها بعد التاريخ المحدد.
- --until ، - قبل - يعرض الالتزامات التي تم إجراؤها قبل التاريخ المحدد.
- - Author - يعرض فقط تلك الالتزامات التي يتطابق فيها إدخال المؤلف مع السلسلة المحددة.
- --committer - يعرض فقط تلك الالتزامات التي يتطابق فيها إدخال المرسل مع السلسلة المحددة.
- --grep - يعرض فقط يرتكب رسالته تحتوي على السلسلة المحددة.
- -S - يعرض فقط الالتزامات التي أدى فيها التغيير في الكود إلى إضافة أو إزالة السطر المحدد.
فيما يلي بعض الأمثلة:
بوابة سجل - منذ = 3. أسابيع - تظهر ارتكاب في 2 أسابيع الماضية
git log --since = "2019-01-14" - عرض الالتزامات التي تم إجراؤها على 2019-01-14
git log --since = "2 years 1 day ago" - إظهار الالتزامات التي تم إجراؤها قبل عامين ويوم واحد.
يمكنك أيضًا تخصيص تنسيق إخراج commits الخاص بك
git log --format:["format"]
خيارات التنسيق لسجل بوابة - تنسيق.
- ٪ ح - ارتكاب التجزئة
- ٪ h - تقصير التزام تجزئة
- ٪ T - شجرة تجزئة
- ٪ ر - تقصير شجرة التجزئة
- ٪ ف - الأم التجزئة
- ٪ p - اختصار الوالد الرئيسي
- ٪ an - اسم المؤلف -٪ a - البريد الإلكتروني للمؤلف
- ٪ إعلان - تاريخ المؤلف (يمكن ضبط تنسيق التاريخ مع خيار - تاريخ = خيار)
- ٪ ar - التاريخ النسبي للمؤلف
- ٪ cn - اسم الملتزم
- ٪ ce - بريد المرسل
- ٪ cd - تاريخ الالتزام
- ٪ cr - تاريخ الالتزام النسبي
- ٪ s - المحتوى
مثال:
git log --pretty=format:"%h - %ar : %s"
سوف تظهر قائمة من الالتزامات التي تتكون من تجزئة الوقت ورسالة الالتزام.
2.6 العمل مع مستودع بعيد
نظرًا لأن git عبارة عن عملة صعبة موزعة ، يمكنك العمل ليس فقط مع المستودعات المحلية ولكن أيضًا مع المستودعات الخارجية.
المستودعات عن بعد هي إصدارات من مشروعك مخزنة على خادم خارجي.
للعمل مع المستودعات الخارجية ، استخدم:
git remote [<options>]
إذا قمت بنسخ المستودعات عبر عنوان URL http ، فحينئذٍ يكون لديك رابط إلى المستودع الخارجي. خلاف ذلك ، يمكنك إضافته مع
git remote add [<options>] <name> <adres>
يمكنك على الفور استخراج الفروع الخارجية باستخدام -f ، - إحضار (يمكنك الحصول على أسماء وحالة فروع المستودع الخارجي). يمكنك فقط تكوين مستودعات لإرسال أو استقبال البيانات باستخدام --mirror [= (push | fetch)]. للحصول على علامات ، حدد - علامات.
لعرض المستودعات الخارجية المتصلة ، استخدم git remote بدون وسائط أو git remote - v لعرض العناوين لإرسال واستقبال البيانات من المستودع.
لتتبع الفروع ، استخدم git branch -u <rep / br> حيث يكون rep هو اسم المستودع ، و br هو اسم الفرع الخارجي ، والفرع هو اسم الفرع المحلي. أو git branch - set-upstream local_br origin / br من أجل الإشارة إلى الفرع المحلي الذي سيقوم بمراقبة الفرع الخارجي.
عندما يتتبع فرعك فرعًا خارجيًا ، يمكنك معرفة الفرع (المحلي أو الخارجي) الذي يقع خلفه أو أمامه وعدد مرات ارتكابه. على سبيل المثال ، إذا لم تلتزم بعملية دفع بعد الالتزام ، فسيكون الفرع الخاص بك متقدمًا على الالتزام الخارجي بالتزام واحد. يمكنك معرفة ذلك عن طريق تشغيل git branch -vv ، ولكن أولاً قم بإحضار git جلب [اسم بعيد] (- جميعًا للحصول على تحديثات من جميع المستودعات) للحصول على أحدث البيانات من مستودع خارجي. لإلغاء تتبع الفرع ، استخدم git branch - unset-upstream [<local_branch>].
لتنزيل البيانات من مستودع خارجي ، استخدم git pull [rep] [branch]. إذا كانت فروعك تتبع خارجية ، فلا يمكنك تحديدها عند إجراء السحب. بشكل افتراضي ، سوف تتلقى البيانات من جميع الفروع التي يتم رصدها.
لتحميل فروع إلى فرع جديد ، استخدم git checkout -b <new_branch_name> <rep / branch>.
لإرسال البيانات إلى الخادم ، استخدم
git push [<rep>] [<br>]
حيث rep هو اسم المستودع الخارجي ، و br هو الفرع المحلي الذي تريد إرساله. يمكنك أيضًا استخدام هذا الإدخال git push master master: dev. وبالتالي ، يمكنك تحميل الفرع الرئيسي المحلي الخاص بك إلى الأصل (ولكن هناك سوف يطلق عليه ديف). لن تتمكن من إرسال البيانات إلى مستودع خارجي إذا لم يكن لديك إذن للقيام بذلك. أيضًا ، لن تتمكن من إرسال البيانات إلى فرع خارجي إذا كانت قبلك (بشكل عام ، يمكنك إرسال باستخدام -f ، - وفي هذه الحالة ، ستقوم بإعادة كتابة المحفوظات على المستودع الخارجي). يمكنك حذف اسم الفرع إذا كان فرعك يتتبع الخارج.
لحذف استخدام الفروع الخارجية
git push origin --delete branch_name
للحصول على معلومات مفصلة حول المستودع الخارجي (عناوين الإرسال والاستقبال ، كما هو مشار إليه بواسطة HEAD ، والفروع الخارجية والفروع المحلية التي تم تكوينها لسحب git والروابط المحلية التي تم تكوينها من أجل git push)
git remote show <remote_name>
لإعادة تسمية اسم المستودع الخارجي ، استخدم
git remote rename <last_name> <new_name>
لإزالة الروابط إلى مستودع خارجي ، استخدم
git remote rm <name>
3. المتفرعة في بوابة
التفرع هو أداة قوية وواحدة من السمات الرئيسية للبوابة لأنه يتيح لك إنشاء فروع مختلفة من مستودعك والتبديل بينها بسرعة. المفهوم الرئيسي للتفرع هو أنه يمكنك الإقلاع عن الخط الرئيسي للتنمية ومواصلة العمل بشكل مستقل عنه ، دون التدخل في الخط الرئيسي. يشير الفرع دائمًا إلى الالتزام الأخير فيه ، ويشير HEAD إلى الفرع الحالي (انظر
المؤشرات في git ).
3.1 العمليات الأساسية
لإنشاء فرع ، استخدم
git branch <branch_name> [<start_commit>]
هنا branch_name هو اسم الفرع الجديد ، و start_commit هو الالتزام الذي يشير إليه الفرع (أي ، الالتزام الأخير فيه). بشكل افتراضي ، سيكون الفرع عند الالتزام الأخير للفرع الأصل.
خيارات فرع بوابة:
- -r | -a [- المزج | --no-merged] — -r. -a. --merged. --no-merged.
- -l, -f <-> [<->] — -l. , -f. < >.
- -r (-d | -D) — -r. -d. ( ) -D.
- -m | -M [< >] < > — / (-m). / , -M.
- (- | -) [<->] <-> — -c. , -C.
- -v، -vv - قائمة الفروع مع الالتزام الأخير على فرع -v. قائمة ووضع الفروع التي تتم مراقبتها مع الالتزام الأخير بها.
انظر git branch -h لمزيد من المعلومات | --help.للتبديل إلى فرع ، استخدم بوابة الخروج. يمكنك أيضًا إنشاء فرع عن طريق تشغيل git checkout -b <branch>.3.2 دمج الفروع
لدمج فرعين لمستودع بوابة ، استخدم بوابة دمج.خيارات مفيدة لدمج git:- --squash - إنشاء التزام واحد بدلاً من الدمج. إذا كان لديك تعارض في الفروع ، فبعد حلها ، ستتم إضافة 2 التزام من الفرع (الالتزام من الفرع المدمج + الالتزام بالدمج) ، ولكن عن طريق تحديد هذه الوسيطة ، لن تضيف سوى التزام واحد (التزام مدمج).
- --ff-only - لا تندمج إذا كان هناك تعارض. دع أي شخص آخر يحل النزاعات: د
- -X [إستراتيجية] - استخدم إستراتيجية الدمج المحددة.
- --محاولة - إلغاء الدمج.
عملية الاندماج.إذا لم تقم بتنفيذ تعهدات جديدة على الفرع الأصل ، فستتحول عملية الدمج إلى سرعة التقديم السريع ، كما لو كنت لا تنشئ فرعًا جديدًا ، وكل التغييرات حدثت هنا (في الفرع الأصل).إذا قمت بالتعهدات على كلا الفرعين ، لكنك لم تنشئ تعارضًا ، فسيتم الدمج في "الإستراتيجية العودية" ، أي أنك تحتاج فقط إلى إنشاء التزام دمج لتطبيق التغييرات (استخدم خيار --squash لتجنب إنشاء التزام إضافي) .إذا قمت بالتعهدات على كلا الفرعين والتي أجرت تغييرات مختلفة على نفس الجزء من نفس الملف ، فسيتعين عليك حل التعارض والالتزام بدمج الالتزام.عند حل التعارض ، تحتاج إلى اختيار أي جزء من التغييرات من الفرعين اللذين تريد مغادرتهما. عندما تفتح ملفًامتضاربًا ، فسيتضمن ما يلي: <<<<<<< HEADسيكون هناك إصدار من الالتزام الأخير للفرع الحالي======سيكون هناك إصدار من الالتزام الأخير للفرع المدمج>>>>>>> هنا الفروع التي ندمج بهابعد حل النزاع ، يجب عليك إكمال الدمج من خلال الالتزام.أثناء تعارض ، يمكنك معرفة الاختلافات الموجودة في أي ملفات.git diff --ours - الفرق قبل الدمج وبعدgit diff - الساعات - الفرق بين الفرع المدمج قبل الدمج وبعدgit diff - الأساس - الفرق مع كلا الفرعين قبل الدمج وبعدإذا كنت لا تريد السماح بالدمج ، فاستخدم استراتيجيات دمج متعددة ، إما اختيار الإصدار "لدينا" (أي ، الإصدار الموجود في الفرع الحالي) أو اختيار الإصدار "الموجود" الموجود على الفرع المدمج دون إصلاح التعارض. قم بتشغيل git merge --Xours أو git merge --Xtheirs على التوالي.3.3 ريري
Rerere - "إعادة استخدام الدقة المسجلة" - "إعادة استخدام قرارات الصراع المحفوظة". يمكن لآلية rerere أن تتذكر كيف قمت بحل جزء معين من الصراع في الماضي وتصحيح الصراع تلقائيًا في المرة التالية التي يحدث فيها.لتمكين rerere القيام به git config --global rerere.enabled true
يمكنك أيضًا تمكين rerere عن طريق إنشاء دليل .git / rr cache في المستودع المرغوب.استخدم حالة git rerere لمعرفة أي الملفات التي حفظها rerere لقطات لها قبل الدمج.استخدم git rerere diff لعرض حالة الصراع الحالية.إذا كان أثناء الدمج فإنه يقول: حل 'nameFile' باستخدام الدقة السابقة. لذا حُلّ rerere النزاع باستخدام ذاكرة التخزين المؤقت.لإلغاء حل التعارض التلقائي ، استخدم git checkout --conflict = merge بحيث تقوم بإلغاء حل التعارض التلقائي وإعادة الملف (الملفات) إلى حالة التعارض للحصول على الدقة اليدوية.4. المؤشرات في بوابة
بوابة لديها مؤشرات مثل فرع الرأس. في الواقع ، كل شيء بسيط للغاية يشير HEAD إلى الفرع الحالي ، ويشير الفرع إلى الالتزام الأخير فيه. ولكن لفهم أنه من الأفضل تخيل أن العنوان يشير إلى الالتزام الأخير.4.1 المؤشرات المتحركة
يقدم كتاب Pro git مثالًا جيدًا على كيفية إدارة مستودعك ، لذلك سألتزم به أيضًا. تخيل جيت إدارة محتويات ثلاث أشجار مختلفة. هنا ، تشير كلمة "شجرة" إلى "مجموعة من الملفات".في عملياتها المعتادة ، تدير جيت ثلاثة أشجار:- HEAD - لقطة من الالتزام الأخير ، والد القادم
- الفهرس - لقطة من الالتزام القادم المقبل
- دليل العمل - رمل
في الواقع بوابة يوفر أدوات لمعالجة جميع الأشجار الثلاثة. بعد ذلك ، ستتم مناقشة الأمر git reset ، والذي يسمح لك بالعمل مع ثلاثة أشجار من مستودعك.باستخدام الخيارات المختلفة لهذا الأمر ، يمكنك:- - لينة - إعادة تعيين الرأس فقط
- - المختلط - إعادة تعيين الرأس والفهرس
- - hard - إعادة تعيين HEAD ، فهرس ودليل العمل
بواسطة إعادة تعيين يعني الانتقال إلى الالتزام المحدد. الافتراضي هو - المختلط.مثال 1. قمت بإجراء 3 تعهدات إضافية لكل منها إحداث تغييرات صغيرة وتريد إجراء واحد منها ، بحيث يمكنك استخدام git reset - soft لتحريك مؤشر HEAD مع ترك الفهرس ودليل العمل دون تغيير والالتزام. نتيجة لذلك ، ستبدو قصتك وكأنها حدثت جميع التغييرات في التزام واحد.مثال 2. قمت بإضافة ملفات إضافية إلى الفهرس وتريد إزالتها من هناك. يمكنك استخدام git reset HEAD <files ...> لهذا الغرض. أو هل تريد أن تبدو ملفات الالتزام وكأنها ترتكب مرة أخرى. كما قلت سابقًا ، يمكنك إعادة ضبط الفهرس على أي التزام ، على عكس استعادة git ، التي تعيد تعيين الالتزام الأخير فقط. فقط مع الخيار المختلط يمكنك تطبيق إجراء على الملف المحدد!مثال 3. لقد بدأت العمل على ميزة جديدة في مشروعك ، ولكن فجأة يقول صاحب العمل إنه لم يعد هناك حاجة ، وفي حالة من الغضب ، تقوم بأداء عملية إعادة التعيين - قم بإعادة فهرسك وملفاتك ورئيسك في الوقت الذي لم تبدأ فيه العمل ميزة. وفي اليوم التالي ، تم إخبارك بأنه لا يزال يتعين إلغاء الميزة. ولكن ماذا تفعل؟ كيفية التقدم للأمام ، لأنك استعادت جميع الأشجار الثلاثة والآن لا يمكنك العثور عليها في السجل باستخدام سجل git. وهناك طريقة للخروج - هذا هو سجل رابط بوابة إعادة التسجيل. من خلال هذا الأمر ، يمكنك رؤية أين يشير HEAD وسوف يتحرك ليس فقط في سجل الالتزام ، ولكن أيضًا للأعلى. هذا السجل محلي لكل مستخدم.بشكل عام ، أعتقد أنه يمكنك تقديم أمثلة أكثر مني. في الختام ، أستطيع أن أقول أنه مع إعادة تعيين بوابة يمكنك أن تفعل السحر ...5.
- Pro git — Scott Chacon
- Git — . , ,
- Git Essentials — F. Santacroce
- Git: Version Control for Everyone (2013) — R. Somasundaram
- Version Control with Git: Powerful tools and techniques for collaborative software development (2009) — J. Loeliger, M. McCullough
- Practical Git and GitHub (2016) — D. Cruz
- Git in Practice (2016) — M. McQuaid
- Git Best Practices Guide (2014) — E. Pidoux
- Learn Enough Git to Be Dangerous (2016) — M. Hartl
- Learn Version Control with Git: A step-by-step course for the complete beginner (2014) — T. Günther
- Git: Learn Version Control with Git: A step-by-step Ultimate beginners Guide (2017) — D. Hutten
- Pragmatic Guide to Git (2010) — S. Travis
- Git (2016) — .
- A Hacker's Guide to Git (2014) — J. Wynn
- Practical Git and GitHub (2016) — D. Cruz
- Deploying to OpenShift(2018) — G. Dumpleton
- Git for Teams (2015) — Emma Jane Hogbin Westby