در طول سالیان اخیر محبوبیت git به شدت افزایش پیدا کرده است و به یکی از بهترین سیستمهای کنترل نسخه (version control system) تبدیل شده است. توسعهدهندگان زبانهای برنامهنویسی مختلف و همچنین تیمهایی با اندازههای مختلف همگی از git استفاده میکنند. از پروژههای متنباز کوچک تا پروژههایی عظیم همچون linux kernel از git بهره میبرند.
در این آموزش میخواهیم نکات کمی از git را با شما به اشتراک بگذاریم که میتوانند تجربه و روال کاری شما را بهبود دهند.
git log –no-merges
این دستور تاریخچهی تمام commit ها به جز آنهایی که دو شاخه (branch) را ادغام کرده و یا یک ناسازگاری ادغام را حل کرده است، نمایش میدهد. به این ترتیب میتوانید تمام تغییرات انجام شده در پروژه را ببینید، بدون آنکه commit های مربوط به ادغام، این تاریخچه را درهمریخته کند.
$git log --no-merges commit e75fe8bf2c5c46dbd9e1bc20d2f8b2ede81f2d93 Author: John Date: Mon Jul 10 18:04:50 2017 +0300 Add new branch. commit 080dfd342ab0dbdf69858e3b01e18584d4eade34 Author: John Date: Mon Jul 11 15:40:56 2017 +0300 Added index.php. commit 2965803c0deeac1f2427ec2f5394493ed4211655 Author: John Date: Mon Jul 13 12:14:50 2017 +0300 Added css files.
git revert –no-commit [commit]
دستور git revert یک commit جدید ایجاد میکند و تغییرات ایجاد شده با commit های موجود را به حالت قبل برمیگرداند و یک commit جدید ایجاد میکند. اگر میخواهید به commit های نامگذاری شده برگردید و همچنین از commit های خودکار اجتناب کنید، شما میتوانید از پرچم –no-commit و یا به صورت کوتاه n- استفاده نمایید.
git diff -w
Git diff
تغییرات بین دو commit، دو درخت کاری و یا دو فایل روی دیسک را نمایش میدهد. وقتی افراد مختلفی بر روی یک پروژه کار میکنند، اغلب به دلیل تنظیمات مربوط به space و tab در ویرایشگرها، تغییراتی ایجاد میشود. به منظور اینکه تفاوتهای ایجاد شده به خاطر فضاهای خالی هنگام مقایسه خطوط را نادیده بگیرید، میتوانید از پرچم w- به همراه این دستور استفاده نمایید.git diff –stat
نشان میدهد که هر فایل در طول زمان چگونه تغییر کرده است. شما میتوانید ۳ پارامتر به آن اضافه کنید: width برای نادیده گرفتن مقدار پیشفرض width خروجی، name-width برای تنظیم عرض نام فایل و count برای محدود کردن خروجی به تعدادی از خطوط اولیه.
$ git diff --stat
index.php | 83 +++++++++++++++++++++++++++++---------------------------
۱ file changed, 43 insertions(+), 40 deletions(-)
$ git diff --stat-width=10
index.php | 83 +++---
۱ file changed, 43 insertions(+), 40 deletions(-)
git reset –soft HEAD^
این دستور head را به یک commit مشخص بازنشانی میکند بدون آنکه فایلهای نمایه یا درخت کاری دستکاری شود. تمام تغییراتی که بعد از این commit ایجاد شدهاند به بخش “staged for commit” منتقل میشوند. پس از آن میتوانید تنها با اجرای دستور git commit
آنها را به عقب اضافه کنید.
git stash branch [branch-name] [stash]
این دستور یک شاخه جدید با نام branch-name ایجاد میکند، سپس تمام تغییرات را از یک انباشت (stash) به این شاخه اعمال میکند و سپس آن انباشت را حذف میکند. اگر هیچ انباشتی مشخص نشود، از آخرین آنها استفاده میشود. به این ترتیب شما میتوانید تمام تغییرات انباشت شده را در یک محیط امنتر اعمال کنید که بعدا میتواند با شاخهی master ادغام شود.
git branch -a
این دستور لیستی از شاخههای محلی و راه دور دنبال شده را نمایش میدهد. با استفاده از پرچم merged– میتوانید تنها شاخههایی را ببینید که به طور کامل با شاخهی master ادغام شدهاند. به این ترتیب میتوانید شاخههای خود را بررسی کنید و آنهایی که بیش از این استفاده نمیشوند و میتوانند حذف شوند را پیدا کنید.
$ git branch -a dev * master remotes/origin/HEAD -> origin/master remotes/origin/dev
git commit –amend
با دستور git commit --amend
میتوانید commit پیشین خود را تغییر دهید، به جای آنکه یک commit جدید بسازید. اگر تغییرات خود را به یک شاخهی راه دور push نکردهاید، میتوانید از این دستور برای اصلاح آخرین commit خود، اضافه کردن آخرین تغییرات و حتی تغییر پیغام commit استفاده کنید.
git pull –rebase
این دستور git را مجبور میکند که ابتدا تغییرات را pull کند و سپس commit های push نشده را بالاتر از آخرین نسخهی شاخهی راه دور قرار دهد. استفاده از گزینه rebase– میتواند برای اطمینان از داشتن تاریخچه خطی به همراه جلوگیری از ادغام غیرضروری commit ها استفاده شود.
git add -p
وقتی از این دستور استفاده کنید، به جای آنکه تمام تغییرات فورا به نمایه اضافه شوند، برای هر تغییر از شما میپرسد که چه کاری میخواهید با آن انجام دهید. از این طریق به شما اجازه میدهد که به صورت تعاملی انتخاب کنید که دقیقا چه چیزهایی را میخواهید commit کنید.
diff --git a/package.json b/package.json index db78332..a814f7e 100644 --- a/package.json +++ b/package.json @@ -۶,۷ +۶,۶ @@ }, "devDependencies": { "bootstrap-sass": "^3.3.7", - "gulp": "^3.9.1", "jquery": "^3.1.0", "laravel-elixir": "^6.0.0-11", "laravel-elixir-vue-2": "^0.2.0", Stage this hunk [y,n,q,a,d,/,e,?]?
منبع: ۱۰Useful Git Tips
ترجمه: سیدمحمدحسین طباطبایی بالا