গিট কমিট থেকে ফাইলগুলি সরান


1611

আমি গিট ব্যবহার করছি এবং আমি কয়েকটি ফাইল ব্যবহার করে প্রতিশ্রুতিবদ্ধ করেছি

git commit -a

পরে, আমি দেখতে পেলাম যে কোনও ফাইল ভুল করে কমিটের সাথে যুক্ত হয়েছিল।

শেষ প্রতিশ্রুতি থেকে আমি কীভাবে একটি ফাইল সরিয়ে ফেলতে পারি?


2
এই লিঙ্কটি আপনার প্রশ্নের জন্য নির্ভুল: stackoverflow.com/questions/307828/...
b3h3m0th

@ চার্লসবি: হ্যাঁ, এটি আমার শেষ প্রতিশ্রুতি
ললি

8
আপনি কি সার্ভারে প্রতিশ্রুতি ঠেলেছেন?
পরিতোষ সিং

4
আমি কেবল এটি ব্যবহার করে করছি:git reset filepath
ফেলিপেকেম

উত্তর:


3086

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

git reset --soft HEAD^ 

অথবা

git reset --soft HEAD~1

তারপরে অযাচিত ফাইলগুলি কমিট থেকে বাদ দিতে পুনরায় সেট করুন:

git reset HEAD path/to/unwanted_file

এখন আবার প্রতিশ্রুতিবদ্ধ, আপনি একই প্রতিশ্রুতি বার্তাটি পুনরায় ব্যবহার করতে পারেন:

git commit -c ORIG_HEAD  

86
এর জন্য ধন্যবাদ. এটি যোগ করার মতো যে আপনি যদি ইতিমধ্যে আপনার পূর্ববর্তী (ভুল) প্রতিশ্রুতিটি git pushঠেকিয়ে রেখেছিলেন এবং এখন আপনার রেপোতে আপনার সমাধানের চেষ্টা করেন তবে এটি অভিযোগ করবে Updates were rejected because the tip of your current branch is behind its remote counterpart.। আপনি কি নিশ্চিত যে আপনি তাদের ধাক্কা চান হন, তাহলে (যেমন এটি আপনার কাঁটাচামচ থাকবে) তারপর আপনি ব্যবহার করতে পারে -fবিকল্প ধাক্কা, যেমন জোর করে git push origin master -f। (অন্যরা যে
ধরণের স্ট্রো

57
git reset --soft HEAD^আমার সবচেয়ে সাধারণ পূর্বাবস্থায় ফিরে আসা অপারেশন
ফেনারল

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

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

15
আমি এ সম্পর্কে অনেক কিছু জানতাম git resetতবে বিদ্যমান প্রতিশ্রুতি "জায়গায়" প্রভাবিত করার একটি উপায় চেয়েছিলাম। আমি সবেমাত্র শিখেছি git commit -C। সুতরাং আমার জন্য, আমি যা চাই তা হ'ল আরও একটি ধাপের সাথে আপনার সঠিক রেসিপি, "নতুন প্রতিশ্রুতি পুনরায়" বানানটি প্রকাশিত git commit -C [hash of original HEAD commit from first step]
মেটাম্যাট

323

মনোযোগ ! আপনি শুধুমাত্র আপনার আগের থেকে একটি ফাইল অপসারণ কমিট, এবং করতে চান, ডিস্কে এটা রাখা পড়তে উত্তর juzzlin এর শুধুমাত্র উপরের।

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

  1. ফাইল সরান git rm <file>
  2. সংশোধন পতাকা সঙ্গে প্রতিশ্রুতিবদ্ধ: git commit --amend

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

মন্তব্যগুলিতে যেমন বলা হয়েছে, git rmএখানে ব্যবহার করা হ'ল rmকমান্ডটি ব্যবহার করার মতো !


120
আপনি git rm --cachedফাইলগুলি ডিস্কে রাখার জন্যও ব্যবহার করতে পারেন
আরকাদি কুকারকিন

14
এই উত্তরটি ব্রাউজকারীদের সতর্কতা: নিশ্চিত করুন যে আপনি ফাইলটি মুছে ফেলতে চান (যেমন চলে গেছে!), কেবল এটি কমিটের তালিকা থেকে সরিয়ে নেই।
স্কট বিগস

8
অন্যদের কী বলার যোগ করার জন্য (এবং আরও সহজ, যদি না আপনি সত্যিই চাই এই কাজ করতে না মনে রাখা করতে): মধ্যে কমান্ড হয় কি করছেন নিজেই আছে! rmgitrm
yo

@ চারলেসবি আপনি আরও উত্তরদর্শন দেওয়ার জন্য দয়া করে আপনার উত্তরটিতে আরকাদে কুকারকিনের মন্তব্য থেকে নোটটি যুক্ত করতে পারেন?
mopo922

2
নোট করুন যে ফাইলগুলি পুনরায় পুনরুদ্ধার করা যেতে পারে, আপনি যদি নিজের মতামত পরিবর্তন করেন, পূর্বে প্রতিশ্রুতি git commit --amendএখনও আছে এবং উদাহরণস্বরূপ এটির সাথে সন্ধান করা যেতে পারে git reflog। সুতরাং অন্যান্য মন্তব্যগুলির মতো এটি মন্দ নয়।
স্টিওহান

165

বিদ্যমান উত্তরগুলি হ'ল সর্বশেষ কমিট থেকে অযাচিত ফাইলগুলি সরিয়ে ফেলার বিষয়ে কথা বলছে ।

যদি আপনি কোনও পুরানো প্রতিশ্রুতি (এমনকি ধাক্কা দেওয়া) থেকে অযাচিত ফাইলগুলি সরিয়ে নিতে চান এবং কোনও নতুন প্রতিশ্রুতি তৈরি করতে চান না, যা অযৌক্তিক, ক্রিয়াটির কারণে:

1।

আপনি যে প্রতিশ্রুতিটি ফাইলটি চান তা সন্ধান করুন।

git checkout <commit_id> <path_to_file>

আপনি অনেকগুলি ফাইল সরিয়ে দিতে চাইলে আপনি একাধিকবার এটি করতে পারেন।

2।

git commit -am "remove unwanted files"

3।

এর commit_id কমিট খুঁজুন যা ফাইল ভুল করে যোগ করা হয় নি , চল বলুন "35c23c2" এখানে

git rebase 35c23c2~1 -i  // notice: "~1" is necessary

এই কমান্ডটি আপনার সেটিংস অনুযায়ী সম্পাদকটি খুলবে। ডিফল্ট এক vim হয়।

শেষ প্রতিশ্রুতি, যা "অবাঞ্ছিত ফাইলগুলি মুছে ফেলা উচিত", ভুল প্রতিশ্রুতি (আমাদের ক্ষেত্রে "35c23c2") এর পরবর্তী লাইনে সরিয়ে নিয়ে কমান্ডটি সেট করুন fixup:

pick 35c23c2 the first commit
fixup 0d78b28 remove unwanted files

ফাইলটি সংরক্ষণের পরে আপনার ভাল হওয়া উচিত।

শেষ :

git push -f

দুর্ভাগ্যক্রমে আপনি যদি দ্বন্দ্ব পান তবে আপনাকে সেগুলি ম্যানুয়ালি সমাধান করতে হবে।


2
ন্যানো দিয়ে এটি করা কল্পিত! Ctrl + K, Ctrl + U, একটি 'f', Ctrl + X রাখুন, 'y' রাখুন, এবং ভয়েলা!
সিকুইলো

6
আপনি যদি পূর্বের সংস্করণে কেবল পূর্ববর্তী সংস্করণে ফিরিয়ে না দিয়ে রেপো থেকে ফাইলগুলি (ফাইল সিস্টেম নয়) থেকে সরিয়ে নিতে চান তবে 1 ধাপের পরিবর্তে করুন git rm --cached <file(s)>
ওয়াল্ডরিয়াস

2
অপেক্ষা করুন আপনি ইচ্ছামত ইন্টারেক্টিভ-রিবেস ফাইলের চারপাশে কমিটগুলি সরাতে পারবেন?
ড্যান রোজনস্টার্ক

2
আপনি সম্পূর্ণরূপে করতে পারেন, তবে আপনি বিবাদ পেতে (বা নাও) পেতে পারেন।
ব্রায়ান

6
কমান্ড যুক্ত করে এই প্রক্রিয়াটি কিছুটা সহজ --fixup=35c23c2করা যায় git commit। এটি প্রতিশ্রুতিটি প্রয়োজনীয় প্রতিশ্রুতি ফিক্সআপ হিসাবে স্বয়ংক্রিয়ভাবে সেট আপ করবে এবং সুতরাং আপনাকে এটি রিবেসে নির্দিষ্ট করার দরকার হবে না। উপরন্তু, যদি আপনি যোগ --autosquashকরতে git rebaseকমান্ড Git স্বয়ংক্রিয়ভাবে আপনার সঠিক অবস্থানে কমিট, তাই আপনি ইন্টারেক্টিভ রি-বেসের ফলে মধ্যে কিছু করতে প্রয়োজন হবে না সরানো হবে - শুধু হিসেবে সংরক্ষণ করতে (আপনি এমনকি প্রয়োজন হবে না যার মানে -iপতাকা, যদিও আমি আশা করি যে সবকিছুই প্রত্যাশার মতো দেখায় তা নিশ্চিত করতে যাইহোক এটি ব্যবহার করতে চাই)।
Gus

144

যেমন গৃহীত উত্তর নির্দেশ করে, আপনি সম্পূর্ণ প্রতিশ্রুতি পুনরায় সেট করে এটি করতে পারেন। তবে এটি একটি ভারী হাতের পদ্ধতির।
এটি করার একটি পরিষ্কার উপায় হ'ল প্রতিশ্রুতি রক্ষা করা এবং এগুলি থেকে কেবল পরিবর্তিত ফাইলগুলি সরিয়ে ফেলা।

git reset HEAD^ -- path/to/file
git commit --amend --no-edit

git resetযেমন পূর্ববর্তী ছিল ফাইল নিতে কমিট, এবং সূচক এটা মঞ্চ হবে। ওয়ার্কিং ডিরেক্টরিতে ফাইলটি অনুচ্চারিত। তারপর কমিট এবং স্কোয়াশ বর্তমান মধ্যে সূচক কমিট হবে।
git commit

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


5
সম্পূর্ণ প্রতিশ্রুতি রক্ষা না করে কেবল একটি একক ফাইল সরানোর জন্য এটি আরও উত্তম উত্তর।
নিমিশ

এটি ঠিক এই উত্তর হিসাবে একই: ডি stackoverflow.com/a/27340569/1623984
ThatsAMorais

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

সব ছেড়ে দাও! :) আমাদের স্পষ্টভাবে সঠিক ধারণা ছিল, এবং উদ্দেশ্য হ'ল সহায়তা করা। আমি মনে করি মার্জ করা একটি ভাল তত্ত্ব।
Thatsamorais

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

41

আপনি যদি সার্ভারে পরিবর্তনগুলি না ঠেকেন তবে আপনি ব্যবহার করতে পারেন

git reset --soft HEAD~1

এটি সমস্ত পরিবর্তনগুলি পুনরায় সেট করবে এবং একটি প্রতিশ্রুতিতে ফিরে যাবে

আপনি যদি নিজের পরিবর্তনগুলি ঠেলাঠেলি করেন তবে @ চারেলসবি এর উত্তর অনুসারে পদক্ষেপগুলি অনুসরণ করুন


2
-১ গিট রিসেটটি মঞ্চ অঞ্চল থেকে ঘটে যাওয়া ফাইলগুলি সরিয়ে দেয়, এখানে পরিবর্তনটি প্রতিশ্রুতিবদ্ধ হয়েছে
চার্লসবি

ঠিক আছে, তবে আমি আমার ডাউনটোট রাখব যেহেতু এটি ওপি চায় না :) দুঃখিত
চার্লসবি

ঠিক আছে আমার জন্য এটি ঠিক আছে, তবে প্রতিপক্ষ কেন এটি চায় না। সমস্যাটা কি?
পরিতোষ সিং

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

3
@ এরিস পরিবর্তনগুলি দেখতে <গিট ডিফ
পরিতোষ সিং

37

আরএম ব্যবহার করে ফাইলটি সরিয়ে ফেললে তা মুছে যাবে!

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

পূর্ববর্তী কিছু অবস্থায় ফাইলটি ফিরিয়ে আনার জন্য:

    git checkout <commit_id> <path_to_file>

অথবা এটি প্রত্যন্ত হেডে রাজ্যে ফেরত পাঠাতে:

    git checkout origin/master <path_to_file>

তারপরে প্রতিশ্রুতি সংশোধন করুন এবং ফাইলটি তালিকা থেকে অদৃশ্য হয়ে গেছে (এবং আপনার ডিস্ক থেকে মোছা হয়নি!)


36
git checkout HEAD~ path/to/file
git commit --amend

1
এটি সর্বশেষ প্রতিশ্রুতি সংশোধন করার সেরা উপায়, যেটি ধাক্কা দেয়নি। এটি এক ফাইলের পরিবর্তনগুলি পুনরায় সেট করবে, কার্যকরভাবে সেই ফাইলটি শেষ প্রতিশ্রুতি থেকে সরিয়ে ফেলবে।
অ্যালেক্স ব্রাভো

এটি ফাইলও বদলেছে। ফাইলের স্থানীয় পরিবর্তনগুলি কীভাবে সংরক্ষণ করবেন?
theonlygusti

29

নিম্নলিখিতটি কেবল আপনার ইচ্ছা মতো ফাইলটি আনস্টেজ করবে, যা ওপি বলেছিল।

git reset HEAD^ /path/to/file

আপনি নীচের মত কিছু দেখতে পাবেন ...

প্রতিশ্রুতিবদ্ধ হতে পরিবর্তনগুলি: (স্টেঞ্জার জন্য "গিট রিসেট হেড ..." ব্যবহার করুন)

পরিবর্তিত: / পথ / থেকে / ফাইল

প্রতিশ্রুতিবদ্ধকরণের জন্য পরিবর্তনগুলি মঞ্চস্থ করা হয়নি: (প্রতিশ্রুতিবদ্ধ প্রতিবেদনটি আপডেট করতে "গিট অ্যাড ..." ব্যবহার করুন) (কার্যনির্বাহী ডিরেক্টরিতে পরিবর্তনগুলি বাতিল করতে "গিট চেকআউট - ..." ব্যবহার করুন)

পরিবর্তিত: / পথ / থেকে / ফাইল

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

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

যখন আপনি প্রতিশ্রুতিবদ্ধ করতে প্রস্তুত:

git commit --amend -a

বা (যদি আপনি কিছু অন্যান্য পরিবর্তনগুলি পেয়ে থাকেন যা আপনি প্রতিশ্রুতিবদ্ধ করতে চান না, তবে)

git commit add /path/to/file
git commit --amend

3
জজলিনের উত্তর দুর্দান্ত, তবে যখন আপনি কেবল একটিটিকে স্টেজেস্ট করতে চান তখন সম্পূর্ণ প্রতিশ্রুতিটি আনস্টেজ করা অত্যধিক। আপনি যদি হারাতে চান না এমন প্রতিশ্রুতিবদ্ধ ফাইলগুলিতে বর্তমানে স্টেস্টেজ পরিবর্তন না করে থাকলে পুরো কমিটিকে আনস্টেজ করা সমস্যার কারণ হতে পারে।
Thatsamorais

27

আমি উদাহরণ দিয়ে আপনাকে ব্যাখ্যা করব।
A, B, C এর পর পর তিনটি কমিট করা যাক। কমিট বিতে এমন একটি ফাইল রয়েছে যা প্রতিশ্রুতিবদ্ধ হওয়া উচিত ছিল না।

git log  # take A commit_id
git rebase -i "A_commit_ID" # do an interactive rebase
change commit to 'e' in rebase vim # means commit will be edited
git rm unwanted_file
git rebase --continue
git push --force-with-lease <branchName>    

যদি নির্দিষ্ট ফাইলটি শেষ বা পূর্বের প্রতিশ্রুতিতে না থাকে তবে এটি সর্বাধিক মার্জিত উপায়। আমি এমনকি এটি সাধারণভাবে সবচেয়ে সুন্দর উপায় বলতে চাই। আমি ইন্টারেক্টিভ রিবেসিং পছন্দ করি।
bvgheluwe

একটি একক প্রতিশ্রুতি হিসাবে, পরিবর্তন noopকরুন edit [A_commit_ID]বাe [A_commit_ID]
TamusJRoyce

23

আপনি সহজভাবে চেষ্টা করতে পারেন।

git reset --soft HEAD~1

এবং একটি নতুন প্রতিশ্রুতি তৈরি করুন।

তবে, সেখানে একটি দুর্দান্ত সফটওয়্যার রয়েছে "গিটক্রেন"। যা গিটের সাথে কাজ করা সহজ করে তোলে।


1
এবং কেবল লক্ষ করুন: এর পরে, আপনি git commit --amendআপনার শেষ প্রতিশ্রুতিতে ফাইল অপসারণটি আপডেট করতে চান; এবং তারপরে, আপনি এটি পরীক্ষা করতে পারেনgit log -1 --stat

13
git rm --cached <file_to_remove_from_commit_<commit_id>_which_added_file>
git commit -m "removed unwanted file from git"

আপনাকে স্থানীয় ফাইলটি এখনও ছেড়ে দেবে। আপনি যদি স্থানীয়ভাবে ফাইলটি না চান তবে আপনি - ক্যাশেড বিকল্পটি এড়িয়ে যেতে পারেন।

যদি সমস্ত কাজ আপনার স্থানীয় শাখায় থাকে তবে আপনার ফাইলটি পরবর্তী প্রতিশ্রুতিতে রাখা দরকার, এবং একটি পরিষ্কার ইতিহাস থাকার মতো, আমি মনে করি এটি করার সহজতর উপায় হতে পারে:

git rm --cached <file_to_remove_from_commit_<commit_id>_which_added_file>
git commit --squash <commit_id>
git add <file_to_remove_from_commit_<commit_id>_which_added_file>
git commit -m "brand new file!"
git rebase --interactive <commit_id>^

এবং তারপরে আপনি আরও জটিল কমান্ডগুলি স্মরণ না করে বা বার্তা দিতে বা যতটা টাইপ না করে স্বাচ্ছন্দ্যে রিবেসটি শেষ করতে পারেন।


এটি আমার পক্ষে কাজ করে। আমি ধরে নিচ্ছি আপনি যদি ফাইলগুলিকে আবার মিক্সে যুক্ত করতে চান তবে কেবল গিট অ্যাড-এ বা গিট অ্যাড ব্যবহার করুন। এবং তারা ফিরে এসেছে।
আলেকজান্ডার মিলস

11

গিট জিইউআই ব্যবহার করা পূর্বের প্রতিশ্রুতি থেকে কোনও ফাইল সরানো সহজ করতে পারে।

ধরে নিই যে এটি কোনও ভাগ করা শাখা নয় এবং আপনার আবার ইতিহাস রাইটিংয়ের আপত্তি নেই , তবে চালান:

git gui citool --amend

আপনি যে ফাইলটি ভুলভাবে প্রতিশ্রুতিবদ্ধ হয়েছিল তা আন-চেক করতে পারেন এবং তারপরে "কমিট" ক্লিক করতে পারেন click

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

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


2
উবুন্টুতে, আপনি গিট গুই দিয়ে ইনস্টল করতে পারেনsudo apt-get install git-gui
জেডিম্যাটটিও

ধন্যবাদ! আমি একটি সমস্যার (বাগ?) আটকে ছিলাম যেখানে একটি .git রেপো সম্বলিত একটি ফোল্ডার যুক্ত হয়েছিল এবং সমস্ত নিয়মিত সরানোর আদেশগুলি কাজ করে না। এটি তবে সাহায্য করেছিল। এটি কিছুটা ফিরে ফিরে আসার git rebase -i HEAD~4পরে আমি প্রথমে ব্যবহার করেছিলাম এবং তারপরে সম্পাদকটি খোলার জন্য আপনার আদেশটি চালিয়েছি। আরেকটি নোট: "আনস্টেজিং" "কমিট" মেনুতে পাওয়া যাবে।
জনি স্কোভডাল

সবার সহজ সমাধান। মনে রাখা সহজ। এবং ব্যবহারের তুলনায় ত্রুটি-প্রবণতা কম - git reset --soft HEAD^(সাফ্ট আর্গ মনে রাখবেন), তারপরে git commit -c ORIG_HEAD(--amend এর পরিবর্তে, যা সমস্ত কিছু স্ক্রু করে দেয়)।
ব্রেন্ট ফাউস্ট

9

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

git checkout origin/<remote-branch> <filename>
git commit --amend

6

নিম্নলিখিত কমান্ডগুলির একটি ক্রম করুন:

//to remove the last commit, but preserve changes  
git reset --soft HEAD~1

//to remove unneded file from the staging area  
git reset HEAD `<your file>` 

//finally make a new commit  
git commit -m 'Your message'

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

এর অর্থ হ'ল আপনি যখন স্থানীয় কাজটি চালাচ্ছিলেন তখন আপনার দূরবর্তী রেপোর অবস্থা পরিবর্তিত হয়েছে। এবং 'গিট টান' পরে আপনার স্থানীয় পরিবর্তনগুলি দূরবর্তীগুলির সাথে একত্রীকরণ করা উচিত, এটি। অবশ্যই, আপনার পরিবর্তনগুলি অবশ্যই রয়ে যাবে।
সের্গে ওনিশচেঙ্কো

অন্য কথায়, আপনি যদি এই ত্রুটিটি @ দেজিগো পান তবে আপডেটটি চাপিয়ে দেওয়ার জন্য -f পতাকা যুক্ত করুন।
জাংলেদেব

5

আমাকে একটি অতিরিক্ত কমান্ড চালাতে হওয়ায় শীর্ষের উত্তরটি পরিপূরক করতে চেয়েছিল:

git reset --soft HEAD^
git checkout origin/master <filepath>

চিয়ার্স!


স্বাগত. এই উত্তরটি আরও ভাল হবে যদি আপনি ব্যাখ্যা করেন যে কমান্ডগুলি আসলে কী করে।
মার্ক

3

এমন কিছু যা আমার পক্ষে কাজ করেছিল তবে এখনও মনে করেন এর থেকে আরও ভাল সমাধান হওয়া উচিত:

$ git revert <commit_id>
$ git reset HEAD~1 --hard

অন্যান্য প্রতিশ্রুতিতে আপনি যে পরিবর্তনটি বাতিল করতে চান তা কেবল ছেড়ে দিন, অন্যদের পরীক্ষা করে দেখুন

$ git commit --amend // or stash and rebase to <commit_id> to amend changes

3

git reset --soft HEAD^আপনার প্রতিশ্রুতি ফিরিয়ে দেয়, এবং আপনি যখন টাইপ করেন git status, এটি আপনাকে কী করতে হবে তা বলে:

Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

2

আসলে, আমি মনে করি একটি দ্রুত এবং সহজ উপায় হ'ল গিট রিবেস ইন্টারেক্টিভ মোড ব্যবহার করা।

git rebase -i head~1  

(বা হেড ~ 4, আপনি কতদূর যেতে চান)

এবং তারপরে, 'বাছাই' পরিবর্তে 'সম্পাদনা' ব্যবহার করুন। 'সম্পাদনা' কতটা শক্তিশালী তা আমি বুঝতে পারি নি।

https://www.youtube.com/watch?v=2dQosJaLN18

আশা করি আপনি এটি সহায়ক পাবেন।


ভিডিওটি 10 ​​মিনিটের এবং এটি এতটা কার্যকর নয়
মলবর্গ

2

যেখানে আমি কেবল একটি ফাইল ফিরিয়ে দিতে চেয়েছিলাম সেখানে একটি স্থানীয় শাখায় আমার পরিবর্তন আছে একই সমস্যা ছিল। আমার জন্য যা কাজ করেছে তা হ'ল -

( বৈশিষ্ট্য / টার্গেট_ব্রাঞ্চ নীচে আমি যেখানে একটি নির্দিষ্ট ফাইলের জন্য আমি পূর্বাবস্থায় ফেরাতে চাইছিলাম সেগুলি সহ আমার সমস্ত পরিবর্তন রয়েছে)

( উত্স / বৈশিষ্ট্য / টার্গেট_ ব্রাঞ্চ হ'ল এমন একটি দূরবর্তী শাখা যেখানে আমি আমার পরিবর্তনগুলিতে ধাক্কা দিতে চাই)

( বৈশিষ্ট্য / স্টেজিং হল আমার অস্থায়ী মঞ্চায়ন শাখা যেখানে আমি সেই ফাইলটিতে পরিবর্তন বাদে আমার সমস্ত পছন্দসই পরিবর্তনগুলি থেকে চাপ দিচ্ছি)

  1. আমার উত্স / বৈশিষ্ট্য / লক্ষ্য_ব্রঞ্চ থেকে একটি স্থানীয় শাখা তৈরি করুন - এটিকে বৈশিষ্ট্য / মঞ্চায়ন বলা হয়

  2. আমার কাজ স্থানীয় শাখা একীভূত বৈশিষ্ট্য / target_branch করার বৈশিষ্ট্য / পর্যায়ের শাখা

  3. বৈশিষ্ট্য / পর্যায়ক্রমে চেক আউট করা হয়েছে তারপরে গিট রিসেট --সোফট ওআরআইজিএইইডিএইড (এখন বৈশিষ্ট্য / স্টেজিং থেকে সমস্ত পরিবর্তন মঞ্চস্থ হবে তবে নিঃশর্ত))

  4. আমি পূর্বে অপ্রয়োজনীয় পরিবর্তনগুলির সাথে চেক ইন করেছি এমন ফাইলটি আনস্টেজ করা হয়নি

  5. পরিবর্তিত জন্য মূল প্রজেক্টের শাখা বৈশিষ্ট্য / পর্যায় থেকে উৎপত্তি / বৈশিষ্ট্য / target_branch

  6. পর্যায়ক্রমে করা বাকী পরিবর্তনগুলি প্রতিশ্রুতিবদ্ধ এবং আমার দূরবর্তী উত্স / বৈশিষ্ট্য / টার্গেট_ব্র্যাঞ্চে প্রবাহিত করে


1

আপনার যদি আর সেই ফাইলটির প্রয়োজন না হয় তবে আপনি এটি করতে পারেন

git rm file
git commit --amend
git push origin branch

1

আপনি যদি গিটহাব ব্যবহার করছেন এবং এখনও প্রতিশ্রুতিটি না চাপিয়ে দিয়েছেন, গিটহাব ডেস্কটপ সহজেই এই সমস্যাটি সমাধান করে:

  1. সংগ্রহস্থল -> সর্বাধিক সাম্প্রতিক প্রতিশ্রুতি পূর্বাবস্থায় রাখুন চয়ন করুন
  2. আপনি যে ফাইলটি ভুল করে যুক্ত করেছেন তা নির্বাচন করুন। আপনার পূর্ববর্তী প্রতিশ্রুতি বার্তাটি ইতিমধ্যে ডায়ালগ বাক্সে থাকবে।
  3. কমিট বোতাম টিপুন!

1

আপনি যদি পূর্ববর্তী কমিটগুলি থেকে ফাইলগুলি সরাতে চান তবে ফিল্টারগুলি ব্যবহার করুন

git filter-branch --prune-empty --index-filter 'git rm --ignore-unmatch --cached "file_to_be_removed.dmg"'

যদি আপনি এই ত্রুটিটি দেখেন:

একটি নতুন ব্যাকআপ তৈরি করা যায় না। পূর্ববর্তী ব্যাকআপটি ইতিমধ্যে রেফ / মূল / ফোর্সে -f এর মাধ্যমে ব্যাকআপটি ওভাররাইট করে উপস্থিত রয়েছে

আপনার স্থানীয় রেপোতে কেবল রেফস ব্যাকআপগুলি সরান

$ rm -rf .git/refs/original/refs

1

আপনি যদি নিজের পরিবর্তনগুলি এখনও গিটে ঠেকেন না

git reset --soft HEAD~1

এটি সমস্ত পরিবর্তনগুলি পুনরায় সেট করবে এবং একটি প্রতিশ্রুতিতে ফিরে যাবে

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

git rm <file>
 git commit --amend

বা আরও ভাল:

প্রথমে পুনরায় সেট করুন

git reset --soft HEAD~1

অযাচিত ফাইলটি পুনরায় সেট করুন

git reset HEAD path/to/unwanted_file

আবার প্রতিশ্রুতিবদ্ধ

git commit -c ORIG_HEAD  

এটি উপরের মতই তবে সত্যই ক্রসচেক করতে সহায়তা করেছে
রেশমা

0

এটি আমার জন্য বিট বালতি রেপো থেকে ফাইলটি সরিয়ে ফেলার জন্য কাজ করা হয়েছে যা আমি ফাইলটি প্রাথমিকভাবে শাখায় ঠেলে দিয়েছিলাম।

git checkout origin/develop <path-to-file>
git add <path-to-file>
git commit -m "Message"
git push

0

আমি বর্তমান ফাইলগুলি অন্য একটি ফোল্ডারে অনুলিপি করেছি, তারপরে সমস্ত অনাবন্ধিত পরিবর্তনগুলি থেকে মুক্তি পেয়েছি:

git reset --hard @{u}

তারপরে জিনিসগুলি অনুলিপি করুন। প্রতিশ্রুতিবদ্ধ, ধাক্কা।


0

আপনি কেবল এই আদেশটি ব্যবহার করতে পারেন:

git restore --staged <file>

0
Here is the step to remove files from Git Commit.

>git reset --soft HEAD^1(either commitid ) -- now files moved to the staging area.
>git rm --cached filename(it will removed the file from staging area)
>git commit -m 'meaningfull message'(Now commit the required files)

-1

এই মুহুর্তের উত্তরগুলির কোনওটিই যুক্তিসঙ্গত নয়। মনে হচ্ছে যথেষ্ট চাহিদা রয়েছে যে আসল সমাধানটি প্রস্তাব করা উচিত: https://github.com/git/git/blob/master/Docamentation/SubmittingPatches

git --uncommit <ফাইলের নাম>

সুন্দর হবে. আমি পেয়েছি যে আমরা ইতিহাসটি সংশোধন করতে চাই না, তবে আমি যদি স্থানীয় এবং ঘটনাক্রমে স্থানীয় "হ্যাক" ফাইল যুক্ত করি এবং প্রতিশ্রুতি থেকে এটি সরাতে চাই তবে এটি অত্যন্ত সহায়ক be

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