كيفية العودة إلى الالتزام الأخير في التاريخ بعد أن استخدمت إعادة تعيين بوابة للذهاب إلى مجموعة تغييرات قديمة?
سؤال
لنفترض أن تاريخي يسير على هذا النحو :
أ-ب-ج-د (ماجستير)
إذا كنت تفعل 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
.
لم أكن أعرف ما كان عليه ، ولكن الآن أستطيع أن أرى أنه سجل لجميع المراجع التي أشار إليها رئيس.