দূরবর্তী সংগ্রহস্থলের গিট ক্লোন বিশেষ সংস্করণ


180

আমি প্রায় এক মাস আগে একটি রিমোট গিট সংগ্রহস্থল ক্লোন করেছি। দূরবর্তী সংগ্রহস্থলটিতে অনেক পরিবর্তন হয়েছে এবং এখন অস্থির হয়ে উঠেছে। এখন আমার এক মাস আগে ক্যালোন করা সংস্করণের অনুরূপ সংগ্রহস্থলের অনুলিপিটি দরকার।

আমি এটা কিভাবে করবো?



উত্তর:


241

আপনি যে কোনও প্রতিশ্রুতি দিতে চান (যেমন 1 মাস আগে) আপনার ভাণ্ডার "রিসেট" করতে পারেন।

এর জন্য গিট-রিসেট ব্যবহার করুন:

git clone [remote_address_here] my_repo
cd my_repo
git reset --hard [ENTER HERE THE COMMIT HASH YOU WANT]

27
আপনি এটি উল্লেখ করেননি, তবে এটি কেবলমাত্র masterশাখাটি পুনরায় সেট করবে , যা ক্লোনটিতে ডিফল্টরূপে পরীক্ষা করা হয়। যদি masterআপনার প্রধান বিকাশ শাখা ব্যতীত অন্য কোনও শাখা হয় তবে তার আগে অবশ্যই চেক আউট করা উচিতgit reset
স্টিভ ফলি

16
কেন আপনি চেয়েছিলেন প্রতিশ্রুতি একটি সাধারণ চেকআউট না?
nemoo

10
কারণ নির্দিষ্ট প্রতিশ্রুতিতে চেকআউট করার পরে আপনি "বিচ্ছিন্ন হেড" অবস্থানে থাকবেন।
রুই কার্নেরিও

6
@ রুই কার্নেরিও git checkout -b new_branch hashআপনি অন্য কোনও শাখায় না ছুঁয়েই হ্যাশের উপর ভিত্তি করে একটি নতুন শাখা তৈরি করা ব্যবহার করা ভাল । একটি বিদ্যমান শাখার প্রধানকে সরানো যখন সমস্যার সমাধান করতে পারে যখন এটি একটি দূরবর্তী সার্ভারে কিছু চাপ দেওয়ার সময়।
Lo Fac Faure-Lacroix

1
@ ইউরিঝেনসেভ যদি কমিটিকে ইতিমধ্যে একটি প্রত্যন্ত শাখায় ঠেলে দেওয়া হয় তবে আপনি git pull origin [branch]অন্যথায় এটি করতে পারেন , এটি হারিয়ে গেছে।
রুই কার্নেরিও

93

আপনি সহজভাবে ব্যবহার করতে পারেন

git checkout  commithash

এই ধারাবাহিকতায়

git clone `URLTORepository`
cd `into your cloned folder`
git checkout commithash

কমিট হ্যাশ দেখতে এই "45ef55ac20ce2389c9180658fdba35f4a663d204" এর মতো দেখাচ্ছে


8
আমার এই উত্তরটি সবচেয়ে ভাল লেগেছে। আমি মনে করি একটি git reset --hardএড়ানো উচিত, এর পক্ষে git checkout commit-hash। একটি git reset --hardগিট ইতিহাসের অংশ সরিয়ে দেয় যা কখনও কখনও কাম্য হয় না।
জর্ডান স্টুয়ার্ট

8
git initপ্রয়োজনীয় নয়
লৌতারো পাস্কেভিচিয়াস

37

git logআপনি যে রোলব্যাকটিতে রোলব্যাক করতে চান তা সন্ধান করতে ব্যবহার করুন এবং প্রতিশ্রুতিবদ্ধ হ্যাশটির নোট নিন। এর পরে, আপনার কাছে 2 টি বিকল্প রয়েছে:

  1. যদি আপনি এই সংশোধনীর পরে কিছু করার পরিকল্পনা করেন তবে আমি আপনাকে একটি নতুন শাখায় চেকআউট করার পরামর্শ দিচ্ছি :git checkout -b <new_branch_name> <hash>

  2. যদি আপনি এই সংশোধনীর পরে কিছু করার পরিকল্পনা না করেন, আপনি কেবল একটি শাখা ছাড়াই চেকআউট করতে পারেন: git checkout <hash>- দ্রষ্টব্য: এটি আপনার সংগ্রহস্থলটিকে 'বিচ্ছিন্ন হেড' অবস্থায় রাখবে, যার অর্থ এটি বর্তমানে কোনও শাখার সাথে সংযুক্ত নেই - তবে আপনি ' প্রকৃত শাখায় নতুন কমিটগুলি একীভূত করতে কিছু অতিরিক্ত কাজ করব

উদাহরণ:

$ git log
commit 89915b4cc0810a9c9e67b3706a2850c58120cf75
Author: Jardel Weyrich <suppressed>
Date:   Wed Aug 18 20:15:01 2010 -0300

    Added a custom extension.

commit 4553c1466c437bdd0b4e7bb35ed238cb5b39d7e7
Author: Jardel Weyrich <suppressed>
Date:   Wed Aug 18 20:13:48 2010 -0300

    Missing constness.

$ git checkout 4553c1466c437bdd0b4e7bb35ed238cb5b39d7e7
Note: moving to '4553c1466c437bdd0b4e7bb35ed238cb5b39d7e7'
which isn't a local branch
If you want to create a new branch from this checkout, you may do so
(now or later) by using -b with the checkout command again. Example:
  git checkout -b <new_branch_name>
HEAD is now at 4553c14... Missing constness.

এইভাবে আপনি কোনও তথ্য হারাবেন না, এভাবে স্থিতিশীল হয়ে উঠলে আপনি একটি নতুন পুনর্বিবেচনায় যেতে পারেন।


2
তবে এটিও লক্ষ্য করুন যে আপনি বিচ্ছিন্ন মাথাতে রয়েছেন, যা কেবলমাত্র পঠনযোগ্য অপারেশনের জন্য ঠিক। আপনি যখন এই পুনর্বিবেচনাটি শুরু করে পরিবর্তনগুলি করার পরিকল্পনা করছেন তখন আপনাকে একটি নতুন শাখা তৈরি করতে হবে। আরও তথ্যের জন্য দেখুন सितারামস . github.com/concepts/detached-head.html
রুডি

@ রূদি: আপনাকে ধন্যবাদ এটি ব্যবহার দেখানোর জন্য কেবল একটি উদাহরণ ছিল। এটি উল্লেখ আপডেট।
jweyrich

"কার্যকরী স্থিতিতে" ফিরে পেতে আপনি কেবল git checkout developযেখানে শাখাটির বিকাশ করতে পারেন ।
স্টিভ টাবার

1
@SteveTauber ভাল, ত আপনি আছে একটি ভিন্ন শাখা যা কাজ করছে পরিবর্তন যে শাখা প্রকৃতপক্ষে যথেষ্ট।
jweyrich

18

সেই সংস্করণটি যদি আপনার কোনও শাখা বা ট্যাগ হয় তবে:

git clone -b branch_or_tag_name repo_address_or_path

2

কেন্দ্রীভূত সংস্করণ নিয়ন্ত্রণ সিস্টেমের বিপরীতে, গিট পুরো সংগ্রহস্থলটিকে ক্লোন করে দেয়, তাই আপনি কেবল বর্তমান দূরবর্তী ফাইলগুলিই পাবেন না, পুরো ইতিহাসটি। আপনার স্থানীয় সংগ্রহস্থলগুলিতে এই সমস্ত কিছুই অন্তর্ভুক্ত থাকবে।

সেই সময়ে কোনও নির্দিষ্ট সংস্করণ চিহ্নিত করার জন্য ট্যাগগুলি থাকতে পারে । যদি তা না হয় তবে আপনি সেগুলি স্থানীয়ভাবে তৈরি করতে পারেন। এটি করার একটি ভাল উপায় হ'ল git logসরঞ্জামগুলি gitk(সম্ভবত gitk --allসমস্ত শাখা এবং ট্যাগ দেখতে) এর সাহায্যে সম্ভবত আরও দৃশ্যমানভাবে ব্যবহার করা বা সম্ভবত । আপনি যদি সেই সময়ে ব্যবহৃত কমিট হ্যাশগুলিকে স্পট করতে পারেন তবে আপনি তাদের ব্যবহার করে ট্যাগ করতে পারেনgit tag <hash> এবং তারপরে নতুন কার্যকরী কপিগুলিতে এটি পরীক্ষা করে দেখতে পারেন (উদাহরণস্বরূপ git checkout -b new_branch_name tag_nameবা ট্যাগের নামের পরিবর্তে সরাসরি হ্যাশ দিয়ে)।


1

আপনি এটির মতো সমাধান করতে পারেন:

git reset --hard sha

যেখানে shaযেমন:85a108ec5d8443626c690a84bc7901195d19c446

কমান্ডের সাহায্যে আপনি পছন্দসই শে পেতে পারেন:

git log

1

uploadpack.allowReachableSHA1InWant

যেহেতু গিট ২.০.০ এই কনফিগারেশন ভেরিয়েবলটি সার্ভারে সক্ষম করা যায়, এখানে গিটহাব বৈশিষ্ট্য অনুরোধ এবং গিটহাব এই বৈশিষ্ট্যটি সক্ষম করার প্রতিশ্রুতিবদ্ধ

বিটবকেট সার্ভার এটি 5.5+ সংস্করণ থেকে সক্ষম করেছে

ব্যবহার:

# Make remote with 4 commits, and local with just one.
mkdir server
cd server
git init
touch 1
git add 1
git commit -m 1
git clone ./ ../local
for i in {2..4}; do
    touch "$i"
    git add "$i"
    git commit -m "$i"
done

# Before last commit.
SHA3="$(git log --format='%H' --skip=1 -n1)"
# Last commit.
SHA4="$(git log --format='%H' -n1)"

# Failing control without feature.
cd ../local
# Does not give an error, but does not fetch either.
git fetch origin "$SHA3"
# Error.
git checkout "$SHA3"

# Enable the feature.
cd ../server
git config uploadpack.allowReachableSHA1InWant true

# Now it works.
cd ../local
git fetch origin "$SHA3"
git checkout "$SHA3"
# Error.
git checkout "$SHA4"

0

আপনার প্রয়োজনীয় উত্স ট্রিটি এখনও গিট সংগ্রহস্থলের মধ্যে উপলব্ধ, তবে আপনার যে প্রতিশ্রুতিতে আগ্রহী সেগুলির SHA1 আপনার প্রয়োজন হবে ass আমি ধরে নেব যে আপনার বর্তমান ক্লোন থেকে আপনি SHA1 পেতে পারেন?

আপনি যদি এই SHA1 পেতে পারেন তবে অভিন্ন সংগ্রহস্থল রাখতে আপনি সেখানে একটি শাখা তৈরি / পুনরায় সেট করতে পারেন।

রুইয়ের উত্তর অনুযায়ী কমান্ড


0

সম্ভবত git resetআপনার সমস্যা সমাধান করে।

git reset --hard -#commit hash-
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.