গিট প্রথম প্রতিশ্রুতি অপসারণ কিভাবে?


179

গিটে প্রথম প্রতিশ্রুতিটি কীভাবে সরানো যায় সে সম্পর্কে আমি আগ্রহী।

কোনও কাজ করার আগে সংশোধন কী? এই সংশোধনীর কোনও নাম বা ট্যাগ রয়েছে?


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

@ শাহবাজ হ্যাঁ, সবচেয়ে ভাল উপায়, উদাহরণস্বরূপ এখানে দেখুন: ariejan.net/2011/07/05/git-squash-your-letts-commits-into-one
timaschew

5
আপনি ব্যবহার করতে পারেন git rebase -i --root। : বিস্তারিত জানার জন্য নিম্নলিখিত এইরকম উত্তর দেন দেখুন stackoverflow.com/questions/2246208/...
MKroehnert


এই জবাবটি বর্তমান শাখার মূল প্রতিশ্রুতি মুছে ফেলার সঠিক সমাধান রয়েছে:git filter-branch --parent-filter "sed 's/-p <the_commit>//'" HEAD
জডি ব্রুচন

উত্তর:


320

আমার জন্য, সবচেয়ে নিরাপদ উপায় হ'ল update-refআদেশটি ব্যবহার করা :

git update-ref -d HEAD

এটি নামযুক্ত রেফারেন্স মুছে ফেলবে HEAD, সুতরাং এটি পুনরায় সেট হবে (মৃদুভাবে, আপনি আপনার কাজ হারাবেন না) আপনার বর্তমান শাখার সমস্ত কমিট

আপনি যা চান তা যদি প্রথম প্রতিশ্রুতিটি দ্বিতীয়টির সাথে একীভূত হয় তবে আপনি rebaseকমান্ডটি ব্যবহার করতে পারেন :

git rebase -i --root

শেষ উপায়টি হতে পারে অনাথ শাখা, একই বিষয়বস্তু সহ একটি শাখা তৈরি করা কিন্তু কোনও প্রতিশ্রুতিবদ্ধ ইতিহাস ছাড়াই এবং এতে আপনার নতুন সামগ্রী প্রতিশ্রুতিবদ্ধ:

git checkout --orphan <new-branch-name>

7
এটি খুব খারাপ যে এটি গৃহীত উত্তর নয়। এটি খুব খারাপ যে গুগলে বেশিরভাগ হিটগুলি "আপনি প্রথম প্রতিশ্রুতিটি পূর্বাবস্থায় ফিরিয়ে আনতে পারবেন না" বলে বলে। এটি আমার জন্য কৌশলটি করেছে। ধন্যবাদ!
ড্যানিয়েলপপস

1
আপনার সমর্থনের জন্য @ ড্যানিয়েলপপস ধন্যবাদ! এটা লক্ষ্য করা ভাল যে আমি 3 বছর পরে এই প্রশ্নের উত্তর দিয়েছি। এর মধ্যেই গিট বিবর্তিত হয়েছে।
tzi

আমি রিবেস ব্যবহার করেছি, দ্বিতীয় প্রতিশ্রুতিটিকে "স্কোয়াশ" হিসাবে চিহ্নিত করেছি এবং তারপরে একটি - বল পুর্বে উত্সাহিত করেছি। ধন্যবাদ!
ফিলিপ এটজ

1
গিট আপডেট-রেফ-ডি হেড হ'ল সমস্ত ইতিহাস মুছে ফেলার সর্বাধিক সুরক্ষিত উপায়, কেবল প্রাথমিক প্রতিশ্রুতি নয়।
ব্যবহারকারী 1767316

আমি এটি করেছি এবং এটি আমার সমস্ত ফাইল মুছে ফেলেছিল যা আমি প্রথম প্রতিশ্রুতিতে যুক্ত করেছি। দু: খিত। কমপক্ষে এটি খুব বেশি ছিল না
ভায়াচ্লাভ সোসিভিনা

42

প্রথম প্রতিশ্রুতিবদ্ধ হওয়ার আগে কিছুই নেই, যেমন প্রতি প্রতিশ্রুতি পিতামাতার প্রতিশ্রুতি বোঝায়। এটি প্রথম প্রতিশ্রুতি বিশেষ (একটি অনাথ অঙ্গীকার) করে তোলে, সুতরাং আগের "রাষ্ট্র" উল্লেখ করার উপায় নেই।

সুতরাং আপনি যদি প্রতিশ্রুতি সংশোধন করতে চান, আপনি সহজভাবে করতে পারেন git commit --amend: এটি অন্যটি তৈরি না করেই প্রতিশ্রুতি পরিবর্তন করবে।

আপনি যদি কেবল সমস্তটি শুরু করতে চান তবে .gitসংগ্রহস্থলটি মুছুন এবং এর সাথে অন্যটি তৈরি করুনgit init


7
এই উত্তরটি ভুল: প্রথম অঙ্গীকারের আগে রাজ্যে ফিরে আসার একটি উপায় আছে। দেখুন tzi এর উত্তর নিচে।
ডেভিড নেলসন

2
দ্য --amendএছাড়াও লেখক সঠিকভাবে যদি এটি প্রাথমিকভাবে ত্রুটিপূর্ণভাবে ছিল আপডেট করবে না। এটি আমার প্রয়োজন ছিল তাই আমি স্বীকৃত উত্তরটি ব্যবহার করেছি এবং তার পরিবর্তে কেবল একটি নতুন প্রতিশ্রুতি করেছি।
মার্ক এডিংটন

11
# Check out to a temporary branch:
git checkout --orphan TEMP_BRANCH

# Add all the files:
git add -A

# Commit the changes:
git commit -am "Initial commit"

# Delete the old branch:
git branch -D master

# Rename the temporary branch to master:
git branch -m master

# Finally, force update to our repository:
git push -f origin master

3
কোনও উত্তর নয়: প্রশ্নটি ছিল, "প্রথম প্রতিশ্রুতিটি কীভাবে সরিয়ে ফেলা হবে", এবং "শেষ প্রতিশ্রুতি ব্যতীত কীভাবে সবকিছু মুছবেন" নয়।
পিটারহ - মনিকা পুনরায় ইনস্টল করুন

1
আমি ঠিক এই জন্য খুঁজছিলাম। ধন্যবাদ!
ক্রিজিসটফ টমাসজেউস্কি

6

আপনি কেবল নিজের প্রথম প্রতিশ্রুতি সম্পাদনা করতে চাইতে পারেন (যেমন একটি গিট রেপোতে সর্বদা প্রথম প্রতিশ্রুতি থাকে)। git commit --amend --reset-authorস্বাভাবিক পরিবর্তে ব্যবহার বিবেচনা করুন git commit --amend


1
কোনও উত্তর নয়: প্রশ্নটি প্রথম প্রতিশ্রুতি মুছে ফেলতে চেয়েছিল এবং শেষটির বৈশিষ্ট্যগুলিকে সংশোধন করতে চায় নি।
পিটারহ - মনিকা পুনরায় ইস্ট

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

3

আমি কোনও রেপো থেকে সমস্ত গিট কমিটিকে পূর্বাবস্থায় নেওয়ার একটি উপায় খুঁজছিলাম, যেমনটি কখনও ঘটেছিল না।

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

এই উত্তরগুলির কোনওোটাই আমার পক্ষে একেবারেই সমাধান করেনি। তবে প্রচুর অনুসন্ধান এবং পরীক্ষা-নিরীক্ষার পরেও আমি এটি কাজ করতে পেলাম!

git update-ref -d HEAD
git push origin master -f

আশা করি এটি আপনাকে সহায়তা করবে। দিন শুভ হোক.


1
এই উত্তরটি যে কারও কাছে পড়ার জন্য স্পষ্ট হওয়ার জন্য: এটি প্রতিটি প্রতিশ্রুতি মুছে ফেলে তবে ওপি কেবল কোনও রেপোতে করা প্রথম প্রতিশ্রুতি মুছে ফেলতে চায়; প্রথম প্রতিশ্রুতি মোছার জন্য এটি চালাবেন না কারণ এটি সমস্ত কমিটি মুছে ফেলবে।
জোডি ব্রুচন

2

আর একটি উপায় যা আপনি করতে পারেন তা হ'ল:

  1. আপনি রাখতে চান এমন একটি শাখায় চেকআউট করুন (বলুন) git checkout dev
  2. এখন, আপনি যে শাখাটি পুনরায় সেট করতে চান তা মুছুন git branch -D master
  3. এখন, একই নামের সাথে একটি খালি শাখা তৈরি করুন git checkout --orphan master

অবশ্যই, এই সমস্তগুলি আপনার ব্যবহারের উপর নির্ভর করে, তবে আপনার যদি একাধিক শাখা থাকে, .gitডিরেক্টরি মুছলে তা বোঝা যায় না।


3
এটি করার পরে, আপনাকে চাপ দেওয়ার আগে ব্রাটকে রিমোটে মুছতে হবে। অন্যথায়, ধাক্কা দেওয়ার চেষ্টা করার সময় আপনার এই ত্রুটি থাকবে:! [প্রত্যাখাত] মাস্টার -> মাস্টার (দ্রুত-ফরোয়ার্ড) - ত্রুটি: কিছু রেফকে 'git@github.com: r1 / r2.git' এর দিকে ঠেলে দিতে ব্যর্থ হয়েছে - ইঙ্গিত: আপডেটগুলি প্রত্যাখ্যান করা হয়েছে কারণ আপনার বর্তমান শাখার টিপটি পিছনে - ইঙ্গিত: এটির দূরবর্তী অংশ। আবার চাপ দেওয়ার আগে দূরবর্তী পরিবর্তনগুলি (যেমন: ইঙ্গিত: 'গিট টান ...') একীভূত করুন ... - আপনি যদি গিট টানেন তবে সমস্ত কমিট ফিরে আসবে।
dxvargas

2

আপনি যদি অন্য শাখা রাখতে চান তবে উদাহরণস্বরূপ masterশাখাটি অন্য ইতিহাসের কাছে সাধারণ ইতিহাস ব্যতীত নতুন করে শুরু করুন, এটি অর্জনের একটি নিরাপদ উপায় হল একটি নতুন সংগ্রহশালা তৈরি করা এবং আপনার পুরানো শাখায় এর বিষয়বস্তুটি পুশ করা:

cd ..
git init newrepo
cd newrepo
# make some initial commits
git push ../oldrepo master:newmaster

এটি newmasterপুরাতন সংগ্রহস্থলে শাখা তৈরি করে , ইতিহাস সহ অন্যান্য শাখাগুলির সাথে এটি সাধারণ নয়। অবশ্যই, আপনি masterপাশাপাশি ওভাররাইট করতে পারেন git push -f

আপনি যদি সমস্ত শাখা এবং সমস্ত বিদ্যমান সামগ্রী ধ্বংস করতে চান তবে কেবল চালান

rm -rf .git/

1
কোনও উত্তর নয়: ওপি প্রথম প্রতিশ্রুতিটি সরিয়ে ফেলতে চেয়েছিল এবং প্রাথমিক প্রতিশ্রুতি হিসাবে বর্তমান কার্যক্ষম গাছের সাথে নতুন গিট রেপো শুরু করতে চায়নি।
পিটারহ - মনিকা পুনরায় ইস্ট

@ পেপার আমি সম্মত হলাম git rebase --rootসম্ভবত ওপি যা চেয়েছিল, তবে এই উত্তরের দুটি বিবেচনার বিষয় বিবেচনা করে, কেউ যদি এখনও এটি প্রাসঙ্গিক বলে মনে হয় তবে আমি এটি মুছে ফেলা থেকে বিরত থাকব।
ব্যবহারকারীর 1338062

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

0

আপনি যদি এটি প্রতিশ্রুতিবদ্ধ থাকেন তবে তা ধাক্কা না দিয়ে থাকেন তবে কেবল .git ডিরেক্টরিটি সরিয়ে দিন এবং git initআবার ...


@ পেপার হ্যাঁ তা করে। আপনি ধরে নিচ্ছেন (আমি মনে করি) যে ওপির প্রশ্নটি প্রথম প্রতিশ্রুতি মুছে ফেলতে চাইছে তবে পরবর্তীকালে কমিটগুলি চালিয়ে যাবে। আরেকটি সম্ভাবনা (যা আমি মনে করি পুরোপুরি ভাল ওপি প্রশ্নের সাথে মিলে যায় - এবং যা এই উত্তর হল একটি উত্তর) প্রথম মুছে ফেলা এবং শুধুমাত্র একটি শাখা থেকে ফিরে সম্পূর্ণরূপে কমিট, এটা প্রত্যাবর্তন আবার খালি অনুপস্থিত করা হয়।
মাইকবিটেন

@ মাইকবিটোন আপনি ঠিক বলেছেন আমি আমার মন্তব্য সরিয়েছি, তবে তারপরে প্রশ্নটি অস্পষ্ট হিসাবে বন্ধ করার জন্য আমাকে ভোট দেওয়া দরকার। দ্রষ্টব্য, যদিও শুধুমাত্র আমাকে এই মন্তব্যটি করা হয়েছিল, তবে আমার পিছনে 40000 দর্শক রয়েছে এবং তাদের একটি উল্লেখযোগ্য অংশ গুগলের সাথে এই প্রশ্নটি পেয়েছে - এবং তারা যা চেয়েছিল তা তারা পায় নি।
পিটারহ - মনিকা পুনরায় ইনস্টল করুন

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

0

প্রশ্নের উত্তর নির্ভর করে:

  • আপনি কোনও শাখায় প্রথম এবং কেবল প্রতিশ্রুতি সরিয়ে ফেলতে চান (অন্য শাখা যেমন ছিল তেমন ছেড়ে দেওয়া) বা না

  • আপনি কিছু শাখায় প্রথম প্রতিশ্রুতিটি সরিয়ে ফেলতে চান, তবুও পরবর্তীকালের কমিটগুলি (এবং অন্যান্য শাখাগুলি) 'জায়গায় রেখে' চলে যেতে চান।

এর মধ্যে দ্বিতীয়টি তুলনামূলকভাবে সহজ। আপনাকে মূলত পুনরায় চালু করতে হবে - বেশিরভাগ উত্তর এখানে করার উপায় সম্পর্কে।

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

সুতরাং আমি আশা করি যে এই উত্তরটি যা স্পষ্ট ছিল না তা পরিষ্কার করে দিয়েছে - যে দুটি ভিন্ন পদ্ধতির দরকার যা দুটি ভিন্ন (কম বা কম যুক্তিসঙ্গত) দৃশ্যের জন্য যা আপনি করতে সক্ষম হতে পারেন এমন দুটি জিনিসই যাতে ক্রমযুক্ত হতে পারে ওপি যা চায় তা পুরোপুরি আয়ত্ত করতে।

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