git - what - জিট ব্যবহার করে একটি নির্দিষ্ট সংশোধন করতে একটি নির্দিষ্ট ফাইল রিসেট বা প্রত্যাবর্তন?




what is git (20)

আমি ফাইলের কিছু অংশে কিছু পরিবর্তন করেছি যা কয়েকটি ফাইলের একটি অংশ হিসাবে অঙ্গীকারবদ্ধ হয়েছে, তবে এখন পরিবর্তনগুলি আবার আগের সংস্করণে ফিরিয়ে আনতে / প্রত্যাহার করতে চাই।

আমার প্রয়োজনীয় পুনর্বিবেচনার জন্য আমি একটি git diff বরাবর একটি git log করেছি, কিন্তু অতীতে অতীতের ফাইলটি কীভাবে ফাইলটি ফেরত নেওয়া যায় তা আমি জানি না।


গিট-এলিয়াস, বেদনা এবং শেল-ফাংশন উদ্ধার!

git prevision <N> <filename>

ফাইল <filename> জন্য রোলব্যাকের জন্য সংশোধনের সংখ্যা <N> যেখানে।
উদাহরণস্বরূপ, একটি ফাইল x/y/zc এর অবিলম্বে পূর্ববর্তী পুনর্বিবেচনা চেকআউট, চালানো

git prevision -1 x/y/z.c

কিভাবে গিট বাধা কাজ করে?

আপনার gitconfig নিম্নলিখিত যোগ করুন

[alias]
        prevision = "!f() { git checkout `git log --oneline $2 |  awk -v commit="$1" 'FNR == -commit+1 {print $1}'` $2;} ;f"

মূলত কমান্ড

  • নির্দিষ্ট ফাইল এবং একটি git log সঞ্চালন করে
  • ফাইলের ইতিহাসে যথোপযুক্ত সৃষ্টিকর্তা বাছাই করে
  • নির্দিষ্ট ফাইলের জন্য git checkout আইডি একটি git checkout করে।

মূলত, এই যে এক নিজে নিজে এই পরিস্থিতিতে কাজ করবে,
এক সুন্দর, দক্ষ গিট-উপনাম মধ্যে আবৃত আপ - গিট-প্রতিরোধ


SHA-1 সহ, আপনি যদি কোন সুবিধাটি ব্যবহার করেন তবে এটি সবচেয়ে সুবিধাজনক। বিন্দু কমান্ড এই মত দেখাচ্ছে:

git checkout [commit-ref] -- [filename]


আপনি diff কমান্ড ব্যবহার করে একটি ফাইলে করা পরিবর্তনগুলির দ্রুত পর্যালোচনা করতে পারেন:

git diff <commit hash> <filename>

তারপরে একটি নির্দিষ্ট ফাইলটি সেই কমিটিতে ফিরিয়ে আনতে রিসেট কমান্ডটি ব্যবহার করুন:

git reset <commit hash> <filename>

স্থানীয় পরিবর্তনগুলি থাকলে আপনাকে --hard বিকল্পটি ব্যবহার করতে হতে পারে।

Managaging waypoints জন্য একটি ভাল কর্মপ্রবাহ ট্যাগ আপনার টাইমলাইনে পরিষ্কারভাবে পয়েন্ট চিহ্নিত করতে ট্যাগ ব্যবহার করা হয়। আমি আপনার শেষ বাক্যটি পুরোপুরি বুঝতে পারছি না তবে আপনি যা চান তা একটি পূর্ববর্তী বিন্দু থেকে একটি শাখাটি বিচ্ছিন্ন করা হয়। এটি করার জন্য, সহজ চেকআউট কমান্ডটি ব্যবহার করুন:

git checkout <commit hash>
git checkout -b <new branch name>

আপনি যখন সেই পরিবর্তনগুলিকে একত্রিত করতে প্রস্তুত হবেন তখন আপনি আপনার মেইনলাইনের বিরুদ্ধে এটি পুনঃবিবেচনা করতে পারেন:

git checkout <my branch>
git rebase master
git checkout master
git merge <my branch>

আপনি চান c5f567 হ্যাশ অনুমান c5f567 :

git checkout c5f567 -- file1/to/restore file2/to/restore

জিট চেকআউট ম্যান পৃষ্ঠা আরও তথ্য দেয়।

যদি আপনি c5f567 আগে c5f567 ফিরে যেতে চান তবে ~1 যোগ করুন (যেকোনো নম্বর দিয়ে কাজ করে):

git checkout c5f567~1 -- file1/to/restore file2/to/restore

একটি পার্শ্ব নোট হিসাবে, আমি সবসময় এই কমান্ডের সাথে অস্বস্তিকর ছিলাম কারণ এটি সাধারণ জিনিসগুলি (শাখাগুলির মধ্যে পরিবর্তন) এবং অস্বাভাবিক, ধ্বংসাত্মক জিনিসগুলির জন্য (কাজের নির্দেশিকাতে পরিবর্তনগুলি বাদ দেওয়ার) জন্য ব্যবহৃত হয়।


আপনি যদি জিট এক্সটেনশানগুলি ব্যবহার করেন এবং আপনি কেবলমাত্র ফাইলটির জন্য পিতামাতা কমিটিতে ফিরে যেতে চান তবে আপনি যে পরিবর্তনগুলি প্রত্যাবর্তন করতে চান তা নির্বাচন করতে পারেন, তারপরে বিবরণ দফায় 'ডিফ' ট্যাব নির্বাচন করুন, ডান-ক্লিক করুন আপনি যে ফাইলটি ফিরতে চান, তারপরে 'ফাইল (গুলি) পুনরায় সেট করুন' ...., তারপর 'A' (পিতা-মাতা)


আমার জন্য কোন উত্তর সত্যিই স্পষ্ট লাগেনি এবং তাই আমি সুপার সহজ মনে মনে খনি যোগ করতে চাই।

আমি একটি abc1 একটি কমিট আছে এবং তারপরে আমি ফাইল file.txt একটি ফাইল (অথবা এক পরিবর্তন) করেছেন।

এখন ফাইল file.txt ফাইলটিতে আমি কিছুটা file.txt এবং আমি আগের abc1 ফিরে যেতে চাই।

1. git checkout file.txt : যদি আপনি তাদের প্রয়োজন না হয় তবে এটি স্থানীয় পরিবর্তনগুলি সরিয়ে দেবে

2. git checkout abc1 file.txt : এটি আপনার ফাইলটি আপনার চেয়েছিলেন সংস্করণে আনবে

3. git commit -m "Restored file.txt to version abc1" : এটি আপনার প্রত্যাবর্তন করবে।

  1. git push : এটি রিমোট রিপোজিটরিতে সবকিছু ধাক্কা দেবে

ধাপ 2 এবং 3 এর মধ্যে অবশ্যই আপনি কীভাবে চলতে চলেছেন তা বুঝতে git status করতে পারেন। সাধারণত আপনি ইতিমধ্যে file.txt যোগ করা উচিত এবং এটি একটি git add প্রয়োজন নেই কেন।


আমি EasyGit এখানে প্লাগ করতে হবে, এটি একটি মোড়ক যা EasyGit নতুন ব্যবহারকারীদের বিভ্রান্তিকর ছাড়াই নতুন করে EasyGit করে তুলতে পারে। এটি যে জিনিসগুলির মধ্যে একটি, তা git revert করতে আরও অর্থ দেয় । এই ক্ষেত্রে, আপনি কেবল বলবেন:

eg revert foo/bar foo/baz


আমি মনে করি আমি এটি খুঁজে পেয়েছি .... http://www-cs-students.stanford.edu/~blynn/gitmagic/ch02.html থেকে

কখনও কখনও আপনি ফিরে যান এবং একটি নির্দিষ্ট বিন্দু আগে প্রতি পরিবর্তন সম্পর্কে ভুলে যান কারণ তারা সব ভুল।

শুরু করা:

$ git log

যা আপনাকে সাম্প্রতিক কমিটির তালিকা এবং তাদের SHA1 হ্যাশ দেখায়।

পরবর্তী, টাইপ করুন:

$ git reset --hard SHA1_HASH

একটি নির্দিষ্ট কমিটিতে রাষ্ট্র পুনরুদ্ধার এবং স্থায়ীভাবে রেকর্ড থেকে সব নতুন কমিট মুছে ফেলা।


এখানে অনেক উত্তর git reset ... <file> ব্যবহার করার দাবি করেছে git reset ... <file> বা git checkout ... <file> কিন্তু এটি করার মাধ্যমে, আপনি git checkout ... <file> git reset ... <file> git checkout ... <file> করতে প্রতিশ্রুতিবদ্ধ করার পরে প্রতিটি পরিবর্তনকে আলাদা করবেন।

যদি আপনি একটি একক ফাইলের জন্য কেবল একটি কমিটিতে পরিবর্তনগুলি git revert করতে চান তবে git revert কেবলমাত্র একটি ফাইলের জন্য (বা কমিটির ফাইলগুলির একটি উপসেট বলতে হবে), আমি git diff এবং git apply উভয়টি ব্যবহার করার পরামর্শ দিই ( <sha> = যেটি আপনি প্রত্যাবর্তন করতে চান তার হ্যাশ):

git diff <sha>^ <sha> path/to/file.ext | git apply -R

মূলত, এটি প্রথমে আপনি যে পরিবর্তনগুলি প্রত্যাবর্তন করতে চান তার সাথে একটি প্যাচ তৈরি করবে এবং তারপরে সেই পরিবর্তনগুলিকে বাদ দেওয়ার জন্য প্যাচটি বিপরীত-প্রয়োগ করুন।

অবশ্যই, <sha1> এবং HEAD (দ্বন্দ্ব) এর মধ্যে যে কোনও <sha1> দ্বারা উল্লিখিত লাইনগুলি সংশোধন করা হলে এটি কাজ করবে না।


এখানে অনেক পরামর্শ, git checkout $revision -- $file লাইন বরাবর সবচেয়ে git checkout $revision -- $file । অস্পষ্ট বিকল্প একটি দম্পতি:

git show $revision:$file > $file

এবং, আমি সাময়িকভাবে একটি বিশেষ সংস্করণ দেখতে শুধু এটি ব্যবহার করি:

git show $revision:$file

অথবা

git show $revision:$file | vim -R -

(ওবিএস: $file সাথে prefixed করতে হবে। ./ এটি git show $revision:$file জন্য একটি আপেক্ষিক পথ git show $revision:$file কাজ করার জন্য)

এবং এমনকি আরো অদ্ভুত:

git archive $revision $file | tar -x0 > $file

এখানে কিভাবে rebase কাজ করে:

git checkout <my branch>
git rebase master
git checkout master
git merge <my branch>

আপনি আছে অনুমান

---o----o----o----o  master
    \---A----B       <my branch>

প্রথম দুটি কমান্ড ... জিট চেকআউট গিট রিবেস মাস্টার

... আপনি master শাখায় আবেদন করতে চান এমন পরিবর্তনগুলির শাখাটি দেখুন। rebase কমান্ডটি <my branch> (যা মাস্টারগুলিতে পাওয়া যায় না) থেকে এবং master মাথায় তাদের পুনর্বহাল করে। অন্য কথায়, <my branch> প্রথম কমিটির অভিভাবক আর master ইতিহাসের পূর্ববর্তী কমিটি নয়, কিন্তু master বর্তমান প্রধান। দুটি কমান্ড একই রকম:

git rebase master <my branch>

"বেস" এবং "পরিবর্তন" শাখার উভয়ই সুস্পষ্ট হিসাবে এই কমান্ডটি মনে রাখা সহজ হতে পারে।

। চূড়ান্ত ইতিহাস ফলাফল হল:

---o----o----o----o   master
                   \----A'----B'  <my branch>

চূড়ান্ত দুটি আদেশ ...

git checkout master
git merge <my branch>

... master সমস্ত <my branch> পরিবর্তনগুলি প্রয়োগ করার জন্য একটি ফাস্ট-ফরওয়ার্ড মার্জ করুন। এই পদক্ষেপ ছাড়া, রিবেস কমিটি master যোগ করা হয় না। চূড়ান্ত ফলাফল হল:

---o----o----o----o----A'----B'  master, <my branch>

master এবং <my branch> উভয় রেফারেন্স B' । এছাড়াও, এই মুহুর্ত থেকে <my branch> রেফারেন্সটি মুছে ফেলা নিরাপদ।

git branch -d <my branch>

এটা আমার জন্য কাজ করেছে:

git checkout <commit hash> file

তারপর পরিবর্তন করুন:

git commit -a

এবং সর্বশেষ প্রতিশ্রুতিবদ্ধ সংস্করণে ফিরে যাওয়ার জন্য, যা প্রায়শই প্রয়োজন হয়, আপনি এই সহজ কমান্ডটি ব্যবহার করতে পারেন।

git checkout HEAD file/to/restore

নির্দিষ্ট সংস্করণটির জন্য হ্যাশ কীটি পেতে git log ব্যবহার করুন এবং তারপরে git checkout <hashkey> ব্যবহার git checkout <hashkey>

দ্রষ্টব্য: শেষের আগে হ্যাশ টাইপ করতে ভুলবেন না। শেষ হ্যাশ আপনার বর্তমান অবস্থান নির্দেশ করে (HEAD) এবং কিছুই পরিবর্তন করে।


ফাইলটির পূর্ববর্তী কমিটির সংস্করণটিতে যাওয়ার জন্য, commit সংখ্যাটি পান, তারপর eb917a1 বলুন

git checkout eb917a1 YourFileName

আপনি শুধু শেষ commited সংস্করণ ফিরে যেতে হবে

git reset HEAD YourFileName
git checkout YourFileName

এটি কেবল আপনাকে ফাইলটির সর্বশেষ প্রতিশ্রুতিবদ্ধ অবস্থায় নিয়ে যাবে


যদি আপনি আপনার শেষ কাজগুলিতে ভুল ফাইলটি করেন তবে নির্দেশ অনুসরণ করুন:

  1. ওপেন সোর্স ট্রি, এই কমিট পরিবর্তন

  1. লাইন পরিবর্তন করুন এবং আপনার প্রতিবেদনে ভুল ফাইলটি প্রেরণ হিসাবে পাঠানো হয়েছে

  1. আপনি যে কমিটিতে আপনার পরিবর্তন তালিকা দেখতে পারেন
  2. এটি নির্বাচন করুন এবং তারপরে ডানদিকে ক্লিক করুন ... ফাইল বিপরীত ক্লিক করুন
  3. তারপরে আপনি নীচের বাম পাশে ফাইল স্ট্যাটাস ট্যাবে এটি দেখতে পারেন তারপর unstage ক্লিক করুন:

  1. আপনার ভিজ্যুয়াল স্টুডিও কোড খুলুন এবং আপনার সরানো ফাইল সম্পাদন করে ফিরে ফিরে
  2. সব পরে, আপনি উৎস গাছ আপনার শেষ কমিটিতে ফলাফল দেখতে পারেন


যদি আপনি জানেন যে আপনাকে কতগুলি ফিরে যেতে হবে তবে আপনি এটি ব্যবহার করতে পারেন:

git checkout master~5 image.png

আপনি অনুমান করেন যে আপনি master শাখায় আছেন এবং আপনি যে সংস্করণটি চান তা হল 5 টি।


স্পষ্টতই কেউ কেউ গিট উপর একটি বুদ্ধিমান বই লিখতে প্রয়োজন, বা গিট ডকুমেন্টেশন ভাল ব্যাখ্যা করা প্রয়োজন। এই একই সমস্যা সঙ্গে মুখোমুখি আমি যে অনুমান

cd <working copy>
git revert master

করণীয় যা শেষ কমিট পূর্বাবস্থায় ফেরানো হবে।

ইয়ান


আপনি 4 টি ধাপে এটি করতে পারেন:

  1. আপনি যে ফাইলটি বিশেষভাবে প্রত্যাহার করতে চান তার সাথে পুরো কমিটিটি ফিরিয়ে আনুন - এটি আপনার শাখায় একটি নতুন কমিটি তৈরি করবে
  2. নরম রিসেট যে কমিট - কমিটি অপসারণ এবং কাজ এলাকায় পরিবর্তন চালায়
  3. ফিরিয়ে আনতে এবং তাদের প্রতিশ্রুতি ফাইল হ্যান্ডপিক
  4. আপনার কাজ এলাকায় সব অন্যান্য ফাইল ড্রপ

আপনার টার্মিনালে টাইপ করার দরকার কী?

  1. git revert <commit_hash>
  2. git reset HEAD~1
  3. git add <file_i_want_to_revert> && git commit -m 'reverting file' git add <file_i_want_to_revert> git commit -m 'reverting file'
  4. git checkout .

সৌভাগ্য কামনা করছি


git checkout -- foo

যে HEAD foo রিসেট করা হবে। আপনি এটিও করতে পারেন:

git checkout HEAD^ foo

এক সংশোধন ফিরে, ইত্যাদি জন্য





git-checkout