Fa-git-git-fix-mistakes
Git-رفعاشتباهات
تمامVCSهایکویژگیبرایاصلاحخطاهاتانقطهایخاصدرنظرگرفتهاندgitのویژگیایفراهمآوردهاستکهبااستفادهازآنمیتوانیمبرخیدستکاریهایمانرابهحالتقبلبرگردانیم。
تواناییبازگشتبهحالتقبلدرمواردیکهکاربربطورتصادفیبرخیدستکاریهارارویانبارمحلیانجامدادهاست、ومیخواهدآنهاراحذفکند、نقشکلیدیایفامیکند。
بازگرداندنتغییراتیکهcommitنشدهاند
Jerryبطورتصادفیفایلیرادرانبارمحلیخودشدستکاریکردهاست。 امااومیداندکهمیخواهددستکاریشراازبینببرد。 برایکنترلکردنچنینموقعیتی、مامیتوانیمازدستور git checkout استفادهکنیم。 باایندستورمحتواییکفایلرامیتوانیمبهحالتقبلبرگردانیم。
[jerry@CentOS src]$ pwd
/home/jerry/jerry_repo/project/src
[jerry@CentOS src]$ git status -s
M string_operations.c
[jerry@CentOS src]$ git checkout string_operations.c
[jerry@CentOS src]$ git status –s
مامیتوانیمازدستور git checkout برایبازیابیفایلهایپاکشدهازانبارمحلیهماستفادهکنیم。 Tomیکفایلراازانبارمحلیخودشپاککردهوحالامامیخواهیمآنرابرگردانیم。 مامیتوانیمازgit checkoutاستفادهکنیم
[tom@CentOS src]$ pwd
/home/tom/top_repo/project/src
[tom@CentOS src]$ ls -1
Makefile
string_operations.c
[tom@CentOS src]$ rm string_operations.c
[tom@CentOS src]$ ls -1
Makefile
[tom@CentOS src]$ git status -s
D string_operations.c
Fitکاراکتر D راقبلازفایلهاییکهپاکشدهاندنشانمیدهد。
[tom@CentOS src]$ git checkout string_operations.c
[tom@CentOS src]$ ls -1
Makefile
string_operations.c
[tom@CentOS src]$ git status -s
- نکته:*مامیتوانیمتماماینکارهاراقبلازcommitکردنتغییراتانجامدهیم。
StاAreaکردنتغییراتازステージングエリア
دیدیمکهباgit add)عملیاتافزودن(یکفایلازانبارمحلیبهステージングエリアمنتقلمیشود。 اگرکاربر、تصادفیفایلیرادستکاریوسپسبهمنتقلکرد、ولیناگهانیمتوجهشدکهاشتباهکردهاستومیخواهدتغییراتشرابازگرداند、درچنینحالتیمیتوانیماز* gitのチェックアウト*استفادهکنیم
درGitまたはヘッドポインターوجودداردکههمیشهرویآخرینcommit)درواقعコミットポインターهمهست(قراردارد。 اگرشمابخواهیدکهیکتغییرراازステージングエリアبازگردانید、میتوانیدازدستورgitのチェックアウトاستفادهکنید、امابایدیکپارامتردیگرراهمبهدستوراضافهکنیدکهآنヘッドポインタاست。 作業ツリー作業ツリーリセットリセットリセットステージングエリアステージングエリア作業エリアリセット作業ツリーリセット
続きを読むTomیکفایلازانبارمحلیرادستکاریکردهاست。 اگرماوضعیتفایلراباgit statusواررسیکنیم、میبینیمکهفایلدستکاریشدهولیهنوزبهstaging areaافزودهرددستواو
tom@CentOS src]$ pwd
/home/tom/top_repo/project/src
# Unmodified file
[tom@CentOS src]$ git status -s
# Modify file and view it’s status.
[tom@CentOS src]$ git status -s
M string_operations.c
[tom@CentOS src]$ git add string_operations.c
Gitステータスنشانمیدهدکهفایلاکنوندرステージングエリアقراردارد、حالاباgit checkoutفایلرابرگرداندهووضعیتآنراباییم
[tom@CentOS src]$ git checkout HEAD -- string_operations.c
[tom@CentOS src]$ git status -s
منتقلکردنヘッドポインターباgit reset
بعدازانجامچندتغییرممکناستتصمیمبگیریمآنهاراپاک1件のコメント دستورgit resetبرایresetیاپاککردنبرخیتغییراتبکارمیرود。 مامیتوانیمسهنوعمتفاوتبازگردانییاresetراانجامدهیم
دیاگرامزیرنموداروضعیتヘッドポインターراقبلوبعدازresetنمایشمیدهد
Soft
هرbranchیکhead ponterداردکهرویآخرینcommitقراردارد。 اگرازدستورgit resetبا-softاستفادهکنیمودرادامهاشコミットIDموردنظررابیاوریمヘッドポインター
コミットID、ヘッドポインターهابرایهرブランチدرآدرسینظیرآدرسزیرکهبرایマスターブランチاست、ذخیرهمیشوند .git/refs/heads/master مممیتوانیماب
[jerry@CentOS project]$ cat .git/refs/heads/master
577647211ed44fe2ae479427a0668a4f12ed71a1
git log -2コミットIDをコミットرامیبینیمコミットIDを取得بالایکسانخواهدبود
[jerry@CentOS project]$ git log -2
دستوراتبالانتایجزیررادربرخواهندداشت
commit 577647211ed44fe2ae479427a0668a4f12ed71a1
Author: Tom Cat <tom@finddevguides.com>
Date: Wed Sep 11 10:21:20 2013 +0530
Removed executable binary
commit 29af9d45947dc044e33d69b9141d8d2dad37cc62
Author: Jerry Mouse <jerry@finddevguides.com>
Date: Wed Sep 11 10:16:25 2013 +0530
Added compiled binary
حالابیاییدHEAD POINTERリセットکنیم
[jerry@CentOS project]$ git reset --soft HEAD~
حالامافقطhead pointerرابهاندازهیکcommit、リセットکردیم。 بیاییدمحتوای git/refs/heads/master file
[jerry@CentOS project]$ cat .git/refs/heads/master
29af9d45947dc044e33d69b9141d8d2dad37cc62
コミットIDتغییرکردهاست、حالابازبینیمیکنیم
jerry@CentOS project]$ git log -2
دستوراتبالانتایجزیررادربرخواهندداشت:
commit 29af9d45947dc044e33d69b9141d8d2dad37cc62
Author: Jerry Mouse <jerry@finddevguides.com>
Date: Wed Sep 11 10:16:25 2013 +0530
Added compiled binary
commit 94f7b26005f856f1a1b733ad438e97a0cd509c1a
Author: Jerry Mouse <jerry@finddevguides.com>
Date: Wed Sep 11 10:08:01 2013 +0530
Added Makefile and renamed strings.c to string_operations.c
混合した
دستورgit reset --mixedتغییراتیراازstaging areaبازمیگرداندکههنوزcommitنشدهباشند。 فقareaتغییراتراازステージングエリアبرمیگرداند。 تغییراتواقعیکهدرفایلدادهشدهانددستنخوردهمیمانند。 دستورپیشفرضgit resetمعادلgit reset --mixedاست
hard
اگراز—hardاستفادهکنیمステージングエリアپاکمیشودヘッドポインターبهآخرینcommitیایکcommitخاصリセットشدهوتمامفایلهایمحلیااهتغییاکهغ
بیایدコミットIDراچککنیم
[jerry@CentOS src]$ pwd
/home/jerry/jerry_repo/project/src
[jerry@CentOS src]$ git log -1
دستوراتبالانتایجزیررادربرخواهندداشت:
commit 577647211ed44fe2ae479427a0668a4f12ed71a1
Author: Tom Cat <tom@finddevguides.com>
Date: Wed Sep 11 10:21:20 2013 +0530
Removed executable binary
Jerryفایلرابااضافهکردنیکخطتوضیحدرابتدایفایلدستکاریمیکند
[jerry@CentOS src]$ head -2 string_operations.c
/*This line be removed by git reset operation*/
#include <stdio.h>
gitステータスبازبینیمیکند:
[jerry@CentOS src]$ git status -s
M string_operations.c
Jerryفایلرابهステージングエリアمیافزایدوبازبینیمیکند:
[jerry@CentOS src]$ git add string_operations.c
[jerry@CentOS src]$ git status
دستوراتبالانتایجزیررادربرخواهندداشت:
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
#
modified: string_operations.c
#
git statusステージングエリアاست。میدهدکهفایلاکنوندر。 حالادستورgit reset --hardراواردمیکنیم
[jerry@CentOS src]$ git reset --hard 577647211ed44fe2ae479427a0668a4f12ed71a1
HEAD is now at 5776472 Removed executable binary
دستورباموفقیتاجراودرنتیجهآنفایلازステージングエリアحذفشدوهمچنینتغییراتیکهدرانبارمددشدد
[jerry@CentOS src]$ git status -s
gitステータスنشانمیدهدکهفایلازステージングエリアبرداشتهشدهاست
[jerry@CentOS src]$ head -2 string_operations.c
#include <stdio.h>
دستورheadنیزنشانمیدهدکهتغییراتمحلینیزحذفشدهاند