Fa-git-git-fix-mistakes
Git-رفعاشتباهات
تمامVCSهایکویژگیبرایاصلاحخطاهاتانقطهایخاصدرنظرگرفتهاندgitのویژگیایفراهمآوردهاستکهبااستفادهازآنمیتوانیمبرخیدستکاریهایمانرابهحالتقبلبرگردانیم。
تواناییبازگشتبهحالتقبلدرمواردیکهکاربربطورتصادفیبرخیدستکاریهارارویانبارمحلیانجامدادهاست、ومیخواهدآنهاراحذفکند、نقشکلیدیایفامیکند。
بازگرداندنتغییراتیکهcommitنشدهاند
Jerryبطورتصادفیفایلیرادرانبارمحلیخودشدستکاریکردهاست。 امااومیداندکهمیخواهددستکاریشراازبینببرد。 برایکنترلکردنچنینموقعیتی、مامیتوانیمازدستور git checkout استفادهکنیم。 باایندستورمحتواییکفایلرامیتوانیمبهحالتقبلبرگردانیم。
مامیتوانیمازدستور git checkout برایبازیابیفایلهایپاکشدهازانبارمحلیهماستفادهکنیم。 Tomیکفایلراازانبارمحلیخودشپاککردهوحالامامیخواهیمآنرابرگردانیم。 مامیتوانیمازgit checkoutاستفادهکنیم
Fitکاراکتر D راقبلازفایلهاییکهپاکشدهاندنشانمیدهد。
- نکته:*مامیتوانیمتماماینکارهاراقبلازcommitکردنتغییراتانجامدهیم。
StاAreaکردنتغییراتازステージングエリア
دیدیمکهباgit add)عملیاتافزودن(یکفایلازانبارمحلیبهステージングエリアمنتقلمیشود。 اگرکاربر、تصادفیفایلیرادستکاریوسپسبهمنتقلکرد、ولیناگهانیمتوجهشدکهاشتباهکردهاستومیخواهدتغییراتشرابازگرداند、درچنینحالتیمیتوانیماز* gitのチェックアウト*استفادهکنیم
درGitまたはヘッドポインターوجودداردکههمیشهرویآخرینcommit)درواقعコミットポインターهمهست(قراردارد。 اگرشمابخواهیدکهیکتغییرراازステージングエリアبازگردانید、میتوانیدازدستورgitのチェックアウトاستفادهکنید、امابایدیکپارامتردیگرراهمبهدستوراضافهکنیدکهآنヘッドポインタاست。 作業ツリー作業ツリーリセットリセットリセットステージングエリアステージングエリア作業エリアリセット作業ツリーリセット
続きを読むTomیکفایلازانبارمحلیرادستکاریکردهاست。 اگرماوضعیتفایلراباgit statusواررسیکنیم、میبینیمکهفایلدستکاریشدهولیهنوزبهstaging areaافزودهرددستواو
Gitステータスنشانمیدهدکهفایلاکنوندرステージングエリアقراردارد、حالاباgit checkoutفایلرابرگرداندهووضعیتآنراباییم
منتقلکردنヘッドポインターباgit reset
بعدازانجامچندتغییرممکناستتصمیمبگیریمآنهاراپاک1件のコメント دستورgit resetبرایresetیاپاککردنبرخیتغییراتبکارمیرود。 مامیتوانیمسهنوعمتفاوتبازگردانییاresetراانجامدهیم
دیاگرامزیرنموداروضعیتヘッドポインターراقبلوبعدازresetنمایشمیدهد
Soft
هرbranchیکhead ponterداردکهرویآخرینcommitقراردارد。 اگرازدستورgit resetبا-softاستفادهکنیمودرادامهاشコミットIDموردنظررابیاوریمヘッドポインター
コミットID、ヘッドポインターهابرایهرブランチدرآدرسینظیرآدرسزیرکهبرایマスターブランチاست、ذخیرهمیشوند .git/refs/heads/master مممیتوانیماب
git log -2コミットIDをコミットرامیبینیمコミットIDを取得بالایکسانخواهدبود
دستوراتبالانتایجزیررادربرخواهندداشت
حالابیاییدHEAD POINTERリセットکنیم
حالامافقطhead pointerرابهاندازهیکcommit、リセットکردیم。 بیاییدمحتوای git/refs/heads/master file
コミットIDتغییرکردهاست、حالابازبینیمیکنیم
دستوراتبالانتایجزیررادربرخواهندداشت:
混合した
دستورgit reset --mixedتغییراتیراازstaging areaبازمیگرداندکههنوزcommitنشدهباشند。 فقareaتغییراتراازステージングエリアبرمیگرداند。 تغییراتواقعیکهدرفایلدادهشدهانددستنخوردهمیمانند。 دستورپیشفرضgit resetمعادلgit reset --mixedاست
hard
اگراز—hardاستفادهکنیمステージングエリアپاکمیشودヘッドポインターبهآخرینcommitیایکcommitخاصリセットشدهوتمامفایلهایمحلیااهتغییاکهغ
بیایدコミットIDراچککنیم
دستوراتبالانتایجزیررادربرخواهندداشت:
Jerryفایلرابااضافهکردنیکخطتوضیحدرابتدایفایلدستکاریمیکند
gitステータスبازبینیمیکند:
Jerryفایلرابهステージングエリアمیافزایدوبازبینیمیکند:
دستوراتبالانتایجزیررادربرخواهندداشت:
git statusステージングエリアاست。میدهدکهفایلاکنوندر。 حالادستورgit reset --hardراواردمیکنیم
دستورباموفقیتاجراودرنتیجهآنفایلازステージングエリアحذفشدوهمچنینتغییراتیکهدرانبارمددشدد
gitステータスنشانمیدهدکهفایلازステージングエリアبرداشتهشدهاست
دستورheadنیزنشانمیدهدکهتغییراتمحلینیزحذفشدهاند