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

StackOverflow https://stackoverflow.com/questions/2540505

  •  23-09-2019
  •  | 
  •  

سؤال

لنفترض أن تاريخي يسير على هذا النحو :

أ-ب-ج-د (ماجستير)

إذا كنت تفعل git reset B, ، سأحضر :

أ - ب (ماجستير)

المشكلة هي, git log الآن أرني فقط التاريخ من أ إلى ب ، ولا يمكنني رؤية ج و د بعد الآن.

كيف يمكنني العودة إلى د ?

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

المحلول

يجب أن تكون قادرًا على رؤية D مع git reflog.

انظر الى هذا مقال على سبيل المثال.

يتم حذف الوقت الوحيد الذي يتم حذفه في الواقع هو إذا كنت GIT GC -prune (لذا كن حذرًا مع ذلك!).

إذا قمت بتشغيل git levog الآن في مستودع كنت تعمل فيه ، فسترى الكثير من التغييرات التي تبدو مثل هذا:

c5c3a82... HEAD@{0}: pull origin featureB: Merge made by recursive.
49d0608... HEAD@{1}: reset --hard HEAD^: updating HEAD
3ed01b1... HEAD@{2}: pull origin featureA: Merge made by recursive.
49d0608... HEAD@{3}: pull origin bugfixJ: Merge made by recursive.
854d44e... HEAD@{4}: commit: Add more cowbell to foo.c
6dbc22d... HEAD@{5}: pull origin bugfixI: Merge made by recursive.
9bdb763... HEAD@{6}: commit: Remove weevils
8518f9d... HEAD@{7}: checkout: moving from wickedfeature to master

يمكن تقسيم هذه الخطوط إلى 4 أجزاء:

  • ارتكاب التجزئة ،
  • مؤشر ارتكاب ،
  • عمل،
  • ومعلومات إضافية.

إذا أردنا استعادة الالتزام الذي ضاع في HEAD@{1}, ، يمكننا فقط git reset --hard HEAD@{2}.
الآن يتم تعيين فرعنا الحالي (ونسخة العمل) على حالة المستودع قبل أن نقوم بإعادة التعيين.

إذا أردنا أن نرى ما هي تلك الحالة ، يمكننا git checkout -b temp HEAD@{2} (أو git checkout HEAD@{2} إذا كان لديك Git 1.5.0 وما فوق).

نصائح أخرى

حسنا ، وجدته.

يمكنك استخدام git reflog.

لم أكن أعرف ما كان عليه ، ولكن الآن أستطيع أن أرى أنه سجل لجميع المراجع التي أشار إليها رئيس.

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