سؤال

كيف يمكنني عرض أي التزامات محلية قمت بها، ولم يتم دفعها بعد إلى المستودع البعيد؟أحياناً، git status ستتم طباعة أن الفرع الخاص بي هو X الذي يلتزم به مسبقًا origin/master, ، لكن ليس دائما.

هل هذا خطأ في تثبيت Git الخاص بي، أم أنني أفتقد شيئًا ما؟

هل كانت مفيدة؟

المحلول

git log origin/master..HEAD

يمكنك أيضا عرض DIFF باستخدام بناء الجملة

git diff origin/master..HEAD

نصائح أخرى

إذا كنت ترغب في رؤية كل ارتكاب جميع الفروع التي لم يتم دفعها بعد، فقد تبحث عن شيء مثل هذا:

git log --branches --not --remotes

وإذا كنت ترغب فقط في رؤية أحدث الالتزام على كل فرع، وأسماء الفرع، هذا:

git log --branches --not --remotes --simplify-by-decoration --decorate --oneline

يمكنك إظهار كل يرتكب لديك محليا ولكن ليس المنبع مع

git log @{u}..

@{u} أو @{upstream} يعني فرع المنبع للفرع الحالي (انظر git rev-parse --help أو git help revisions للتفاصيل).

هذا عملت بالنسبة لي:

git cherry -v 

كما هو مبين في بوابة: انظر جميع ارتكاب كل شيء غير واضح أو يرتكب ذلك ليس في فرع آخر.

يمكنك القيام بذلك مع git log:

git log origin..

افترض أن origin هو اسم المنبع الخاص بك، وإخراج أي اسم مراجعة بعد .. يدل HEAD, التي تسرد الالتزام الجديد الذي لم يتم دفعه.

مفيد جيت الاسم المستعار للبحث عن اختلاف تيار فرع:

alias unpushed = !GIT_CURRENT_BRANCH=$(git name-rev --name-only HEAD) && git log origin/$GIT_CURRENT_BRANCH..$GIT_CURRENT_BRANCH --oneline

ما يفعل هذا أساسا:

git log origin/branch..branch

ولكن أيضا يحدد اسم الفرع الحالي.

جميع الإجابات الأخرى تتحدث عن "المنبع" (الفرع الذي تسحب منه).
لكن أ الفرع المحلي يستطيع يدفع إلى أ مختلف فرع من الذي يسحب منه.

master قد لا يتم الدفع إلى فرع التتبع عن بعد "origin/master".
ال المنبع فرع ل master قد يكون origin/master, ، ولكن يمكن أن يدفع إلى فرع التتبع عن بعد origin/xxx او حتى anotherUpstreamRepo/yyy.
يتم تعيين تلك بواسطة branch.*.pushremote للفرع الحالي جنبا إلى جنب مع global remote.pushDefault قيمة.

إنها الذي - التي فرع التتبع عن بعد والذي يتم احتسابه عند البحث عن الالتزامات غير المدفوعة:الذي يتتبع branch at the remote أين ال الفرع المحلي سيتم دفعه إلى.
ال branch at the remote يمكن أن يكون، مرة أخرى، origin/xxx او حتى anotherUpstreamRepo/yyy.

يقدم Git 2.5+ (الربع الثاني من عام 2015) اختصارًا جديدًا لذلك: <branch>@{push}

يرى ارتكاب 29bc885, ارتكاب 3dbe9db, ارتكاب adfe5d0, ارتكاب 48c5847, ارتكاب a1ad0eb, ارتكاب e291c75, ارتكاب 979cb24, ارتكاب 1ca41a1, ارتكاب 3a429d0, ارتكاب a9f9f8c, ارتكاب 8770e6f, ارتكاب da66b27, ارتكاب f052154, ارتكاب 9e3751d, الالتزام ee2499f [الكل من 21 مايو 2015]، و ارتكاب e41bf35 [01 مايو 2015] بواسطة جيف كينغ (peff).
(تم الدمج بواسطة جونيو سي هامانو -- gitster -- في ارتكاب c4a8354, ، 05 يونيو 2015)

ارتكاب adfe5d0 يشرح:

sha1_name:ينفذ @{push} الاختزال

في سير العمل الثلاثي، قد يكون لكل فرع نقطتين مميزتين من الاهتمام:ال @{upstream} التي تنسحب منها عادةً، والوجهة التي تدفع إليها عادةً.ليس هناك اختصار للأخير، ولكن من المفيد أن يكون لديك.

على سبيل المثال، قد ترغب في معرفة الالتزامات التي لم تدفعها بعد:

git log @{push}..

أو كمثال أكثر تعقيدا، تخيل أنك عادة تسحب التغييرات من origin/master (الذي قمت بتعيينه كـ @{upstream})، ودفع التغييرات إلى مفترقك الشخصي (على سبيل المثال، مثل myfork/topic).
يمكنك الدفع إلى شوكتك من أجهزة متعددة، مما يتطلب منك ذلك دمج التغييرات من وجهة الدفع، بدلاً من المنبع.
مع هذا التصحيح، يمكنك فقط القيام بما يلي:

git rebase @{push}

بدلاً من كتابة الاسم الكامل.

ارتكاب 29bc885 يضيف:

for-each-ref:يقبل "%(push)" شكل

تماما كما لدينا "%(upstream)" للإبلاغ عن "@{upstream}"لكل مرجع، يضيف هذا التصحيح"%(push)" كثيرا "@{push}".
وهو يدعم نفس معدّلات تنسيق التتبع مثل المنبع (لأن قد ترغب في معرفة، على سبيل المثال، ما هي الفروع التي يجب دفعها).

إذا كنت تريد معرفة عدد فروعك المحلية أمام / خلف مقارنة بالفرع الذي تدفع إليه:

git for-each-ref --format="%(refname:short) %(push:track)" refs/heads

بامكانك ان تحاول....

gitk

أعلم أنه ليس خيارا لسطر أمر نقي ولكن إذا كنت قد قمت بتثبيته وهناك على نظام واجهة المستخدم الرسومية، فهذه طريقة رائعة لرؤية ما تبحث عنه بالضبط بالإضافة إلى أكثر بكثير.

(أنا فعلا نوع من فاجأ لا أحد ذكره حتى الآن.)

git branch -v سوف تظهر، لكل فرع محلي، سواء كان "قدما" أم لا.

يمكنني استخدام الاسم المستعار التالي للحصول على قائمة الملفات (والحالة) التي تم ارتكابها ولكنها لم يتم دفعها (للفرع الحالي)

git config --global alias.unpushed \
"diff origin/$(git name-rev --name-only HEAD)..HEAD --name-status"

ثم فقط تفعل:

git unpushed

كان لدي ارتكاب فعلت سابقا، لم يتم دفعها إلى أي فرع، ولا عن بعد ولا محلي. فقط الالتزام. لا شيء من الإجابات الأخرى عملت لي، ولكن مع:

git reflog

هناك وجدت ارتكابي.

أعتقد أن الطريقة الأكثر نموذجية للقيام بذلك هي تشغيل شيء مثل:

git cherry --abbrev=7 -v @{upstream}

ومع ذلك، أنا شخصيا أفضل تشغيل:

git log --graph --decorate --pretty=oneline --abbrev-commit --all @{upstream}^..

مما يدل على ارتكاب الكل الفروع التي لم يتم دمجها في المنبع، بالإضافة إلى آخر الالتزام في المنبع (الذي يظهر كعقدة جذرية لجميع الجميلات الأخرى). أنا استخدمه في كثير من الأحيان أنني قمت بإنشاء الاسم المستعار noup لذلك.

git config --global alias.noup \
'log --graph --decorate --pretty=oneline --abbrev-commit --all @{upstream}^..'

أنها ليست علة. ما تراه ربما هو حالة GIT بعد دمج تلقائي فاشل حيث يتم جلب التغييرات من جهاز التحكم عن بعد ولكن لم يتم دمجها بعد.

لرؤية الالتزام بين الريبو المحلي والبعيدة القيام بذلك:

git fetch

هذه آمنة بنسبة 100٪ ولن تسخر نسخة عملك. إذا كانت هناك تغييرات git status ويل تظهر X commits ahead of origin/master.

يمكنك الآن إظهار سجل الالتزام الموجود في جهاز التحكم عن بعد ولكن ليس في المحلي:

git log HEAD..origin

أقترح عليك أن ترى البرنامج النصي https://github.com/badele/gitcheck., لقد ترميز هذا البرنامج النصي للتحقق في واحدة تمرير جميع مستودعاتك البذرة، ويعرض من لم يرتكب والذين لم يدفع / سحبوا.

هنا نتيجة عينة enter image description here

git cherry -v

سيؤدي ذلك إلى سرد هذا تاريخ تعليقك المحلي (لم يدفع بعد) مع الرسالة المقابلة

هناك أداة اسمه غير مخطئ الذي يقوم بمسح جميع Repos GIT و Mercurial و Subversion في دليل العمل المحدد ويبين قائمة الملفات UCommited و ارتكب غير مخطئ. التثبيت بسيط تحت لينكس:

$ easy_install --user unpushed

أو

$ sudo easy_install unpushed

لتثبيت على مستوى النظام.

الاستخدام بسيط جدا:

$ unpushed ~/workspace
* /home/nailgun/workspace/unpushed uncommitted (Git)
* /home/nailgun/workspace/unpushed:master unpushed (Git)
* /home/nailgun/workspace/python:new-syntax unpushed (Git)

يرى unpushed --help أو الوصف الرسمي للمزيد من المعلومات. كما أن لديها سيناريو كرونجوب unpushed-notify للإخطار على الشاشة للتغيرات غير المرنة وغير المنفصلة.

هذا عمل أفضل بالنسبة لي:

git log --oneline @{upstream}..

أو:

git log --oneline origin/(remotebranch)..

مماثلة: عرض الفروع غير المكتسب:

git branch --all --no-merged

يمكن أن تكون المشتبه فيها ولكني أوصي بالإجابة من قبل CXREG

لإدراج جميع الالتزام غير المنفصلين في جميع الفروع يمكنك بسهولة استخدام هذا الأمر:

 git log --branches  @{u}..

إذا كان عدد الالتزام الذي لم يتم دفعه هو رقم واحد رقم واحد، فغالبا ما يكون هو أسهل طريقة:

$ git checkout

يستجيب GIT من خلال إخبارك بأنك "قدما N ارتكب" نسبية أصلك. حتى الآن فقط احتفظ بهذا الرقم في الاعتبار عند عرض سجلات. إذا كنت "قدما بنسبة 3 ارتكب"، فإن أعلى 3 ارتكب في التاريخ لا يزال خاصا.

إحدى طرق القيام بالأشياء هي قائمة ارتكابها متوفرة على فرع واحد ولكن ليس آخر.

git log ^origin/master master

إليك حلا محموتي (SHELT SCRIPT الذي يعمل على Windows أيضا بدون تثبيت إضافي) يظهر الاختلافات من الأصل لجميع الفروع: git-fetch-log

مثال على الإخراج:

==== branch [behind 1]

> commit 652b883 (origin/branch)
| Author: BimbaLaszlo <bimbalaszlo@gmail.com>
| Date:   2016-03-10 09:11:11 +0100
|
|     Commit on remote
|
o commit 2304667 (branch)
  Author: BimbaLaszlo <bimbalaszlo@gmail.com>
  Date:   2015-08-28 13:21:13 +0200

      Commit on local

==== master [ahead 1]

< commit 280ccf8 (master)
| Author: BimbaLaszlo <bimbalaszlo@gmail.com>
| Date:   2016-03-25 21:42:55 +0100
|
|     Commit on local
|
o commit 2369465 (origin/master, origin/HEAD)
  Author: BimbaLaszlo <bimbalaszlo@gmail.com>
  Date:   2016-03-10 09:02:52 +0100

      Commit on remote

==== test [ahead 1, behind 1]

< commit 83a3161 (test)
| Author: BimbaLaszlo <bimbalaszlo@gmail.com>
| Date:   2016-03-25 22:50:00 +0100
|
|     Diverged from remote
|
| > commit 4aafec7 (origin/test)
|/  Author: BimbaLaszlo <bimbalaszlo@gmail.com>
|   Date:   2016-03-14 10:34:28 +0100
|
|       Pushed remote
|
o commit 0fccef3
  Author: BimbaLaszlo <bimbalaszlo@gmail.com>
  Date:   2015-09-03 10:33:39 +0200

      Last common commit

معلمات مرت لسجل، على سبيل المثال --oneline أو --patch يمكن استعماله.

git show

سوف تظهر كل الضتبئ في ارتكاب المحلي الخاص بك.

git show --name-only

سوف تظهر معرف الالتزام المحلي واسم الالتزام.

git diff origin

على افتراض أن فرعك تم إعداده لتتبع الأصل، ثم يجب أن يظهر لك الاختلافات.

git log origin

سوف تعطيك ملخص ارتكاب.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top