GIT-CHERRY(1) Git Manual GIT-CHERRY(1)

git-cherry - یافتن کامیت‌هایی که هنوز روی بالادست اعمال نشده‌اند

git cherry [-v] [<upstream> [<head> [<limit>]]]

تعیین می‌کند که آیا کامیت‌هایی در <head>..<upstream> وجود دارند که معادل با کامیت‌های موجود در محدوده <limit>..<head> باشند یا خیر.

آزمون هم‌ارزی بر اساس تفاضل (diff)، پس از حذف فاصله‌های خالی و شماره خطوط انجام می‌شود. بنابراین git-cherry تشخیص می‌دهد چه زمانی کامیت‌ها به وسیله git-cherry-pick(1)، git-am(1) یا git-rebase(1) کپی شده‌اند.

شناسه SHA1 هر کامیت را در محدوده <limit>..<head> خروجی می‌دهد، با پیشوند - برای کامیت‌هایی که معادلی در <upstream> دارند، و + برای کامیت‌هایی که معادلی ندارند.

-v

نمایش موضوع (subject) کامیت‌ها در کنار شناسه‌های SHA1.

<upstream>

شاخه بالادست (upstream) برای جستجوی کامیت‌های هم‌ارز. پیش‌فرض، شاخه بالادست HEAD است.

<head>

شاخه کاری؛ پیش‌فرض HEAD است.

<limit>

عدم گزارش کامیت‌ها تا سقف (و شامل) limit.

دستور git-cherry معمولاً در گردش‌های کاری مبتنی بر وصله (patch) استفاده می‌شود (به gitworkflows(7) مراجعه کنید) تا مشخص شود آیا مجموعه‌ای از وصله‌ها توسط نگه‌دارنده بالادست اعمال شده‌اند یا خیر. در چنین گردش کاری ممکن است یک شاخه موضوعی (topic branch) ایجاد کرده و ارسال کنید:

$ git checkout -b topic origin/master
# کار کنید و چند کامیت بسازید
$ git format-patch origin/master
$ git send-email ... 00*

بعداً می‌توانید ببینید که آیا تغییرات شما اعمال شده‌اند یا خیر (همچنان روی شاخه topic):

$ git fetch  # به‌روزرسانی تصور شما از origin/master
$ git cherry -v

در وضعیتی که شاخه topic شامل سه کامیت باشد و نگه‌دارنده دو مورد از آنها را اعمال کرده باشد، وضعیت ممکن است به این شکل باشد:

$ git log --graph --oneline --decorate --boundary origin/master...topic
* 7654321 (origin/master) upstream tip commit
[... حذف چند کامیت دیگر ...]
* cccc111 cherry-pick of C
* aaaa111 cherry-pick of A
[... حذف موارد بسیار بیشتری که رخ داده است ...]
| * cccc000 (topic) commit C
| * bbbb000 commit B
| * aaaa000 commit A
|/
o 1234567 branch point

در چنین مواردی، git-cherry خلاصه‌ای دقیق از آنچه هنوز باید اعمال شود را نشان می‌دهد:

$ git cherry origin/master topic
- cccc000... commit C
+ bbbb000... commit B
- aaaa000... commit A

در اینجا می‌بینیم که کامیت‌های A و C (علامت‌گذاری‌شده با -) را می‌توان هنگام ری‌بیس کردن روی origin/master از شاخه topic خود کنار گذاشت، در حالی که کامیت B (علامت‌گذاری‌شده با +) همچنان باید نگه‌داشته شود تا برای اعمال به origin/master ارسال گردد.

پارامتر اختیاری <limit> در مواردی مفید است که شاخه topic شما بر پایه کار دیگری باشد که در بالادست نیست. با بسط دادن مثال قبلی، ممکن است وضعیت به این شکل باشد:

$ git log --graph --oneline --decorate --boundary origin/master...topic
* 7654321 (origin/master) upstream tip commit
[... حذف چند کامیت دیگر ...]
* cccc111 cherry-pick of C
* aaaa111 cherry-pick of A
[... حذف موارد بسیار بیشتری که رخ داده است ...]
| * cccc000 (topic) commit C
| * bbbb000 commit B
| * aaaa000 commit A
| * 0000fff (base) unpublished stuff F
[... حذف ...]
| * 0000aaa unpublished stuff A
|/
o 1234567 merge-base between upstream and topic

با مشخص کردن base به عنوان limit، می‌توانید از فهرست کردن کامیت‌های بین base و topic جلوگیری کنید:

$ git cherry origin/master topic base
- cccc000... commit C
+ bbbb000... commit B
- aaaa000... commit A

git-patch-id(1)

بخشی از مجموعه git(1)

2026-06-29 Git 2.55.0