it-swarm.asia

كيفية الاختلاف بين التغييرات المحلية غير الملتزم بها والأصل

لنفترض أنني قمت باستنساخ مستودع وبدأت في تعديل الملفات. أعلم أنه إذا كان لدي تغييرات محلية غير ملتزم بها ، فيمكنني إجراء فرق كما يلي git diff test.txt وسيظهر لي الفرق بين التغييرات الحالية المحلية [HEAD والتغييرات غير الملتزم بها في الملف. إذا ارتكبت تلك التغييرات ، فيمكنني التمييز بينها وبين مستودع التخزين الأصلي باستخدام git diff master Origin/master

ولكن هل هناك أي طريقة لنشر التغييرات المحلية مع المستودع الأصلي على الخادم قبل الالتزام محليًا؟ حاولت العديد من التباديل من git diff --cached master Origin/master مع عدم وجود حظ.

125
Chaitanya

نظرًا لأن المستودع البعيد قد تم تخزينه مؤقتًا عبر git fetch ، فيجب أن يكون من الممكن مقارنته بهذه الالتزامات. حاول القيام بما يلي:

$ git fetch Origin
$ git diff Origin/master
120
JJD

أعلم أنها ليست إجابة للسؤال المحدد الذي طرحته ، لكنني وجدت هذا السؤال يبحث عن اختلاف ملف في فرع وملف محلي غير ملتزم وكنت أتصور أنني سأشاركه

بناء الجملة:

git diff <commit-ish>:./ -- <path>

أمثلة:

git diff Origin/master:./ -- README.md
git diff HEAD^:./ -- README.md
git diff [email protected]{0}:./ -- README.md
git diff 1A2B3C4D:./ -- README.md

(شكرًا لـ Eric Boehs على طريقة لا تضطر إلى كتابة اسم الملف مرتين)

32
Nate

لمشاهدة التغييرات غير المرحلية (غير المضافة) على الملفات الموجودة

git diff

لاحظ أن هذا لا يتتبع الملفات الجديدة. لمشاهدة التغييرات المرحلية غير الملتزمة

git diff --cached

17
pepestar

إذا كنت تريد مقارنة الملفات بصريًا ، يمكنك استخدام:

git difftool

سيبدأ تطبيق diff تلقائيًا لكل ملف تم تغييره.

ملاحظة: إذا لم تقم بتعيين تطبيق فرق ، فيمكنك القيام بذلك كما هو موضح في المثال أدناه (يمكنني استخدام Winmerge ):

git config --global merge.tool winmerge
git config --replace --global mergetool.winmerge.cmd "\"C:\Program Files (x86)\WinMerge\WinMergeU.exe\" -e -u -dl \"Base\" -dr \"Mine\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\""
git config --global mergetool.Prompt false
6
Caner