Fa-git-git-fix-mistakes

提供:Dev Guides
移動先:案内検索

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نمایشمیدهد

gitチュートリアル gitチュートリアル

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نیزنشانمیدهدکهتغییراتمحلینیزحذفشدهاند