برنامه نویسی

Git Reset چیست؟

Summarize this content to 400 words in Persian Lang تنظیم مجدد Git دستوری در سیستم کنترل نسخه Git است که برای بازنشانی وضعیت فعلی مخزن به یک نقطه مشخص استفاده می شود. این یک ابزار قدرتمند است که به شما امکان می دهد تغییرات را لغو کنید، فایل ها را از مرحله خارج کنید و نشانگر HEAD را به یک commit یا شاخه دیگر منتقل کنید.

را git reset از دستور برای لغو تغییرات در فهرست کاری شما و بازگشت به یک commit خاص استفاده می شود و در عین حال تمام commit های انجام شده پس از آن را حذف می کند.

قبل از استفاده git resetمهم است که نوع تغییراتی را که قصد ایجاد آن را دارید در نظر بگیرید. در غیر این صورت، بیش از آنکه خوب باشد، هرج و مرج ایجاد خواهید کرد.

می توانید از چندین گزینه همراه با تنظیم مجدد git استفاده کنید، اما اینها اصلی ترین گزینه ها هستند. هر کدام بسته به شرایط خاصی استفاده می شود: git reset –soft، git reset –mixed، و git reset –hard

👉 تنظیم مجدد نرم: این حالت تغییراتی را که در فهرست کاری و ناحیه مرحله بندی ایجاد کرده اید حفظ می کند، اما نشانگر HEAD را به یک commit دیگر منتقل می کند. بدون حذف هیچ گونه تغییری، به طور موثر، commit ها را “لغو” می کند.

را — soft هدف آن تغییر HEAD (جایی که آخرین commit در ماشین محلی شما است) به یک commit خاص است. به عنوان مثال، اگر متوجه شدیم که فراموش کرده ایم یک فایل را به commit اضافه کنیم، می توانیم با استفاده از — soft با توجه به فرمت زیر:

git reset –soft <commit ID> با <commit ID>

git reset –soft HEAD~n برای بازگشت به commit با یک مرجع خاص (n).

git reset –soft HEAD~1 به آخرین کامیت برمی گردد.

بیایید به چند نمونه نگاه کنیم.

git add test.py data.py

git add test

git commit -m “added test file and data file”

این نتیجه دستور قبلی است.

[master (root-commit) faf864e] added test file and data file
2 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 test.py
create mode 100644 data.py

ما می توانیم وضعیت commit را به صورت زیر بررسی کنیم:

git status

On branch master
Untracked files:
(use “git add <file>…” to include in what will be committed)
demofile.py

nothing added to commit but untracked files present (use “git add” to track)

اما، ما فراموش کردیم که اضافه کنیم demofile.py اسکریپت به commit.

از آنجایی که آخرین commit در HEAD قرار دارد، می‌توانیم با اجرای سه عبارت زیر این مشکل را برطرف کنیم.

با استفاده از این مرحله به مرحله قبل از تعهد بازگردید git reset –soft HEAD اجازه دادن به فایل تنظیم مجدد git.
فایل فراموش شده را با git add اضافه کنید.
تغییرات را با یک commit git commit نهایی انجام دهید.

git reset –soft HEAD

git add demofile.py

git commit -m “added all the python scripts”

نتیجه زیر باعث شد بعد از تمام مراحل قبلی git reset شود:

[master (root-commit) faf864e] added all the python scripts
3 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 test.py
create mode 100644 data.py
create mode 100644 demofile.py

👉 تنظیم مجدد مختلط: این حالت پیش فرض است git reset. نشانگر HEAD را به یک commit دیگر بازنشانی می‌کند و همچنین ناحیه مرحله‌بندی را برای مطابقت با commit مشخص شده بازنشانی می‌کند. با این حال، دایرکتوری کاری شما را بدون تغییر می‌گذارد، بنابراین شما همچنان تغییرات مربوط به commit را در فایل‌های خود خواهید داشت، اما آنها برای commit مرحله بندی نمی‌شوند.

این آرگومان پیش فرض برای تنظیم مجدد git است. اجرای این دستور دو تأثیر دارد: (1) تمام تغییرات را لغو کنید و (2) آنها را از مرحله خارج کنید.

تصور کنید که ما به طور تصادفی آن را اضافه کردیم test.py فایل، و ما می خواهیم آن را حذف کنیم زیرا آزمایش هنوز تمام نشده است.

در اینجا نحوه ادامه کار آمده است:

فایل هایی که در commit بودند را با git reset HEAD از حالت مرحله خارج کنید
فقط فایل هایی را که برای commit نیاز داریم اضافه کنید

git reset HEAD

git status

On branch master
Untracked files:
(use “git add <file>…” to include in what will be committed)
test.py
data.py
demofile.py
nothing added to commit but untracked files present (use “git add” to track)

اکنون می‌توانیم فقط دو فایل آخر را اضافه کنیم و commit را انجام دهیم.

git add data.py demofile.py

git commit -m “Removed the test.py from the commit”

👉 هارد ریست: این حالت نشانگر HEAD را به یک commit دیگر بازنشانی می‌کند و همه تغییرات را در هر دو ناحیه مرحله و دایرکتوری کاری نادیده می‌گیرد. به طور موثر مخزن شما را به وضعیت commit مشخص شده برمی گرداند.

این گزینه پتانسیل خطرناک بودن را دارد. بنابراین، هنگام استفاده از آن احتیاط کنید!

اساساً هنگام استفاده از هارد ریست در یک commit خاص، HEAD را مجبور می کند تا به آن commit برگردد و بعد از آن همه چیزهای دیگر را حذف می کند.

git reset –hard

در اینجا مثالی از نحوه استفاده شما آورده شده است git reset –hard با یک سناریوی عملی:

فرض کنید یک مخزن Git با سابقه commit زیر دارید:

* 7856f73 (HEAD -> main) Commit D
* a6b2c9e Commit C
* e75a4d2 Commit B
* d93cfe1 Commit A

و وضعیت فعلی شما به این صورت است:

شما تغییراتی در فهرست کاری و منطقه مرحله بندی خود دارید.
متوجه می‌شوید که می‌خواهید این تغییرات را کنار بگذارید و مخزن خود را به حالتی که پس از Commit B در آن بود، بازنشانی کنید (e75a4d2).

در اینجا آمده است که چگونه می توانید با استفاده از آن به این هدف برسید git reset –hard:

ابتدا مطمئن شوید که در شاخه ای هستید که می خواهید تنظیم مجدد را انجام دهید. در این مورد، آن است main شاخه

git checkout main

اکنون، هارد ریست را به کامیتی که می خواهید بازنشانی کنید انجام دهید (e75a4d2):

اکنون، هارد ریست را به کامیتی که می خواهید بازنشانی کنید انجام دهید (e75a4d2):

git reset –hard e75a4d2

پس از اجرای دستورات فوق، Git وضعیت مخزن شما را به حالت Commit B بازنشانی می کند (e75a4d2). هر تغییری که پس از Commit B ایجاد شود، هم در فهرست کاری و هم در ناحیه مرحله‌بندی حذف می‌شود.

به یاد داشته باشید، با استفاده از git reset –hard هر گونه تغییر غیرمتعهد را برای همیشه حذف می کند، بنابراین مطمئن شوید که واقعاً می خواهید آن تغییرات را قبل از اجرای این دستور کنار بگذارید.

2.git checkout <commit> — <file

را git checkout <commit> — <file> دستور برای بازگرداندن یک فایل خاص به حالتی که در یک commit خاص وجود داشت استفاده می شود. این زمانی مفید است که می خواهید تغییرات ایجاد شده در یک فایل را به حالت قبلی برگردانید بدون اینکه روی فایل های دیگر موجود در فهرست کاری خود تأثیر بگذارد.

در اینجا نحوه استفاده از آن با یک مثال آورده شده است:

فرض کنید تاریخچه commit زیر را دارید:

* c1a2b3d (HEAD -> main) Commit D
* a3b4c5e Commit C
* d5e6f7g Commit B
* f8g9h0i Commit A

و شما یک فایل به نام دارید example.txt که در آخرین commit اصلاح شده است (Commit D، اما شما می خواهید آن را به حالتی که در آن وجود داشت برگردانید Commit B.

این دستور برای رسیدن به آن است:

git checkout d5e6f7g — example.txt

در این دستور:

d5e6f7g هش commit است Commit B.

example.txt نام فایلی است که می خواهید بازیابی کنید.

پس از اجرای این دستور، example.txt به حالتی که در آن وجود داشت باز می گردد Commit B، و تغییرات ایجاد شده در آن در commit های بعدی کنار گذاشته می شود.

به یاد داشته باشید، با استفاده از git checkout <commit> — <file> فقط روی فایل مشخص شده تاثیر می گذارد و تاریخچه commit را تغییر نمی دهد.

تنظیم مجدد Git دستوری در سیستم کنترل نسخه Git است که برای بازنشانی وضعیت فعلی مخزن به یک نقطه مشخص استفاده می شود. این یک ابزار قدرتمند است که به شما امکان می دهد تغییرات را لغو کنید، فایل ها را از مرحله خارج کنید و نشانگر HEAD را به یک commit یا شاخه دیگر منتقل کنید.

را git reset از دستور برای لغو تغییرات در فهرست کاری شما و بازگشت به یک commit خاص استفاده می شود و در عین حال تمام commit های انجام شده پس از آن را حذف می کند.

قبل از استفاده git resetمهم است که نوع تغییراتی را که قصد ایجاد آن را دارید در نظر بگیرید. در غیر این صورت، بیش از آنکه خوب باشد، هرج و مرج ایجاد خواهید کرد.

توضیحات تصویر

می توانید از چندین گزینه همراه با تنظیم مجدد git استفاده کنید، اما اینها اصلی ترین گزینه ها هستند. هر کدام بسته به شرایط خاصی استفاده می شود: git reset --soft، git reset --mixed، و git reset --hard

توضیحات تصویر

👉 تنظیم مجدد نرم: این حالت تغییراتی را که در فهرست کاری و ناحیه مرحله بندی ایجاد کرده اید حفظ می کند، اما نشانگر HEAD را به یک commit دیگر منتقل می کند. بدون حذف هیچ گونه تغییری، به طور موثر، commit ها را “لغو” می کند.

را — soft هدف آن تغییر HEAD (جایی که آخرین commit در ماشین محلی شما است) به یک commit خاص است. به عنوان مثال، اگر متوجه شدیم که فراموش کرده ایم یک فایل را به commit اضافه کنیم، می توانیم با استفاده از — soft با توجه به فرمت زیر:

  • git reset --soft <commit ID> با <commit ID>
  • git reset --soft HEAD~n برای بازگشت به commit با یک مرجع خاص (n).
  • git reset --soft HEAD~1 به آخرین کامیت برمی گردد.

بیایید به چند نمونه نگاه کنیم.

git add test.py data.py

git add test

git commit -m "added test file and data file"

این نتیجه دستور قبلی است.

[master (root-commit) faf864e] added test file and data file
2 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 test.py
create mode 100644 data.py

ما می توانیم وضعیت commit را به صورت زیر بررسی کنیم:

git status

On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
demofile.py

nothing added to commit but untracked files present (use "git add" to track)

اما، ما فراموش کردیم که اضافه کنیم demofile.py اسکریپت به commit.

از آنجایی که آخرین commit در HEAD قرار دارد، می‌توانیم با اجرای سه عبارت زیر این مشکل را برطرف کنیم.

  • با استفاده از این مرحله به مرحله قبل از تعهد بازگردید git reset --soft HEAD اجازه دادن به فایل تنظیم مجدد git.
  • فایل فراموش شده را با git add اضافه کنید.
  • تغییرات را با یک commit git commit نهایی انجام دهید.
git reset --soft HEAD

git add demofile.py

git commit -m "added all the python scripts"

نتیجه زیر باعث شد بعد از تمام مراحل قبلی git reset شود:

[master (root-commit) faf864e] added all the python scripts
3 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 test.py
create mode 100644 data.py
create mode 100644 demofile.py

توضیحات تصویر

👉 تنظیم مجدد مختلط: این حالت پیش فرض است git reset. نشانگر HEAD را به یک commit دیگر بازنشانی می‌کند و همچنین ناحیه مرحله‌بندی را برای مطابقت با commit مشخص شده بازنشانی می‌کند. با این حال، دایرکتوری کاری شما را بدون تغییر می‌گذارد، بنابراین شما همچنان تغییرات مربوط به commit را در فایل‌های خود خواهید داشت، اما آنها برای commit مرحله بندی نمی‌شوند.

این آرگومان پیش فرض برای تنظیم مجدد git است. اجرای این دستور دو تأثیر دارد: (1) تمام تغییرات را لغو کنید و (2) آنها را از مرحله خارج کنید.

تصور کنید که ما به طور تصادفی آن را اضافه کردیم test.py فایل، و ما می خواهیم آن را حذف کنیم زیرا آزمایش هنوز تمام نشده است.

در اینجا نحوه ادامه کار آمده است:

  • فایل هایی که در commit بودند را با git reset HEAD از حالت مرحله خارج کنید
  • فقط فایل هایی را که برای commit نیاز داریم اضافه کنید
git reset HEAD

git status

On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
test.py
data.py
demofile.py
nothing added to commit but untracked files present (use "git add" to track)

اکنون می‌توانیم فقط دو فایل آخر را اضافه کنیم و commit را انجام دهیم.

git add data.py demofile.py

git commit -m "Removed the test.py from the commit"

توضیحات تصویر

👉 هارد ریست: این حالت نشانگر HEAD را به یک commit دیگر بازنشانی می‌کند و همه تغییرات را در هر دو ناحیه مرحله و دایرکتوری کاری نادیده می‌گیرد. به طور موثر مخزن شما را به وضعیت commit مشخص شده برمی گرداند.

این گزینه پتانسیل خطرناک بودن را دارد. بنابراین، هنگام استفاده از آن احتیاط کنید!

اساساً هنگام استفاده از هارد ریست در یک commit خاص، HEAD را مجبور می کند تا به آن commit برگردد و بعد از آن همه چیزهای دیگر را حذف می کند.

  1. git reset --hard

    در اینجا مثالی از نحوه استفاده شما آورده شده است git reset --hard با یک سناریوی عملی:

فرض کنید یک مخزن Git با سابقه commit زیر دارید:

* 7856f73 (HEAD -> main) Commit D
* a6b2c9e Commit C
* e75a4d2 Commit B
* d93cfe1 Commit A

و وضعیت فعلی شما به این صورت است:

  • شما تغییراتی در فهرست کاری و منطقه مرحله بندی خود دارید.
  • متوجه می‌شوید که می‌خواهید این تغییرات را کنار بگذارید و مخزن خود را به حالتی که پس از Commit B در آن بود، بازنشانی کنید (e75a4d2).

در اینجا آمده است که چگونه می توانید با استفاده از آن به این هدف برسید git reset --hard:

ابتدا مطمئن شوید که در شاخه ای هستید که می خواهید تنظیم مجدد را انجام دهید. در این مورد، آن است main شاخه

git checkout main

اکنون، هارد ریست را به کامیتی که می خواهید بازنشانی کنید انجام دهید (e75a4d2):

اکنون، هارد ریست را به کامیتی که می خواهید بازنشانی کنید انجام دهید (e75a4d2):

git reset --hard e75a4d2

پس از اجرای دستورات فوق، Git وضعیت مخزن شما را به حالت Commit B بازنشانی می کند (e75a4d2). هر تغییری که پس از Commit B ایجاد شود، هم در فهرست کاری و هم در ناحیه مرحله‌بندی حذف می‌شود.

به یاد داشته باشید، با استفاده از git reset --hard هر گونه تغییر غیرمتعهد را برای همیشه حذف می کند، بنابراین مطمئن شوید که واقعاً می خواهید آن تغییرات را قبل از اجرای این دستور کنار بگذارید.

2.git checkout <commit> -- <file

را git checkout <commit> -- <file> دستور برای بازگرداندن یک فایل خاص به حالتی که در یک commit خاص وجود داشت استفاده می شود. این زمانی مفید است که می خواهید تغییرات ایجاد شده در یک فایل را به حالت قبلی برگردانید بدون اینکه روی فایل های دیگر موجود در فهرست کاری خود تأثیر بگذارد.

در اینجا نحوه استفاده از آن با یک مثال آورده شده است:

فرض کنید تاریخچه commit زیر را دارید:

* c1a2b3d (HEAD -> main) Commit D
* a3b4c5e Commit C
* d5e6f7g Commit B
* f8g9h0i Commit A

و شما یک فایل به نام دارید example.txt که در آخرین commit اصلاح شده است (Commit D، اما شما می خواهید آن را به حالتی که در آن وجود داشت برگردانید Commit B.

این دستور برای رسیدن به آن است:

git checkout d5e6f7g -- example.txt

در این دستور:

  • d5e6f7g هش commit است Commit B.
  • example.txt نام فایلی است که می خواهید بازیابی کنید.

پس از اجرای این دستور، example.txt به حالتی که در آن وجود داشت باز می گردد Commit B، و تغییرات ایجاد شده در آن در commit های بعدی کنار گذاشته می شود.

به یاد داشته باشید، با استفاده از git checkout <commit> -- <file> فقط روی فایل مشخص شده تاثیر می گذارد و تاریخچه commit را تغییر نمی دهد.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا