আমি সর্বদা এটির সাথে বিভ্রান্ত হয়ে পড়ি, সুতরাং এখানে একটি অনুস্মারক পরীক্ষার মামলা রয়েছে; আসুন বলি আমাদের এই bash
স্ক্রিপ্টটি পরীক্ষা করার আছে git
:
set -x
rm -rf test
mkdir test
cd test
git init
git config user.name test
git config user.email test@test.com
echo 1 > a.txt
echo 1 > b.txt
git add *
git commit -m "initial commit"
echo 2 >> b.txt
git add b.txt
git commit -m "second commit"
echo 3 >> b.txt
এই মুহুর্তে, পরিবর্তনটি ক্যাশে মঞ্চস্থ হয় না, তাই git status
হয়:
$ git status
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: b.txt
no changes added to commit (use "git add" and/or "git commit -a")
যদি এই বিন্দু থেকে, আমরা করি git checkout
, ফলাফল এটি:
$ git checkout HEAD -- b.txt
$ git status
On branch master
nothing to commit, working directory clean
পরিবর্তে আমরা যদি করি git reset
, ফলাফলটি হল:
$ git reset HEAD -- b.txt
Unstaged changes after reset:
M b.txt
$ git status
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: b.txt
no changes added to commit (use "git add" and/or "git commit -a")
সুতরাং, এই ক্ষেত্রে - যদি পরিবর্তনগুলি মঞ্চস্থ না করা হয়, git reset
কোনও তফাত্ করে না , যখন git checkout
পরিবর্তনগুলি ওভাররাইট করে।
এখন বলা যাক যে উপরের স্ক্রিপ্ট থেকে শেষ পরিবর্তনটি মঞ্চস্থ / ক্যাশেড, এটি বলতে আমরা git add b.txt
শেষেও করেছি।
এই ক্ষেত্রে, git status
এই মুহূর্তে:
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: b.txt
যদি এই বিন্দু থেকে, আমরা করি git checkout
, ফলাফল এটি:
$ git checkout HEAD -- b.txt
$ git status
On branch master
nothing to commit, working directory clean
পরিবর্তে আমরা যদি করি git reset
, ফলাফলটি হল:
$ git reset HEAD -- b.txt
Unstaged changes after reset:
M b.txt
$ git status
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: b.txt
no changes added to commit (use "git add" and/or "git commit -a")
সুতরাং, এই ক্ষেত্রে - যদি পরিবর্তনগুলি মঞ্চস্থ হয় git reset
তবে মূলত স্টেজেড পরিবর্তনগুলি অচিহ্নবদ্ধ পরিবর্তনগুলিতে পরিণত git checkout
করবে - যখন পরিবর্তনগুলি সম্পূর্ণরূপে ওভাররাইট করে দেবে।