গিটার সংগ্রহস্থল থেকে কীভাবে আমি পুরাতন ইতিহাস সরিয়ে ফেলব?


208

আমি ভয় পাচ্ছি যে আমি এই নির্দিষ্ট দৃশ্যের মতো বেশ কিছু পাই না।

আমার অনেক গিটারের সংগ্রহশালা রয়েছে: 500+ শাখা, 500+ ট্যাগস, 2007-এর মাঝামাঝি ফিরে। এটিতে 19,500 ডলার কমিট রয়েছে। আমরা এর সাথে সামঞ্জস্য করার জন্য আরও ছোট এবং সহজ করার জন্য 1 জানুয়ারী, 2010 এর আগে সমস্ত ইতিহাস মুছে ফেলতে চাই (আমরা ইতিহাসের একটি সম্পূর্ণ অনুলিপি সংরক্ষণাগার ভাণ্ডারে রেখে দেব)।

আমি যে প্রতিশ্রুতি রাখতে চাই তা আমি নতুন ভাণ্ডারের মূল হয়ে উঠতে চাই। আমি অবশ্য সেই প্রতিশ্রুতি দিয়ে শুরু করতে রেপো কেটে কাটাতে সঠিক গিট মোজো খুঁজে বের করতে পারি না। আমি কিছু বৈকল্পিক অনুমান করছি

git filter-branch

জড়িত জড়িত প্রয়োজনীয় হবে; আমরা আলাদাভাবে রাখতে চাইলে 200+ টি শাখার প্রত্যেকটির চিকিত্সা করা এবং তারপরে রেপোকে আবার একসাথে প্যাচ করতে হবে (এমন কিছু যা আমি কীভাবে করব তা আমি জানি) treat

কেউ কি কখনও এরকম কিছু করেছে? আমি গিট 1.7.2.3 পেয়েছি যদি এটি গুরুত্বপূর্ণ।

উত্তর:


118

কেবলমাত্র কোনও নতুন পিতামাতার কাছে আপনার নতুন মূল প্রতিশ্রুতিবদ্ধতার পিতামাতার একটি গ্রাফ তৈরি করুন (বা একটি খালি প্রতিশ্রুতি হিসাবে, যেমন আপনার ভাণ্ডারের আসল মূল প্রতিশ্রুতি)। যেমনecho "<NEW-ROOT-SHA1>" > .git/info/grafts

গ্রাফ্ট তৈরি করার পরে, এটি এখনই কার্যকর হয়; আপনার git logএটি দেখতে এবং দেখতে হবে যে অযাচিত পুরানো কমিটগুলি চলে গেছে:

$ echo 4a46bc886318679d8b15e05aea40b83ff6c3bd47 > .git/info/grafts
$ git log --decorate | tail --lines=11
commit cb3da2d4d8c3378919844b29e815bfd5fdc0210c
Author: Your Name <your.email@example.com>
Date:   Fri May 24 14:04:10 2013 +0200

    Another message

commit 4a46bc886318679d8b15e05aea40b83ff6c3bd47 (grafted)
Author: Your Name <your.email@example.com>
Date:   Thu May 23 22:27:48 2013 +0200

    Some message

যদি সমস্ত কিছু লক্ষ্য হিসাবে দেখায় তবে git filter-branch -- --allএটিকে স্থায়ী করার জন্য আপনি কেবল একটি সাধারণ কাজ করতে পারেন।

সাবধান থেকো, করছেন পরে ফিল্টার-শাখা পদক্ষেপ, সব কমিট আইডি পরিবর্তিত হয়েছে, তাই পুরাতন রেপো ব্যবহার কেহ নতুন রেপো যে ব্যবহার করবেন সাথে একত্রীকরণ না হবে।


6
git filter-branch --tag-name-filter cat -- --allট্যাগগুলি আপডেট করার জন্য আমাকে করতে হয়েছিল । তবে আমি পুরানো ইতিহাসগুলিও মুছে ফেলতে চাইছি সেই পুরানো ইতিহাসের দিকে ইঙ্গিত করে। আমি কীভাবে এই সমস্ত পুরানো ট্যাগগুলি থেকে মুক্তি পেতে পারি? আমি যদি এগুলি মুছতে না পারি তবে পুরানো ইতিহাস অদৃশ্য হবে না এবং আমি এটির সাথে এখনও দেখতে পাচ্ছি gitk --all
ক্রেগ ম্যাককুইন

9
"আপনার নতুন মূলের কোনও পিতামাতার প্রতি দায়বদ্ধতার একটি গ্রাফ তৈরি করুন" কিছু বিস্তৃতকরণের প্রয়োজন some আমি এটি চেষ্টা করেছিলাম এবং "না পিতামাতা" জন্য সিনট্যাক্স বের করতে ব্যর্থ হয়েছি। ম্যানুয়াল পৃষ্ঠা দাবি করে যে একটি পিতামাতার প্রতিশ্রুতি আইডি প্রয়োজন; সমস্ত শূন্য ব্যবহার করা আমাকে একটি ত্রুটি দেয়।
মারিয়াস গেডমিনাস

6
অন্য কেউ যদি ভাবছেন যে এটি ঠিক কীভাবে কাজ করে তবে এটি বেশ সহজ:echo "<NEW-ROOT-HASH>" > .git/info/grafts
friederbluemle

3
আমি একমত, গ্রাফ্ট কী তা ব্যাখ্যা করার চেয়ে আরও কার্যকর হবে
চার্লস মার্টিন

4
গ্রাফ্টে লিঙ্কযুক্ত উইকি পৃষ্ঠা থেকে উদ্ধৃত। "গিট ১.6.৫ অনুসারে, আরও নমনীয় গিট প্রতিস্থাপন যুক্ত করা হয়েছে, যা আপনাকে অন্য যে কোনও বস্তুর সাথে কোনও বস্তু প্রতিস্থাপন করতে দেয় এবং রেফগুলির মাধ্যমে সংযুক্তিগুলি ট্র্যাক করে যা রেপোর মধ্যে ধাক্কা এবং টানতে পারে।" সুতরাং এই উত্তরটি গিটের বর্তমান সংস্করণগুলির জন্য পুরানো হতে পারে।
থারস্মমনার

130

হয়ত কোনও উত্তর পোস্ট করতে খুব দেরী হয়েছে তবে এই পৃষ্ঠাটি গুগলের প্রথম ফলাফল হিসাবে এটি এখনও সহায়ক হতে পারে।

আপনি যদি নিজের গিট রেপোতে কিছু জায়গা মুক্ত করতে চান তবে আপনার সমস্ত কমিট (রিবেস বা গ্রাফট) পুনর্নির্মাণ করতে চান না এবং এখনও সম্পূর্ণ রেপোযুক্ত লোকদের থেকে ধাক্কা / টান / একীভূত করতে সক্ষম হতে পারেন তবে আপনি গিটটি ব্যবহার করতে পারেন ক্লোন অগভীর ক্লোন ( --পরিমিতি পরামিতি)।

; Clone the original repo into limitedRepo
git clone file:///path_to/originalRepo limitedRepo --depth=10

; Remove the original repo, to free up some space
rm -rf originalRepo
cd limitedRepo
git remote rm origin

এই পদক্ষেপগুলি অনুসরণ করে আপনি আপনার বিদ্যমান রেপো অগভীর করতে সক্ষম হতে পারেন:

; Shallow to last 5 commits
git rev-parse HEAD~5 > .git/shallow

; Manually remove all other branches, tags and remotes that refers to old commits

; Prune unreachable objects
git fsck --unreachable ; Will show you the list of what will be deleted
git gc --prune=now     ; Will actually delete your data

সমস্ত গিট স্থানীয় ট্যাগগুলি কীভাবে সরাবেন?

PS: গিটের পুরানো সংস্করণগুলি ক্লোন / পুশ / টান থেকে / অগভীর রেপোগুলিকে সমর্থন করে না।


9
+1 টি এই গীত এর নতুন সংস্করণের জন্য সঠিক উত্তর। (ওহ, এবং পিপিসিজিতে ফিরে আসুন !)
wizzwizz4

6
cdসবে মুছে ফেলা ফোল্ডারে আপনি কীভাবে যেতে পারেন ? আমার মনে হচ্ছে এখানে কিছু অনুপস্থিত তথ্য আছে। এছাড়াও, দূরবর্তী রেপোগুলিতে এই পরিবর্তনগুলি প্রয়োগ করার কোনও উপায় আছে কি?
ট্রাগডোর

4
@ জিজ এটি অন্যান্য শীর্ষে ভোট দেওয়া উত্তর হবে। আপনি যদি স্থায়ীভাবে ইতিহাস থেকে মুক্তি পেতে চান তবে এই উত্তরটি আপনার পক্ষে নয়। এটি বিশাল ইতিহাস নিয়ে কাজ করার জন্য ।
কেউ নয়

4
আমার নিজের প্রশ্নের উত্তর দিতে: git clone file:///Users/me/Projects/myProject myClonedProject --shallow-since=2016-09-02একটি কবজ মত কাজ!
মাইক্রোস

5
@ জিজ আপনি চালিয়ে আপনার অগভীর রেপোকে সাধারণের মধ্যে রূপান্তর করতে পারেন git filter-branch -- --all। এটি এতে সমস্ত হ্যাশ পরিবর্তন করবে তবে এর পরে আপনি এটিকে একটি নতুন
রেপোতে চাপিয়ে

61

এই পদ্ধতিটি বোঝা সহজ এবং সূক্ষ্মভাবে কাজ করে। স্ক্রিপ্টের ( $1) আর্গুমেন্টটি হল একটি রেফারেন্স (ট্যাগ, হ্যাশ, ...) যা আপনি নিজের ইতিহাসটি রাখতে চান সেই প্রতিশ্রুতিটির জন্য।

#!/bin/bash
git checkout --orphan temp $1 # create a new branch without parent history
git commit -m "Truncated history" # create a first commit on this branch
git rebase --onto temp $1 master # now rebase the part of master branch that we want to keep onto this branch
git branch -D temp # delete the temp branch

# The following 2 commands are optional - they keep your git repo in good shape.
git prune --progress # delete all the objects w/o references
git gc --aggressive # aggressively collect garbage; may take a lot of time on large repos

দ্রষ্টব্য যে পুরানো ট্যাগগুলি এখনও উপস্থিত থাকবে; যাতে আপনার ম্যানুয়ালি মুছে ফেলার প্রয়োজন হতে পারে

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


আমি আদেশ git pruneএবং git gcআদেশগুলির জন্য প্রদত্ত ব্যাখ্যাগুলির প্রশংসা করি । স্ক্রিপ্টের বাকি কমান্ডগুলির জন্য ব্যাখ্যা রয়েছে? যেমনটি দাঁড়িয়েছে, এটি পরিষ্কার নয় যে এটিতে কী যুক্তিগুলি প্রেরণ করা হচ্ছে এবং প্রতিটি কমান্ড কী করছে। ধন্যবাদ।
ব্যবহারকারীর 35359531

2
@ user5359531 আপনার মন্তব্যের জন্য ধন্যবাদ, আমি প্রতিটি কমান্ডের জন্য আরও কিছু মন্তব্য যুক্ত করেছি। আশাকরি এটা সাহায্য করবে.
ক্রিস মেইস


3
@Warpzit আমি যোগ করে একত্রীকরণ দ্বন্দ্ব পরিত্রাণ -pকরার rebaseযেমন অন্যান্য উত্তর প্রস্তাব, কমান্ড
leonbloy

1
আমি এটিকে যথাযথভাবে অনুসরণ করেছি এবং আমি যা পেয়েছিলাম তা হ'ল আগের মতো একই ইতিহাসের সাথে একটি নতুন শাখা শুরু হয়েছিল যা আমি পূর্বের মতো একই ইতিহাসের সাথে ছাঁটাই করতে চেয়েছিলাম। কোনও ইতিহাস সরানো হয়নি।
DrStrangepork

51

এই পদ্ধতিটি ব্যবহার করে কীভাবে গিট ইতিহাস কেটে ফেলা যায় :

#!/bin/bash
git checkout --orphan temp $1
git commit -m "Truncated history"
git rebase --onto temp $1 master
git branch -D temp

এখানে $1রয়েছে SHA-1 হল কমিট রাখতে এবং স্ক্রিপ্ট নতুন শাখা যা মধ্যে সব করে রয়েছে তৈরি করবে চান $1এবং masterসব পুরোনো ইতিহাস অবনমিত হয়েছে। নোট করুন যে এই সাধারণ স্ক্রিপ্টটি ধরে নিয়েছে যে আপনার কাছে বিদ্যমান শাখা কল নেই temp। এছাড়াও নোট করুন যে এই স্ক্রিপ্টটি পুরানো ইতিহাসের গিট ডেটা সাফ করে না। git gc --prune=all && git repack -a -f -F -dআপনি যাচাই করেছেন যে আপনি সত্যই সমস্ত ইতিহাস হারাতে চান পরে চালানো । আপনার প্রয়োজনও rebase --preserve-mergesহতে পারে তবে সতর্ক হতে হবে যে সেই বৈশিষ্ট্যের গিট বাস্তবায়ন নিখুঁত নয়। আপনি যদি এটি ব্যবহার করেন তবে ম্যানুয়ালি ফলাফলগুলি পরীক্ষা করুন।


22
আমি এটি চেষ্টা করেছিলাম, তবে rebaseপদক্ষেপে সংহত বিবাদ পেয়েছি । অদ্ভুত - আমি আশা করছিলাম না যে এই পরিস্থিতিতে সংহতদের সংঘাতগুলি সম্ভব হতে পারে।
ক্রেগ ম্যাককুইন

2
git commit --allow-empty -m "Truncate history"যদি আপনি যে প্রতিশ্রুতি পরীক্ষা করে দেখেছেন তাতে কোনও ফাইল নেই Use
friederbluemle

2
আমি এটিকে কীভাবে রিমোট মাস্টারের দিকে ঠেলে দেব? আমি যখন এটি করি তখন আমি পুরানো এবং নতুন উভয় ইতিহাসই শেষ করি।
rustx

1
'টেম্প' হওয়ার কথা কী? এর পক্ষে যুক্তি হিসাবে আপনাকে কী পাস করার কথা? এই কমান্ডগুলির বাস্তবে যখন আপনি এটি চালাবেন তখন তার মতো দেখার মতো কোনও উদাহরণ রয়েছে? ধন্যবাদ।
ব্যবহারকারীর 35359531

1
আমি বিশ্বাস করি $ 1 কমিট হ্যাশ h (লিঙ্কযুক্ত নিবন্ধে আরও বিশদ সরবরাহ করা আছে)।
ক্রিস নোলেট

34

ইতিহাসের পুনর্লিখনের বিকল্প git replaceহিসাবে , প্রো গিট বইয়ের এই নিবন্ধের মতো ব্যবহার বিবেচনা করুন । আলোচিত উদাহরণের মধ্যে রয়েছে একটি গাছের সূচনা অনুকরণের জন্য পিতামাতার প্রতিশ্রুতি প্রতিস্থাপনের সাথে জড়িত থাকা, এমনকি পুরোপুরি ইতিহাসকে নিরাপদ রক্ষার জন্য আলাদা শাখা হিসাবে রেখে।


হ্যাঁ, আমি মনে করি আপনি সম্ভবত যা করতে চেয়েছিলেন আপনি তা করতে পারতেন, যদি আপনি পৃথক সম্পূর্ণ ইতিহাস শাখাটিও আঁকেন। (আমরা
ভান্ডারটি

1
উত্তরটি অফ-সাইট হওয়ায় আমি নিরুৎসাহিত হয়েছি; তবে এটি গিটএসসিএম সাইট এবং টিউটোরিয়ালের সাথে লিঙ্ক করে যা এটির সাথে লিঙ্ক করে খুব ভাল লেখা এবং এটি সরাসরি ওপি-র প্রশ্নের মূল বিন্দুতে মনে হয়।
থারস্মমনার

@ থোরস্মমনার এর জন্য দুঃখিত! আমি উত্তরটি আরও কিছুটা পুরোপুরি সাইটে বিকাশ করব
জেফ বোম্যান

দুর্ভাগ্যক্রমে এটি ইতিহাসের পুনর্লিখনের বিকল্প নয়। নিবন্ধের শুরুতে একটি বিভ্রান্তিকর বাক্য রয়েছে যা সম্ভবত এই ধারণা দিয়েছে। এটি কি এই উত্তর থেকে সরানো যেতে পারে? আপনি নিবন্ধে দেখতে পাবেন যে লেখক কাটা শাখার ইতিহাস পুনর্লিখন করেছেন তবে উত্তরাধিকার "ইতিহাস" শাখাটি পুনরায় ব্যবহার করার একটি উপায় প্রস্তাব করেছেন git replace। আমি বিশ্বাস করি আপনি যেখানে এই উত্তরটি পোস্ট করেছেন এটি অন্য একটি প্রশ্নের সাথে সংশোধন করা হয়েছিল।
মিচ

1
একটি আলোচনা git replaceবনাম git graftএ তৈরি করা হয় stackoverflow.com/q/6800692/873282
koppor

25

যদি আপনি চাই প্রতি রাখা মূল প্রজেক্টের সঙ্গে সংগ্রহস্থলের সম্পূর্ণ ইতিহাস , কিন্তু স্থানীয় ছোট চেক আউট করে, সঙ্গে অগভীর ক্লোন কি git clone --depth=1 [repo]

প্রতিশ্রুতি দেওয়ার পরে, আপনি এটি করতে পারেন

  1. git fetch --depth=1পুরানো প্রতিশ্রুতি ছাঁটাই করতে। এটি পুরানো কমিটগুলি এবং তাদের জিনিসগুলি অ্যাক্সেসযোগ্য makes
  2. git reflog expire --expire-unreachable=now --all। সমস্ত পুরানো কমিটস এবং তাদের অবজেক্টগুলির মেয়াদ শেষ করা
  3. git gc --aggressive --prune=all পুরানো বস্তু অপসারণ করতে

আরও দেখুন কীভাবে প্রতিশ্রুতি দেওয়ার পরে স্থানীয় গিটের ইতিহাস মুছবেন?

মনে রাখবেন আপনি এই "অগভীর" সংগ্রহস্থলটিকে অন্য কোথাও ঠেলাতে পারবেন না: "অগভীর আপডেটের অনুমতি নেই"। দেখুন রিমোট প্রত্যাখ্যাত (অগভীর আপডেট অনুমোদিত নয়) পরিবর্তন গীত দূরবর্তী URL টি পরে । আপনি যদি এটি করতে চান তবে আপনাকে কলম আঁকতে হবে।


1
পয়েন্ট নম্বর 1. আমার জন্য পার্থক্য তৈরি। চিয়ার্স
ক্ল্যাপস

21

আমি কী করছি তা বুঝতে আমার বেশ কয়েকটি উত্তর এবং কিছু অন্যান্য তথ্য পড়তে হবে।

1. একটি নির্দিষ্ট প্রতিশ্রুতি চেয়ে পুরানো সবকিছু উপেক্ষা

ফাইলটি .git/info/graftsকমিটমেন্টের জন্য ভুয়া পিতামাতার সংজ্ঞা দিতে পারে। কেবল একটি প্রতিশ্রুতিবদ্ধ আইডি সহ একটি লাইন বলেছে যে প্রতিশ্রুতিবদ্ধতার কোনও পিতা-মাতা নেই। যদি আমরা বলতে চাই যে আমরা কেবলমাত্র গত 2000 কমিট সম্পর্কে যত্নশীল, আমরা টাইপ করতে পারি:

git rev-parse HEAD~2000 > .git/info/grafts

গিট রেভ-পার্স আমাদের বর্তমান কমিটের 2000 তম পিতামাতার কমিট আইডি দেয় gives উপরের কমান্ডটি উপস্থিত থাকলে গ্রাফ্ট ফাইলটি ওভাররাইট করবে। সেখানে আগে আছে কিনা তা পরীক্ষা করে দেখুন।

২. গিট ইতিহাস পুনরায় লিখুন (alচ্ছিক)

আপনি যদি এই কলমযুক্ত জাল বাবা-মাকে সত্যিকারের আদায় করতে চান তবে চালান:

git filter-branch -- --all

এটি সমস্ত কমিট আইডির পরিবর্তন করবে। এই সংগ্রহস্থলের প্রতিটি অনুলিপি জোর করে আপডেট করা দরকার।

৩. ডিস্কের জায়গা পরিষ্কার করুন

আমি পদক্ষেপ 2 করিনি, কারণ আমি চেয়েছিলাম যে আমার অনুলিপি প্রবাহের সাথে সামঞ্জস্যপূর্ণ থাকবে। আমি কেবল কিছু ডিস্কের জায়গা সংরক্ষণ করতে চেয়েছিলাম। পুরানো সমস্ত কমিটগুলি ভুলে যাওয়ার জন্য:

git prune
git gc

বিকল্প: অগভীর অনুলিপি

আপনার যদি অন্য সংগ্রহস্থলের অগভীর অনুলিপি থাকে এবং কিছুটা ডিস্কের স্থান সংরক্ষণ করতে চান তবে আপনি আপডেট করতে পারেন .git/shallow। তবে সাবধান থাকুন যে কোনও কিছুই আগে থেকে প্রতিশ্রুতিবদ্ধতার দিকে নির্দেশ করছে না। সুতরাং আপনি এই জাতীয় কিছু চালাতে পারেন:

git fetch --prune
git rev-parse HEAD~2000 > .git/shallow
git prune
git gc

অগভীর প্রবেশ এগুলি গ্রাফ্টের মতো কাজ করে। তবে একই সাথে গ্রাফ্ট এবং অগভীর ব্যবহার না করার বিষয়ে সতর্কতা অবলম্বন করুন। কমপক্ষে, সেখানে একই রকম এন্ট্রি করবেন না, এটি ব্যর্থ হবে।

আপনার যদি এখনও কিছু পুরানো রেফারেন্স (ট্যাগ, শাখা, রিমোট হেড) থাকে যা পুরানো কমিটগুলিকে নির্দেশ করে তবে সেগুলি পরিষ্কার করা হবে না এবং আপনি আরও ডিস্কের স্থান সংরক্ষণ করতে পারবেন না।


<GIT_DIR> / তথ্য / গ্রাফ্টের জন্য সমর্থন অবহেলা করা হয়েছে এবং ভবিষ্যতের গিট সংস্করণে সরানো হবে।
ড্যানি

git replaceপরিবর্তে ব্যবহার বিবেচনা করুন। দেখুন stackoverflow.com/questions/6800692/...
জোএল AZEMAR

3

যখন রি-বেসের ফলে বা ধাক্কা থেকে মাথা / মাস্টার এই ত্রুটি ঘটেছে পারে

remote: GitLab: You are not allowed to access some of the refs!
To git@giturl:main/xyz.git
 ! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'git@giturl:main/xyz.git'

গিট ড্যাশবোর্ডে এই সমস্যাটি সমাধান করার জন্য "সুরক্ষিত শাখা" থেকে মাস্টার শাখা অপসারণ করা উচিত

এখানে চিত্র বর্ণনা লিখুন

তাহলে আপনি এই কমান্ডটি চালাতে পারেন

git push -f origin master

অথবা

git rebase --onto temp $1 master

0

এখানে অনেকগুলি উত্তর রয়েছে যা বর্তমান নয় এবং কেউ কেউ এর পরিণতি সম্পর্কে পুরোপুরি ব্যাখ্যা দেয় না। সর্বশেষতম গিট ২.২26 ব্যবহার করে ইতিহাসটি ছাঁটাই করার জন্য এখানে আমার জন্য কী কাজ করেছে:

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

# 8365366 is id of parent commit after which you want to preserve history
echo 'Initial' | git commit-tree 8365366^{tree}

উপরের কমান্ডটি SHA প্রিন্ট করবে, উদাহরণস্বরূপ d10f7503bc1ec9d367da15b540887730db862023,।

এখন শুধু টাইপ করুন:

# d10f750 is commit ID from previous command
git rebase --onto d10f750 8365366

এটি প্রথমে সমস্ত ফাইলকে 8365366ডামি কমিটের মধ্যে রাখবে d10f750। তারপরে এটি 8365366 এর পরে সমস্ত শৃঙ্খলা ফিরে পাবে d10f750। অবশেষে masterশাখা পয়েন্টারটি শেষ প্রতিশ্রুতিতে ফিরে যাওয়া আপডেট হবে be

এখন আপনি যদি এই কাটা কাটা রেপোটি পুশ করতে চান তবে ঠিক করুন git push -f

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

ভাগ্যক্রমে কাটা ইতিহাস "সংরক্ষণাগার" হিসাবে রাখা সম্ভব এবং পরে আপনি সংরক্ষণাগার রেপো দিয়ে ছাঁটা রেপোতে ফিরে আসতে পারেন। এটি করার জন্য, এই গাইডটি দেখুন


-3

আপনি ডিরেক্টরিটি, ফাইলগুলি এবং নীচে উল্লিখিত জার [এটি ডাউনলোড] এবং কমান্ডগুলি ব্যবহার করে দির বা ফাইল সম্পর্কিত সমস্ত ইতিহাস মুছতে পারেন

bfg.jar ফাইল: https://rtyley.github.io/bfg-repo-cleaner/

গিট ক্লোন --bare রেপো-ইউআরএল সিডি রেপো_ডির জাভা -জার বিএফজি.জার - ডিলিট-ফোল্ডার ফোল্ডার_নাম গিট রিফ্লগের মেয়াদ - এক্সপায়ার = এখন - সমস্ত && গিট জিসি -প্রুন = এখন - অলৌকিক গিট পুশ - মিরর রেপো_আরল


-10
  1. গিট ডেটা, আরএম .git সরান
  2. গিট ইনিশ
  3. একটি গিট দূরবর্তী যোগ করুন
  4. জোর ধাক্কা

6
এটি সমস্ত ইতিহাস মুছে ফেলার জন্য কাজ করবে, তবে তিনি যা চেয়েছিলেন তার জন্য নয়: জানুয়ারী ২০১০ সাল থেকে ইতিহাস রাখুন
ক্রিস মেইস

1
ধন্যবাদ জানাতে চেয়েছিলাম কারণ এটি আমার
দৃশ্যে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.