اگر می خواهید درباره قسمتهای git که قبلاً از پرسیدن آن ترسیده اید بیشتر بدانید ، این لیست برای شما مناسب است. در اینجا معمولی ترین شرایط و روشهای حل هر دو از آنها جمع آوری شده است تجربه شخصی نویسنده و در سراسر اینترنت جمع آوری شده است.

خطا در اظهار نظر

اگر تعهد هنوز به سرور ارسال نشده است (فشار دهید) ، پس می توانید از یک دستور ساده استفاده کنید که به شما امکان می دهد متن پیام را به آخرین تعهد ویرایش کنید.

git commit --amend

چگونه آخرین تعهد را واگرد کنم؟

می توانید از تنظیم مجدد git مانند این استفاده کنید:

تنظیم مجدد git - سخت HEAD ~ 1

HEAD ~ 1 یعنی یک مرتکب شدن قبل از HEAD یعنی به موقعیت فعلی لازم به ذکر است که این یک روش "هسته ای" است که همه تغییرات را خنثی می کند. اگر می خواهید همه کارهایی را که انجام داده اید ذخیره کنید ، اما هنوز وقت انجام کار را ندارید ، از موارد زیر استفاده کنید:

تنظیم مجدد git - نرم HEAD ~ 1

حذف شاخه در سرور

منشا شاخه - حذف شاخه git

چه تفاوتی بین "git pull" و "git fetch" وجود دارد؟

جیت کشیدن در اصل یک واکشی git است که بلافاصله با ادغام git دنبال می شود. git واکشی تغییرات را از سرور انجام می دهد و آنها را در refs / Remote / ذخیره می کند. این به هیچ وجه بر شاخه های محلی و تغییرات فعلی تأثیر نمی گذارد. و git pull در حال حاضر تمام این تغییرات را به نسخه محلی وارد می کند.

چگونه "git add" را قبل از مرتکب شدن لغو کنیم؟

شما به طور اتفاقی git add namename را اجرا کردید و می خواهید افزودن این پرونده را واگرد کنید. اگر تعهد هنوز انجام نشده است ، این به شما کمک می کند:

تنظیم مجدد نام پرونده

چگونه تعارضات را ادغام کنم؟

از git mergetool استفاده کنید ، که یک رابط مناسب برای حل تعارضات فراهم می کند.

تمام پرونده ها و دایرکتوری های محلی که توسط git ردیابی نمی شوند را از نسخه فعلی خود حذف کنید

احتیاط! بهتر است قبل از انجام این کار یک نسخه پشتیبان تهیه کنید.

تمام شاخه ها را از سرور کلون کنید

احتمالاً شما قبلاً این کار را کرده اید و شاخه ها فقط پنهان شده اند. در اینجا یک دستور برای نشان دادن همه آنها وجود دارد:

برای مشاهده شاخه مورد نظر می توانید از مبدا / نام شاخه git checkout استفاده کنید. یا برای ایجاد یک شاخه محلی متناسب با شاخه از راه دور ، check -name -b branch_name origin / branch_name را بزنید.

تغییر نام شعبه محلی

git شاخه - اسم قدیمی نام جدید

بازگشت به هر گونه تعهد

همانطور که قبلاً نشان داده شد ، می توانید از تنظیم مجدد استفاده کنید ، اما این به این معنی است که می خواهید برای همیشه به وضعیتی که در آن هستید برگردید و فقط به آن نگاه نکنید (برای این کار باید از صندوق عقب بروید). شناسه commit باید همان باشد که در خروجی دستور git log نشان داده می شود.

تنظیم مجدد git - سخت commit_id

باز هم ، این تغییرات فعلی را واگرد می کند ، بنابراین مطمئن شوید که این همان چیزی است که می خواهید. یا از - نرم به جای - سخت استفاده کنید.

زیرمدول را حذف کنید

ایجاد زیر مدول به ندرت مورد استفاده قرار می گیرد ، اما گاهی اوقات هنوز هم مورد نیاز است. در اینجا آنچه شما نیاز دارید:

git submodule deinit submodulename
git rm submodulename
git rm - زیرمدلوم ذخیره شده
rm -rf .git / modules / submodulename

در هنگام git pull پرونده های محلی را بازنویسی کنید

تنظیم مجدد Git دوباره به شما کمک می کند:

git fetch - همه
تنظیم مجدد git - اصل / استاد سخت

چگونه می توانم یک فهرست خالی به مخزن اضافه کنم؟

به هیچ وجه! به سادگی پشتیبانی نمی شود و برای شما ضروری به نظر نمی رسد. اما یک ترفند وجود دارد. می توانید یک فایل .gitignore در فهرست مورد نظر با محتوای زیر ایجاد کنید:

# همه موارد موجود در این فهرست را نادیده بگیرید
*
# به جز خود پرونده. gitignore
! .gitignore

صادرات منابع ، مشابه "صادرات svn"

از git بایگانی مانند این استفاده کنید:

git بایگانی - قالب zip - خروجی /path/to/file/file.zip master

همه تغییرات را به استثنای تغییرات قبلاً به تعهد برنامه ریزی شده واگرد کنید

git checkout -.

از شاخه محلی فعلی یک شاخه جدید در سرور ایجاد کنید

پیکربندی git - فشار جهانی. جریان پیش فرض
فشار دادن -u

پرونده پاک شده را بازیابی کنید

ابتدا باید آخرین مرتکبی را که فایل هنوز وجود دارد پیدا کنید.

شاخه های از راه دور پیوندهایی به وضعیت شاخه ها در مخازن از راه دور شما هستند. این شاخه های محلی هستند و نمی توانند منتقل شوند. آنها هر زمان که از طریق شبکه ارتباط برقرار می کنید به طور خودکار حرکت می کنند. شاخه های از راه دور به عنوان نشانک یادآوری می کنند که آخرین باری که شاخه ها در مخازن از راه دور به آنها متصل شده اید ، به شما یادآوری می کنند.

به نظر می رسد مانند (نام مخزن از راه دور) / (شاخه). به عنوان مثال ، اگر می خواهید ببینید آخرین شاخه اصلی در سرور مبدا آخرین باری که به آن متصل شدید به چه صورت است ، شاخه اصلی / اصلی را بررسی کنید. اگر شما و یک شریک در مورد یک مشکل کار کرده اید و آنها شعبه Iss53 را بارگذاری کرده اند ، ممکن است شعبه محلی Iss53 خود را داشته باشید. اما آن شاخه در سرور به تعهد در مبدا / iss53 اشاره خواهد کرد.

همه اینها احتمالاً گیج کننده است ، بنابراین بیایید به یک مثال نگاه کنیم. فرض کنیم شما سرور Git خود را بصورت آنلاین در git.ourcompany.com دارید. اگر چیزی را از آن شبیه سازی کنید ، Git به طور خودکار نام آن را مبدا قرار می دهد ، همه داده ها را از آنجا می گیرد ، یک نشانگر برای آنچه شاخه اصلی به آن اشاره می کند ایجاد می کند و نام آن را محلی / اصلی می گذارد (اما نمی توانید آن را جابجا کنید) ... Git همچنین شعبه اصلی خود را برای شما در نظر می گیرد که از همان محل اصلی شروع می شود ، بنابراین شما می توانید با آن کار کنید (شکل 3-22 را ببینید).

شکل 3-22. شبیه سازی یک پروژه Git به شما شاخه اصلی و مبدا خود را نشان می دهد / استاد را به شاخه اصلی در مبدا نشان می دهید.

اگر کاری را در شعبه ارشد محلی خود انجام دهید و در این هنگام شخص دیگری تغییرات را به git.ourcompany.com وارد کند و شاخه اصلی را در آنجا به روز کند ، داستان های شما متفاوت ادامه خواهد یافت. همچنین ، تا زمانی که به سرور مبدا وصل نشوید ، نشانگر مبدا / اصلی شما حرکت نخواهد کرد (شکل 3-23 را ببینید).



شکل 3-23. هنگام انجام کارهای محلی و شخصی که تغییرات را به یک سرور از راه دور وارد می کند ، هر داستان به روشی متفاوت ادامه می یابد.

برای همگام سازی کار خود ، دستور git fetch origin را اجرا کنید. این دستور به دنبال این است که منبع سرور با کدام یک مطابقت داشته باشد (در مورد ما ، git.ourcompany.com). تمام داده هایی را که هنوز ندارید از آنجا بازیابی می کند و ذخیره داده محلی خود را به روز می کند. مبدا / master را به موقعیت جدیدی منتقل می کند (شکل 3-24 را ببینید).


شکل 3-24. دستور git fetch پیوندهای از راه دور شما را به روز می کند.

برای نشان دادن شکل آنها شاخه های دور افتاده در شرایطی که چندین سرور از راه دور وجود دارد ، فرض کنید سرور داخلی Git دیگری دارید که فقط توسط یکی از تیم های توسعه دهنده شما برای توسعه استفاده می شود. این سرور در git.team1.ourcompany.com واقع شده است. می توانید آن را به عنوان یک پیوند از راه دور جدید به پروژه ای که در حال حاضر روی آن کار می کنید اضافه کنید ، همانطور که در فصل 2 توضیح داده شده است. نام این سرور راه دور را تیم بگذارید ، که مختصر برای URL کامل است (شکل را ببینید) . 3-25)



شکل 3-25 افزودن سرور راه دور اضافی.

اکنون می توانید git fetch teamone را برای واکشی تمام مواردی که در سرور ندارید اجرا کنید. از آنجا که این سرور در حال حاضر فقط زیر مجموعه ای از داده های مبدا دارد ، Git هیچ داده ای دریافت نمی کند ، اما یک شاخه از راه دور به نام teamone / master را بیرون می کشد ، که به همان تعهد شاخه اصلی در teamone اشاره می کند ( شکل 3-26 را ببینید)



شکل 3-26. اکنون یک لینک محلی به شاخه اصلی teamone دارید.

ارسال تغییرات

اگر یک شاخه serverfix دارید که می خواهید با آن شخص دیگری کار کنید ، می توانید همانطور که شاخه اول خود را فشار دادید آن را فشار دهید. اجرای git push (سرور از راه دور) (شاخه):

$ git push origin serverfix شمارش اشیا: 20 ، انجام شد. فشرده سازی اشیا: 100٪ (14/14) ، انجام شد. نوشتن اشیا: 100٪ (15/15) ، 1.74 KiB ، انجام شده است. کل 15 (دلتا 5) ، 0 (دلتا 0) دوباره استفاده شد [ایمیل محافظت شده]: schacon / simplegit.git * serverfix -\u003e serverfix

نوعی انقباض است. Git به طور خودکار نام شاخه serverfix را به refs / Heads / serverfix: refs / Heads / serverfix گسترش می دهد ، به این معنی که "شاخه serverfix محلی من را بردارید و شاخه serverfix از راه دور را از آنجا به روز کنید". ما در مورد قسمت Refs / Head / Part به تفصیل در فصل 9 بحث خواهیم کرد ، اما معمولاً قابل حذف است. همچنین می توانید git push origin serverfix را اجرا کنید: serverfix - همان اتفاق خواهد افتاد - می گوید: "serverfix مرا بگیرید و آن را از راه دور سرور کنید". می توانید از این قالب برای انتقال شعبه محلی به شاخه ای از راه دور با نام دیگر استفاده کنید. اگر نمی خواهید این شاخه در سرور راه دور serverfix نامیده شود ، پس به جای دستور قبلی ، git push origin serverfix: awesomebranch را اجرا کنید. این کار شعبه serverfix محلی شما را به شاخه awesomebranch پروژه از راه دور هدایت می کند.

$ git واکشی مبدل از راه دور: شمارش اشیا: 20 ، انجام شد. از راه دور: فشرده سازی اشیا: 100٪ (14/14) ، انجام شد. از راه دور: کل 15 (دلتا 5) ، 0 استفاده مجدد 0 (دلتا 0) باز کردن بسته بندی اشیا objects: 100٪ (15/15) ، انجام شد. از جانب [ایمیل محافظت شده]: schacon / simplegit * serverfix -\u003e مبدا / serverfix

توجه به این نکته مهم است که وقتی شاخه های از راه دور جدیدی هنگام دریافت اطلاعات دارید ، به طور خودکار نسخه های قابل ویرایش محلی برای آنها دریافت نمی کنید. به عبارت دیگر ، در مورد ما شاخه جدید serverfix نخواهید گرفت - فقط نشانگر مبدا / serverfix است که نمی توانید تغییر دهید.

برای ادغام این کار در شاخه فعلی خود ، git merge origin / serverfix را اجرا کنید. اگر به شاخه serverfix خود نیاز دارید که می توانید روی آن کار کنید ، می توانید یکی را بر اساس شاخه از راه دور ایجاد کنید:

$ git checkout -b serverfix origin / serverfix Branch serverfix برای ردیابی refs شاخه از راه دور / remotes / origin / serverfix تنظیم شده است. به شعبه جدید "serverfix" تغییر یافت

این به شما یک شعبه محلی می دهد تا در آن کار کنید. از همان جایی که مبدا / serverfix است شروع می شود.

ردیابی شاخه ها

بررسی یک شعبه محلی با git checkout از یک شعبه از راه دور به طور خودکار آنچه را که نامیده می شود ایجاد می کند شاخه ردیابی شده... شاخه های ردیابی شاخه های محلی هستند که مستقیماً با شاخه از راه دور مرتبط هستند. اگر در حالی که در یک شاخه ردیابی شده هستید ، git push را تایپ کنید ، Git از قبل می داند که به کدام سرور و به کدام شاخه تغییرات اعمال می شود. به همین ترتیب ، اجرای git pull در یکی از این شاخه ها ابتدا تمام پیوندهای از راه دور را دریافت می کند و سپس به طور خودکار با شاخه از راه دور مربوطه ادغام می شود.

به طور معمول هنگام شبیه سازی مخزن ، یک شاخه اصلی به طور خودکار ایجاد می شود که مبدا / master را ردیابی می کند ، بنابراین git push و git pull برای این شاخه "خارج از جعبه" کار می کنند و نیازی به استدلال های اضافی ندارند. با این حال ، می توانید پیگیری را برای شعب دیگر تنظیم کنید. مخزن از راه دور... شما فقط یک نمونه ساده از چگونگی انجام این کار را مشاهده کردید - git checkout -b [branch] [حذف شده است. سرور] / [شاخه]. اگر از Git نسخه 1.6.2 یا بالاتر استفاده می کنید ، همچنین می توانید از میانبر --track استفاده کنید:

$ git checkout - track track / serverfix Branch serverfix برای ردیابی refs شاخه از راه دور / remotes / origin / serverfix تنظیم شده است. به شعبه جدید "serverfix" تغییر یافت

برای راه اندازی شعبه محلی با نامی متفاوت از شعبه از راه دور ، می توانید به راحتی از نسخه اول با نام شعبه محلی دیگر استفاده کنید:

$ git checkout -b sf origin / serverfix شعبه sf برای ردیابی refs شاخه از راه دور / از راه دور / مبدا / serverfix تنظیم شده است. تغییر شعبه جدید "sf"

اکنون شعبه sf محلی شما به طور خودکار تغییرات را از مبدا / serverfix فشار داده و می کشد.

حذف شاخه ها در یک سرور از راه دور

بیایید بگوییم شما و همكارانتان با یك نوآوری كار خود را به پایان رسانده و آن را در شاخه اصلی در سرور راه دور (یا شاخه دیگری كه كد پایدار در آن ذخیره شده است) ادغام كرده اید. می توانید با استفاده از نحو تا حدی مسخره git push [از راه دور ، شاخه ای را بر روی سرور راه دور فشار دهید. سرور]: [شاخه]. برای حذف شاخه serverfix در سرور ، موارد زیر را انجام دهید:

$ git push origin: serverfix به [ایمیل محافظت شده]: schacon / simplegit.git - serverfix

کف زدن دیگر هیچ شاخه ای در سرور شما وجود ندارد. ممکن است بخواهید صفحه فعلی را علامت گذاری کنید ، زیرا به این دستور و نحوی که به احتمال زیاد فراموش خواهید کرد ، نیاز خواهید داشت. با بازگشت به دستور ترکیبی git push می توانید این دستور را به خاطر بسپارید. سرور] [loc. شاخه]: [حذف کنید. شاخه] ، که کمی زودتر به آن نگاه کردیم. حذف [لوک شاخه] ، شما در اصل می گویید "چیزی در مخزن من نگیر و آن را به گونه ای در [از راه دور. شاخه] همان بود. "

اگر از احراز هویت رمز عبور استفاده می کنید:

  1. $ git clone https: // نام کاربری: [ایمیل محافظت شده]/opt/git/repository.git

کار با شاخه ها

نمایش تمام شاخه ها:
  1. $ git شاخه
ایجاد یک شاخه جدید:
  1. $ git شاخه
تغییر شعبه جدید:
  1. $ پرداخت گیت
یک شاخه جدید ایجاد کنید و به آن بروید:
  1. $ git پرداخت -b
حذف شعبه محلی:
  1. $ git شاخه -d
حذف شاخه از مخزن از راه دور:
  1. $ git push origin - حذف

کار با تعهدات

چگونه آخرین تعهد را حذف کنم؟

  1. $ تنظیم مجدد git - نرم HEAD ^
گیت چطور فصل 16. دور انداختن تعهدات
گیت چطور فصل 17. حذف تعهدات از یک شعبه
مستندات رسمی Git. مبانی Git - معکوس کردن تغییرات

چگونه آخرین تعهد را تغییر دهم؟

  1. $ git new_file.txt اضافه کنید
  2. $ git commit --amend

چگونه می توانم نظر مربوط به آخرین تعهد را تغییر دهم؟

  1. $ git commit --amend
  2. $ git commit --amend -m "نظر جدید"

چگونه چندین مرتبه را ادغام کنم؟

  1. $ git rebase -i HEAD ~ 3
به جای HEAD ~ 3 ، می توانید از هش مرتکب استفاده کنید. شما باید هش تعهدی را که می خواهید همه چیز را در آن ادغام کنید (مسطح) کنید.
یک ویرایشگر با لیستی از تعهدات ، با قدیمی ترین مرتکب در بالای صفحه ، باز می شود.
  1. انتخاب 1111111 تعهد 1 نظر
  2. انتخاب 2222222 تعهد 2 نظر
  3. انتخاب 3333333 تعهد 3 نظر
ما باید کدو را جایگزین کدو سبز کنیم تا اینگونه بدست آید:
  1. انتخاب 1111111 تعهد 1 نظر
  2. کدو 2222222 تعهد 2 نظر
  3. squash 3333333 تعهد 3 نظر
بعد ، باید پرونده را ذخیره کرده و از آن خارج شوید. دوباره باز خواهد شد ویرایشگر متن با تمام نظرات در مورد تعهدات. شما باید ویرایش ، ذخیره و خارج شوید. پس از طی این مراحل ، تعهدات ادغام می شوند.

چگونه می توان تغییراتی را در یک پرونده خاص لغو کرد و آن را به حالتی که پس از آخرین مرتکب شدن در آن بود برگرداند؟

  1. $ git checkout - file.txt

چگونه می توانم تمام تغییرات متعهد نشده (تعهد نشده) را برگردانم؟

  1. $ پرداخت گیت

چگونه می توانم برخی از پرونده ها را برای مرتکب بعدی نگه دارم؟

فرض کنیم شما می خواهید در برخی از پرونده ها تغییراتی انجام دهید ، و در مرتکب بعدی تغییرات در پرونده های دیگر انجام دهید. سپس می توانید آنها را به طور موقت از مخزن (پرونده های خارج از مرحله) حذف کرده و دوباره اضافه کنید.
  1. $ git تنظیم مجدد HEAD file.txt
این دستور پرونده را از مخزن حذف می کند ، آن در کامیت های قدیمی باقی می ماند. سر به آخرین تعهد در شعبه فعلی اشاره می کند.

اگر نمی توانید به مخزن از راه دور فشار دهید زیرا نسخه فعلی مخزن کمتر از مخزن از راه دور است

در این حالت می توانید فشار اجباری ایجاد کنید.
  1. $ git push -f استاد اصلی

ادغام شاخه ها

چگونه می توانم فقط برخی پرونده ها را از شاخه دیگری بردارم؟

  1. $ git checkout branch branch - path / to / file.file

مخازن از راه دور

نمایش اطلاعات مربوط به یک مخزن از راه دور

  1. $ git مبدا نمایش از راه دور
صفحه نمایش چیزی شبیه به این را نشان می دهد:
  1. * منشا از راه دور
  2. واکشی URL: [ایمیل محافظت شده]: /opt/git/test-project.git
  3. فشار دادن URL: [ایمیل محافظت شده]: /opt/git/test-project.git
  4. شاخه HEAD: استاد
  5. شاخه از راه دور:
  6. master new (واکشی بعدی در ریموت ها / مبدا ذخیره می شود)
  7. تنظیم محلی برای "git push" پیکربندی شده است:
  8. استاد هل می دهد تا استاد شود (محلی خارج از تاریخ)

افزودن مخزن از راه دور

  1. $ git از راه دور منبع اضافه کنید [ایمیل محافظت شده]: /opt/git/test-project.git