গিট সংগ্রহস্থলে বর্তমান কমিটিকে একমাত্র (প্রাথমিক) প্রতিশ্রুতিবদ্ধ করুন?


664

আমার কাছে বর্তমানে একটি স্থানীয় গিট সংগ্রহস্থল রয়েছে, যা আমি একটি গিথুব সংগ্রহস্থলের দিকে ধাক্কা দিয়েছি।

স্থানীয় সংগ্রহস্থলে ~ 10 কমিট রয়েছে এবং গিথুব সংগ্রহশালা এটির একটি সিঙ্ক্রোনাইজড সদৃশ।

আমি যা করতে চাই তা স্থানীয় গিট সংগ্রহস্থল থেকে সমস্ত সংস্করণ ইতিহাস মুছে ফেলা হয়, সুতরাং সংগ্রহস্থলের বর্তমান বিষয়বস্তুগুলি কেবল প্রতিশ্রুতিবদ্ধ হিসাবে উপস্থিত হয় (এবং সেইজন্য সংগ্রহস্থলের মধ্যে ফাইলগুলির পুরানো সংস্করণ সংরক্ষণ করা হয় না)।

আমি তখন এই পরিবর্তনগুলি গিথুবকে ঠেলে দিতে চাই।

আমি গিট রিবেস তদন্ত করেছি, তবে এটি নির্দিষ্ট সংস্করণগুলি অপসারণের জন্য আরও উপযুক্ত বলে মনে হচ্ছে। আরেকটি সম্ভাব্য সমাধান হ'ল স্থানীয় রেপো মোছা, এবং একটি নতুন তৈরি করা - যদিও এটি সম্ভবত অনেক কাজ তৈরি করবে!

ইটিএ: সুনির্দিষ্ট ডিরেক্টরি / ফাইল রয়েছে যা ট্র্যাক করা নেই - যদি সম্ভব হয় তবে আমি এই ফাইলগুলির আনট্র্যাকিং বজায় রাখতে চাই।


6
আরও দেখুন stackoverflow.com/questions/435646/... ( "আমি কিভাবে গীত সংগ্রহস্থলের প্রথম দুই করে একত্রিত?")
Anonymoose


উত্তর:


981

এখানে হিংস্র শক্তি পদ্ধতির। এটি সংগ্রহস্থলের কনফিগারেশনটিও সরিয়ে দেয়।

দ্রষ্টব্য : ভান্ডারটিতে সাবমডিউল থাকলে এটি কাজ করে না! আপনি যদি সাবমডিউলগুলি ব্যবহার করছেন তবে আপনার যেমন ইন্টারেক্টিভ রিবেস ব্যবহার করা উচিত

পদক্ষেপ 1: সমস্ত ইতিহাস সরিয়ে ফেলুন ( আপনার ব্যাকআপ রয়েছে তা নিশ্চিত করুন, এটি পুনরায় করা যাবে না )

cat .git/config  # note <github-uri>
rm -rf .git

পদক্ষেপ 2: কেবলমাত্র বর্তমান সামগ্রী দিয়ে গিট রেপো পুনর্গঠন করুন

git init
git add .
git commit -m "Initial commit"

পদক্ষেপ 3: গিটহাবের দিকে ধাক্কা।

git remote add origin <github-uri>
git push -u --force origin master

3
ধন্যবাদ লার্সম্যানস - আমি এটিকে আমার সমাধান হিসাবে ব্যবহার করার পছন্দ করেছি। যদিও গিট রেপো আরম্ভ করার ফলে পুরানো রেপোতে আন-ল্যাক করা ফাইলের রেকর্ড হারিয়েছে, এটি সম্ভবত আমার সমস্যার সহজ সমাধান।
কায়েস

5
@ কাইস: আমার মনে হয় আপনার এগুলি .gitignoreপরিচালনা করা উচিত, তাই না?
ফ্রেড ফু

48
আপনার .git / কনফিগারেশন আগে সংরক্ষণ করুন এবং পরে এটি পুনরুদ্ধার করুন।
লেলেবার্ড

@lalebarde আপনি যদি পরে .git / কনফিগারেশন পুনরুদ্ধার করেন git commit -m "Initial commit"তবে সম্ভবত git remote add ...আপনার কনফিগারেশনে থাকা অংশটি ধরে রেখে আপনি সম্ভবত অংশটি এড়িয়ে যেতে পারেন এবং সরাসরি এগিয়ে যাওয়ার দিকে এগিয়ে যেতে পারেন। এটা আমার জন্য কাজ করেছে।
বাটাল বাটকস

24
আপনি যদি সংবেদনশীল ডেটা মুছে ফেলার চেষ্টা করছেন তবে এটি সম্পর্কে সতর্কতা অবলম্বন করুন: সদ্য চাপানো মাস্টার শাখায় কেবলমাত্র একক প্রতিশ্রুতি উপস্থিতি বিভ্রান্তিকর - ইতিহাস এখনও থাকবে এটি কেবলমাত্র সেই শাখা থেকে অ্যাক্সেসযোগ্য হবে না। আপনার যদি ট্যাগ থাকে, উদাহরণস্বরূপ, কোন পুরানো কমিটগুলি নির্দেশ করে, এই কমিটগুলি অ্যাক্সেসযোগ্য হবে। প্রকৃতপক্ষে, কিছুটা গিটফু সহ যে কারওর জন্য আমি নিশ্চিত যে এই গিট চাপের পরেও তারা গিটহাব সংগ্রহশালা থেকে সমস্ত ইতিহাস পুনরুদ্ধার করতে সক্ষম হবে - এবং যদি আপনার অন্য শাখা বা ট্যাগ থাকে তবে তারা তা করে না এমনকি অনেক গিট ফুও দরকার।
রবার্ট মুইল

621

আমার পক্ষে কাজ করা একমাত্র সমাধান (এবং সাবমডিউলগুলি কাজ করে রাখে)

git checkout --orphan newBranch
git add -A  # Add all files and commit them
git commit
git branch -D master  # Deletes the master branch
git branch -m master  # Rename the current branch to master
git push -f origin master  # Force push master branch to github
git gc --aggressive --prune=all     # remove the old files

.git/আমার যখন সাবমডিউলগুলি থাকে তখন মোছা সর্বদা বিরাট সমস্যা সৃষ্টি করে। ব্যবহারটি আমার git rebase --rootপক্ষে কোনওভাবে বিবাদ সৃষ্টি করবে (এবং আমার অনেক ইতিহাস থাকায়) take


55
এটি সঠিক উত্তর হওয়া উচিত! git push -f origin masterশেষ অপশন হিসাবে কেবল একটি যুক্ত করুন এবং আপনার তাজা রেপোতে আবার সূর্য উজ্জ্বল হবে! :)
gru

2
এটি কি পুরানো কমিটগুলি প্রায় রাখে না?
ব্র্যাড

4
@ জোনাপলভোরা গিট আনুন; গিট রিসেট
ইকো

5
এটি করার পরে, রেপো কি ফাঁকা জায়গা পাবে?
ইনুয়ার্ট

8
আমি বিশ্বাস করি আপনার উত্তরটির শেষ লাইন হিসাবে আপনার @ জেসনগোম্যাট এর পরামর্শটি যুক্ত করা উচিত। ছাড়া git gc --aggressive --prune allহারানোর ইতিহাস পুরো পয়েন্ট মিস করা হবে।
টুনচে Göncüoğlu

93

এটি আমার পছন্দসই পদ্ধতি:

git branch new_branch_name $(echo "commit message" | git commit-tree HEAD^{tree})

এটি একটি প্রতিশ্রুতি সহ একটি নতুন শাখা তৈরি করবে যা হেডে সমস্ত কিছু যুক্ত করে। এটি অন্য কোনও কিছু পরিবর্তন করে না, তাই এটি সম্পূর্ণ নিরাপদ।


3
সেরা পদ্ধতির! পরিষ্কার করুন, এবং কাজ। অধিকন্তু, আমি "মাস্টার" থেকে "লোকাল-ওয়ার্ক" এবং "নিউ_ ব্র্যাঞ্চ_নাম" থেকে "মাস্টার" তে প্রচুর পরিবর্তন করে শাখার নাম পরিবর্তন করেছি। মাস্টার, নিম্নলিখিত না: Git -m স্থানীয় পরিবর্তন Git শাখা -m স্থানীয় পরিবর্তন Git চেকআউট new_branch_name Git শাখা -m মাস্টার <
Valtoni Boaventura

এটি দেখতে খুব সংক্ষিপ্ত এবং সরু দেখাচ্ছে, কেবলমাত্র আমি যা বুঝতে পারি না বা এখনও দেখিনি তা হ'ড {{গাছ}, কেউ ব্যাখ্যা করতে পারে? তা ছাড়া আমি এটিকে "প্রদত্ত প্রতিশ্রুতি থেকে নতুন শাখা তৈরি করা, ___ এর প্রদত্ত প্রতিশ্রুতি-বার্তা সহ একটি নতুন কমিট-অবজেক্ট তৈরি করে তৈরি করা" হিসাবে পড়েছি
টমকিগ্যাসি

3
গিট রেফারেন্স সিনট্যাক্স সম্পর্কে প্রশ্নের উত্তর খুঁজতে সুনির্দিষ্ট জায়গা হ'ল git-rev-parseডক্সে। এখানে যা ঘটছে তার git-commit-treeজন্য গাছের একটি রেফারেন্স প্রয়োজন (রেপোর একটি স্ন্যাপশট), তবে HEADএটি একটি সংশোধন। অঙ্গীকারের সাথে যুক্ত গাছটি সন্ধান করতে আমরা <rev>^{<type>}ফর্মটি ব্যবহার করি ।
ড্যান_ওয়াটারওয়ার্থ

চমৎকার উত্তর. ভাল কাজ করে. শেষ পর্যন্ত বলুনgit push --force <remote> new_branch_name:<remote-branch>
ফিলিপ আলভারেজ

31

অন্য বিকল্পটি, যা আপনার প্রচুর কমিটমেন্ট থাকলে প্রচুর পরিমাণে কাজ হতে পারে, এটি একটি ইন্টারেক্টিভ রিবেস (আপনার গিট সংস্করণটি> = 1.7.12 ধরে ধরে):git rebase --root -i

আপনার সম্পাদকের প্রতিশ্রুতিগুলির একটি তালিকা উপস্থাপন করার সময়:

  • প্রথম প্রতিশ্রুতিবদ্ধতার জন্য "বাছাই করুন" "পুনর্নির্মাণ" এ পরিবর্তন করুন
  • প্রতিটি অন্যান্য কমিটিকে "পিক" পরিবর্তন করে "ফিক্সআপ" করুন

সংরক্ষণ করেন এবং বন্ধ করেন. গিট রিবেসিং শুরু করবে।

শেষে আপনার কাছে একটি নতুন মূল প্রতিশ্রুতি থাকবে যা এটির পরে আসা সমস্তগুলির সংমিশ্রণ।

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

আপনি যদি সত্যিই আপনার ইতিহাসকে কড়াতে চান তবে এই প্রতিশ্রুতিতে মাস্টার পুনরায় সেট করুন এবং অন্যান্য সমস্ত শাখা মুছুন।


রিবেস সমাপ্ত হওয়ার পরে, আমি ধাক্কা দিতে পারি না:error: failed to push some refs to
বগুড়াদজ

@ ব্যাগ্রেডজ যদি আপনি ইতিমধ্যে আপনার শাখাটি পুনর্বাসিত করেছেন তবে আপনি জোর করে চাপ দিতে হবে git push --force-with-lease। জোর-সহ-ইজারা ব্যবহৃত হয় কারণ এটি - ফোর্সের চেয়ে কম ধ্বংসাত্মক।
কার্ল

19

এর ভেরিয়েন্ট larsmans এর প্রস্তাবিত পদ্ধতি:

আপনার আনট্র্যাকফিল ফাইলগুলি সংরক্ষণ করুন:

git ls-files --others --exclude-standard > /tmp/my_untracked_files

আপনার গিট কনফিগারেশন সংরক্ষণ করুন:

mv .git/config /tmp/

তারপরে লারসম্যানদের প্রথম পদক্ষেপগুলি সম্পাদন করুন:

rm -rf .git
git init
git add .

আপনার কনফিগারটি পুনরুদ্ধার করুন:

mv /tmp/config .git/

আপনাকে অনিরোধকৃত ফাইলগুলি নিরবচ্ছিন্ন করুন:

cat /tmp/my_untracked_files | xargs -0 git rm --cached

তারপরে প্রতিশ্রুতিবদ্ধ:

git commit -m "Initial commit"

এবং অবশেষে আপনার ভান্ডারগুলিতে চাপ দিন:

git push -u --force origin master

6

নীচে @ জিলোটের উত্তর থেকে গৃহীত একটি স্ক্রিপ্ট রয়েছে। এটি কেবল মাস্টার শাখা নয়, সমস্ত শাখা থেকে ইতিহাস সরিয়ে ফেলতে হবে:

for BR in $(git branch); do   
  git checkout $BR
  git checkout --orphan ${BR}_temp
  git commit -m "Initial commit"
  git branch -D $BR
  git branch -m $BR
done;
git gc --aggressive --prune=all

এটি আমার উদ্দেশ্যে কাজ করেছে (আমি সাবমডিউলগুলি ব্যবহার করছি না)।


4
আমি মনে করি আপনি প্রক্রিয়াটি সম্পূর্ণ করার জন্য পুশ মাস্টারকে বাধ্য করতে ভুলে গেছেন।
not2qubit

2
আমাকে কিছুটা পরিবর্তন করতে হয়েছিল। git branchআপনার চেক আউট শাখার পাশের একটি নক্ষত্রকে অন্তর্ভুক্ত করবে, যা তখন গ্লোববেড হবে, যার ফলে এটি সমস্ত ফাইল বা ফোল্ডারগুলিতে সমাধান করতে পারে যেন সেগুলিও শাখার নাম। পরিবর্তে, আমি ব্যবহার করেছি git branch --format="%(refname:lstrip=2)"যা আমাকে কেবল শাখার নাম দিয়েছে।
বেন রিচার্ডস

@ not2qubit: এর জন্য ধন্যবাদ। সঠিক আদেশ কি হবে? git push --force origin master, বা git push --force-with-lease? স্পষ্টতই উত্তরোত্তরটি নিরাপদ (দেখুন স্ট্যাকওভারফ্লো.com/ প্রশ্নগুলি / ৫৫০৫৫৩৫/২ )
শফিক জামাল

@BenRichards। মজাদার. আমি এটি আবার পরীক্ষা করতে একটি ফোল্ডারের সাথে একটি শাখার নামের সাথে মেলে এটি আবার চেষ্টা করব, তারপরে উত্তরটি আপডেট করুন। ধন্যবাদ।
শফিক জামাল

5

আপনি অগভীর ক্লোনগুলি ব্যবহার করতে পারেন (গিট> 1.9):

git clone --depth depth remote-url

আরও পঠন: http://blogs.atlassian.com/2014/05/andle-big-repositories-git/


4
এই জাতীয় ক্লোনটি নতুন ভাণ্ডারে ঠেলা যায় না।
Seweryn Niemiec

1
কীভাবে সেই সীমাবদ্ধতাটি দূর করা যায় তা জানার জন্য এটি দরকারী। কেউ ব্যাখ্যা করতে পারেন কেন এটিকে চাপ দেওয়া যায় না?
not2qubit

আপনার প্রশ্নের উত্তর: stackoverflow.com/questions/6900103/…
ম্যাথিয়াস এম

4

git filter-branch প্রধান অস্ত্রোপচার সরঞ্জাম।

git filter-branch --parent-filter true -- @^!

--parent-filterস্ট্যাডিনে পিতামাতাকে পেয়ে যায় এবং পুনরায় লিখিত পিতামাতাকে স্ট্যান্ডআউটে মুদ্রণ করা উচিত; ইউনিক্স trueসফলভাবে প্রস্থান করে এবং কিছুই প্রিন্ট করে না, তাই: কোনও পিতা-মাতা নেই। গিট শর্টহ্যান্ড@^! হ'ল "প্রধান প্রতিশ্রুতি দিচ্ছেন তবে তার বাবা-মা কেউ নয়"। তারপরে অন্যান্য সমস্ত রেফগুলি মুছে ফেলুন এবং অবসর সময়ে ধাক্কা দিন।


3

কেবল গিথুব রেপো মুছুন এবং একটি নতুন তৈরি করুন। এখন পর্যন্ত সবচেয়ে দ্রুত, সহজতম এবং নিরাপদ পদ্ধতির। সর্বোপরি, আপনি যখন চান তার সবকটি একক প্রতিশ্রুতিবদ্ধ সাথে গ্রহণযোগ্য সমাধানে এই সমস্ত আদেশগুলি কার্যকর করতে আপনার কী দরকার?


1
মূল পয়েন্টগুলির একটি হ'ল এটি দেখতে পেয়েছে যে এটি কোথা থেকে তৈরি হয়েছিল।
not2qubit

আমি শুধু এই করেনি এবং এটি জরিমানা
thanos.a

2

নীচের পদ্ধতিটি হ'ল পুনরুত্পাদনযোগ্য, সুতরাং উভয় পক্ষের সামঞ্জস্য থাকলে আবার ক্লোন চালানোর দরকার নেই, কেবল অন্যদিকে স্ক্রিপ্টটি চালান।

git log -n1 --format=%H >.git/info/grafts
git filter-branch -f
rm .git/info/grafts

তারপরে আপনি যদি এটি পরিষ্কার করতে চান তবে এই স্ক্রিপ্টটি ব্যবহার করে দেখুন:

http://sam.nipl.net/b/git-gc-all-ferocious

আমি একটি স্ক্রিপ্ট লিখেছিলাম যা ভান্ডারের প্রতিটি শাখার জন্য "ইতিহাসকে হত্যা করে":

http://sam.nipl.net/b/git-kill-history

আরও দেখুন: http://sam.nipl.net/b/confirm


1
এর জন্য ধন্যবাদ. শুধু এফওয়াইআই: প্রতিটি শাখার জন্য ইতিহাসকে মেরে ফেলার জন্য আপনার স্ক্রিপ্ট কিছু আপডেটিং ব্যবহার করতে পারে - এটি নিম্নলিখিত ত্রুটিগুলি দেয়: git-hash: not foundএবংSupport for <GIT_DIR>/info/grafts is deprecated
শফিক জামাল

1
@ শফিক জ্যামাল, ধন্যবাদ, ছোট্ট "গিট-হ্যাশ" স্ক্রিপ্টটি git log HEAD~${1:-0} -n1 --format=%Hএখানে, sam.aiki.info/b/git-hash জনসাধারণের জন্য এটির জন্য একটি স্ক্রিপ্টে রাখাই ভাল হবে be যদি আমি এটি আবার কখনও ব্যবহার করি তবে আমি বুঝতে পারি যে এটি কীভাবে "গ্রাফ্টস" প্রতিস্থাপন করে এমন নতুন বৈশিষ্ট্যটির সাথে করব figure
স্যাম ওয়াটকিন্স

2

আমি যা করতে চাই তা স্থানীয় গিট সংগ্রহস্থল থেকে সমস্ত সংস্করণ ইতিহাস মুছে ফেলা হয়, সুতরাং সংগ্রহস্থলের বর্তমান বিষয়বস্তুগুলি কেবল প্রতিশ্রুতিবদ্ধ হিসাবে উপস্থিত হয় (এবং সেইজন্য সংগ্রহস্থলের মধ্যে ফাইলগুলির পুরানো সংস্করণ সংরক্ষণ করা হয় না)।

আরও ধারণামূলক উত্তর:

গিটগুলি স্বয়ংক্রিয়ভাবে আবর্জনা পুরানো কমিটগুলি সংগ্রহ করে যদি কোনও ট্যাগ / শাখা / রেফগুলি তাদের প্রতি নির্দেশ না করে। সুতরাং আপনাকে কেবল সমস্ত ট্যাগ / শাখা অপসারণ করতে হবে এবং যে কোনও শাখার সাথে যুক্ত একটি নতুন এতিম প্রতিশ্রুতি তৈরি করতে হবে - কনভেনশন দ্বারা আপনি শাখাটিকে masterসেই প্রতিশ্রুতিতে নির্দেশ করতে দেবেন।

পুরানো, অ্যাক্সেস অযোগ্য কমিটস এর পরে আর কখনও দেখা যাবে না যতক্ষণ না তারা নিম্ন স্তরের গিট কমান্ড দিয়ে খনন করে। যদি এটি আপনার পক্ষে যথেষ্ট হয় তবে আমি কেবল সেখানে থামব এবং যখনই ইচ্ছা তখন স্বয়ংক্রিয় জিসি এটির কাজটি করতে দেব। আপনি এখনই এগুলি থেকে মুক্তি পেতে চাইলে আপনি ব্যবহার করতে পারেনgit gc (সম্ভবত এর সাথে --aggressive --prune=all) । রিমোট গিট সংগ্রহস্থলের জন্য আপনার জোর করে বলার কোনও উপায় নেই যদিও আপনার ফাইল সিস্টেমে শেল অ্যাক্সেস না থাকলে।


@ জিলোটের উত্তরের প্রসঙ্গে যখন ভাল সংযোজন হয়।
মোজেনস ট্র্যাশারডিকে

হ্যাঁ, জেলোটের কমান্ডগুলি রয়েছে যা মূলত এটি করে (সম্পূর্ণ ভিন্নভাবে শুরু করে, যা কেবল ওপির পক্ষে ভাল হতে পারে)। @
মোগেনসট্রেশার

0

আপনি এখানে যান:

#!/bin/bash
#
# By Zibri (2019)
#
# Usage: gitclean username password giturl
#
gitclean () 
{ 
    odir=$PWD;
    if [ "$#" -ne 3 ]; then
        echo "Usage: gitclean username password giturl";
        return 1;
    fi;
    temp=$(mktemp -d 2>/dev/null /dev/shm/git.XXX || mktemp -d 2>/dev/null /tmp/git.XXX);
    cd "$temp";
    url=$(echo "$3" |sed -e "s/[^/]*\/\/\([^@]*@\)\?\.*/\1/");
    git clone "https://$1:$2@$url" && { 
        cd *;
        for BR in "$(git branch|tr " " "\n"|grep -v '*')";
        do
            echo working on branch $BR;
            git checkout $BR;
            git checkout --orphan $(basename "$temp"|tr -d .);
            git add -A;
            git commit -m "Initial Commit" && { 
                git branch -D $BR;
                git branch -m $BR;
                git push -f origin $BR;
                git gc --aggressive --prune=all
            };
        done
    };
    cd $odir;
    rm -rf "$temp"
}

এছাড়াও এখানে হোস্ট করা হয়েছে: https://gist.github.com/Zibri/76614988478a076bbe105545a16ee743


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

-1

আমি .gitআমার প্রকল্পের ফোল্ডারটি মুছে ফেলা এবং ইন্টেলিজিজের মাধ্যমে সংস্করণ নিয়ন্ত্রণের সাথে পুনরায় সংহত করে একটি অনুরূপ সমস্যা সমাধান করেছি । দ্রষ্টব্য: .gitফোল্ডারটি লুকানো আছে। আপনি এটি দিয়ে টার্মিনালে দেখতে পারেন ls -aএবং এটি ব্যবহার করে মুছে ফেলতে পারেন rm -rf .git


সে 1 ম পদক্ষেপে কি করছে: rm -rf .git?
রাত

-1

তার জন্য শ্যালো ক্লোন কমান্ড গিট ক্লোন - ডিপথ 1 ইউআরএল - এটি কেবলমাত্র সংগ্রহস্থলের বর্তমান হেডের ক্লোন করবে


-2

গিট থেকে শেষ প্রতিশ্রুতি অপসারণ করতে, আপনি কেবল চালাতে পারেন

git reset --hard HEAD^ 

আপনি যদি শীর্ষ থেকে একাধিক কমিট সরিয়ে ফেলছেন তবে আপনি চালাতে পারেন

git reset --hard HEAD~2 

শেষ দুটি কমিটগুলি সরিয়ে ফেলতে। আরও বেশি কমিটস সরানোর জন্য আপনি সংখ্যাটি বাড়াতে পারেন।

আরও তথ্য এখানে।

এখানে গিট টিটোরিয়াল কীভাবে সংগ্রহস্থল পরিষ্কার করতে সহায়তা করে:

আপনি ইতিহাস থেকে ফাইলটি সরাতে এবং এটি .gitignore এ যুক্ত করতে চান যাতে এটি দুর্ঘটনাক্রমে পুনরায় প্রতিশ্রুতিবদ্ধ হয় না। আমাদের উদাহরণগুলির জন্য, আমরা গিটহাব রত্ন সংগ্রহশালা থেকে রেকফিল সরিয়ে ফেলছি।

git clone https://github.com/defunkt/github-gem.git

cd github-gem

git filter-branch --force --index-filter \
  'git rm --cached --ignore-unmatch Rakefile' \
  --prune-empty --tag-name-filter cat -- --all

এখন যেহেতু আমরা ফাইলটি ইতিহাস থেকে মুছে ফেলেছি, আমরা নিশ্চিত হয়েছি যে আমরা দুর্ঘটনাক্রমে আবার এটি প্রতিশ্রুতিবদ্ধ না।

echo "Rakefile" >> .gitignore

git add .gitignore

git commit -m "Add Rakefile to .gitignore"

আপনি যদি সংগ্রহস্থলের স্থিতিতে সন্তুষ্ট হন তবে আপনাকে দূরবর্তী সংগ্রহস্থলটিকে ওভাররাইট করতে পরিবর্তনগুলি জোর-ধাক্কা দিতে হবে।

git push origin master --force

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

এটি প্রশ্নে জিজ্ঞাসা করা ফলাফল দেয় না। আপনি সর্বশেষ পরিবর্তন রাখার প্রতিশ্রুতি দেওয়ার পরে আপনি সমস্ত পরিবর্তন ত্যাগ করছেন এবং তার পর থেকে সমস্ত পরিবর্তন হারাবেন, তবে প্রশ্নটি বর্তমান ফাইলগুলি রাখার এবং ইতিহাসকে বাদ দেওয়ার জন্য বলে asks
টুনচে Göncüoğlu
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.