10 نکته سودمند درباره Git

در طول چند سال گذشته، Git بسیار محبوب شده است و به یکی از پر استفاده‌ترین سیستم‌های کنترل ورژن تبدیل شده است. Git توسط توسعه‌دهندگان برنامه‌نویسی با زبان‌های مختلف و تیم‌های برنامه‌نویسی، از پروژه‌های open-source تا پروژه‌های codebases بزرگ مانند هسته لینوکس استفاده می‌شود.

 10 نکته سودمند درباره Git

در این مقاله نکات مفیدی را به شما ارائه می‌دهیم که تجربه و کار شما با git را بهبود می‌بخشد.

git log --no-merges

این دستور git سوابق تمام commit‌ها را نشان می‌دهد اما commit‌هایی که دو شاخه (branch) را با یکدیگر ادغام کرده‌اند را نادیده می‌گیرد. این دستور به شما اجازه می‌دهد تا به سرعت تمام تغییرات انجام‌شده در پروژه را ببینید، بدون اینکه ادغام commitها، سوابق git را به‌هم بریزد.

$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‌های نام‌گذاری‌شده را revert کنید و از commitهای اتوماتیک جلوگیری کنید، می‌توانید از flag --no-commit یا shorthand –n استفاده کنید.

git diff -w

Git diff تغییرات بین دو commit، دو درخت یا دو فایل روی دیسک را نشان می‌دهد. وقتی چند نفر روی یک پروژه کار می‌کنند، اغلب تغییراتی به دلیل تب‌های موجود در ویرایشگر متن و تنظیمات فضا وجود دارد. برای رفع اختلافات ناشی از فضای خالی هنگام مقایسه خطوط، می‌توانید از آن با -w استفاده کنید.

git diff --stat

تغییرات هر فایل در طول زمان را نشان می‌دهد. می‌توانید سه پارامتر به آن اضافه کنید: width برای تغییر عرض پیش‌فرض، name-width برای تنظیم عرض filename و count برای محدود کردن خروجی برای اولین شماره خطوط

$ git diff --stat
 index.php | 83 +++++++++++++++++++++++++++++---------------------------
 1 file changed, 43 insertions(+), 40 deletions(-)
$ git diff --stat-width=10
 index.php | 83 +++---
 1 file changed, 43 insertions(+), 40 deletions(-)

^git reset --soft HEAD

می‌توانید برای یک commit معین، head را ریست کنید، بدون اینکه به ایندکس فایل‌ها و درخت‌ها دست بزنید. تمام تغییرات انجام شده بعد از این commit به مرحله "staged for commit" منتقل می‌شوند. بعد از آن فقط لازم است که git commit را اجرا کنید تا آن‌ها اضافه شوند.

git stash branch [branch-name] [stash]

این دستور یک شاخه جدید به نام branch-name را ایجاد کرده و آن را چک می‌کند، سپس تغییرات از روی stash معینی اعمال می‌شوند. اگر هیچ stash‌ای مشخص نشده باشد، از آخرین 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 قبلی خودتان را، به جای آن که یکی دیگر بسازید، تغییر دهید. اگر شما تغییرات خود را به یک شاخه ریموت push کنید، می‌توانید از این دستور برای اصلاح آخرین commit، اضافه کردن آخرین تغییرات و حتی تغییر پیغام commit خود استفاده کنید.

git pull --rebase

این دستور ابتدا عمل pull  را روی تغییرات اعمال می‌کند و سپس commit‌های unpushed را بالای آخرین ورژن شاخه ریموت rebase می‌کند. گزینه rebase-- می‌تواند برای اطمینان از سوابق خطی با جلوگیری از ادغام غیرضروری commit‌ها مورد استفاده قرار گیرد.

git add -p

وقتی از این دستور استفاده می‌کنید، به جای آنکه تغییرات بلافاصله به ایندکس اضافه شوند، با هر تغییر، در مورد کاری که می‌خواهید همراه با آن انجام دهید سوال می‌کند. به این ترتیب به شما اجازه می‌دهد تا به طور تعاملی دقیقا همان چیزی را که می‌خواهید انجام شود را انتخاب کنید.

diff --git a/package.json b/package.json
index db78332..a814f7e 100644
--- a/package.json
+++ b/package.json
@@ -6,7 +6,6 @@
   },
   "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,?]?