আমি গিট ব্যবহার করছি এবং আমি কয়েকটি ফাইল ব্যবহার করে প্রতিশ্রুতিবদ্ধ করেছি
git commit -a
পরে, আমি দেখতে পেলাম যে কোনও ফাইল ভুল করে কমিটের সাথে যুক্ত হয়েছিল।
শেষ প্রতিশ্রুতি থেকে আমি কীভাবে একটি ফাইল সরিয়ে ফেলতে পারি?
git reset filepath
আমি গিট ব্যবহার করছি এবং আমি কয়েকটি ফাইল ব্যবহার করে প্রতিশ্রুতিবদ্ধ করেছি
git commit -a
পরে, আমি দেখতে পেলাম যে কোনও ফাইল ভুল করে কমিটের সাথে যুক্ত হয়েছিল।
শেষ প্রতিশ্রুতি থেকে আমি কীভাবে একটি ফাইল সরিয়ে ফেলতে পারি?
git reset filepath
উত্তর:
আমি এখানে অন্যান্য উত্তরগুলি ভুল বলে মনে করি, কারণ এটি ভুলভাবে প্রতিশ্রুতিবদ্ধ ফাইলগুলি পূর্ববর্তী প্রতিশ্রুতি থেকে মঞ্চ অঞ্চলে ফিরিয়ে আনার প্রশ্ন যা তাদের করা পরিবর্তনগুলি বাতিল না করেই করে। পরিতোষ সিংয়ের পরামর্শ মতো এটি করা যেতে পারে:
git reset --soft HEAD^
অথবা
git reset --soft HEAD~1
তারপরে অযাচিত ফাইলগুলি কমিট থেকে বাদ দিতে পুনরায় সেট করুন:
git reset HEAD path/to/unwanted_file
এখন আবার প্রতিশ্রুতিবদ্ধ, আপনি একই প্রতিশ্রুতি বার্তাটি পুনরায় ব্যবহার করতে পারেন:
git commit -c ORIG_HEAD
git push
ঠেকিয়ে রেখেছিলেন এবং এখন আপনার রেপোতে আপনার সমাধানের চেষ্টা করেন তবে এটি অভিযোগ করবে Updates were rejected because the tip of your current branch is behind its remote counterpart.
। আপনি কি নিশ্চিত যে আপনি তাদের ধাক্কা চান হন, তাহলে (যেমন এটি আপনার কাঁটাচামচ থাকবে) তারপর আপনি ব্যবহার করতে পারে -f
বিকল্প ধাক্কা, যেমন জোর করে git push origin master -f
। (অন্যরা যে
git reset --soft HEAD^
আমার সবচেয়ে সাধারণ পূর্বাবস্থায় ফিরে আসা অপারেশন
git reset
তবে বিদ্যমান প্রতিশ্রুতি "জায়গায়" প্রভাবিত করার একটি উপায় চেয়েছিলাম। আমি সবেমাত্র শিখেছি git commit -C
। সুতরাং আমার জন্য, আমি যা চাই তা হ'ল আরও একটি ধাপের সাথে আপনার সঠিক রেসিপি, "নতুন প্রতিশ্রুতি পুনরায়" বানানটি প্রকাশিত git commit -C [hash of original HEAD commit from first step]
।
মনোযোগ ! আপনি শুধুমাত্র আপনার আগের থেকে একটি ফাইল অপসারণ কমিট, এবং করতে চান, ডিস্কে এটা রাখা পড়তে উত্তর juzzlin এর শুধুমাত্র উপরের।
যদি এটি আপনার শেষ প্রতিশ্রুতি হয় এবং আপনি স্থানীয় এবং দূরবর্তী সংগ্রহস্থল থেকে ফাইলটি পুরোপুরি মুছতে চান তবে আপনি এটি করতে পারেন:
git rm <file>
git commit --amend
সংশোধিত পতাকাটি গিটকে আবার প্রতিশ্রুতিবদ্ধ হতে বলে, তবে "সংশ্লেষ" (দুটি শাখা মার্জ করার অর্থে নয়) এই প্রতিশ্রুতিটি শেষ প্রতিশ্রুতি দিয়ে।
মন্তব্যগুলিতে যেমন বলা হয়েছে, git rm
এখানে ব্যবহার করা হ'ল rm
কমান্ডটি ব্যবহার করার মতো !
git rm --cached
ফাইলগুলি ডিস্কে রাখার জন্যও ব্যবহার করতে পারেন
rm
git
rm
git commit --amend
এখনও আছে এবং উদাহরণস্বরূপ এটির সাথে সন্ধান করা যেতে পারে git reflog
। সুতরাং অন্যান্য মন্তব্যগুলির মতো এটি মন্দ নয়।
বিদ্যমান উত্তরগুলি হ'ল সর্বশেষ কমিট থেকে অযাচিত ফাইলগুলি সরিয়ে ফেলার বিষয়ে কথা বলছে ।
যদি আপনি কোনও পুরানো প্রতিশ্রুতি (এমনকি ধাক্কা দেওয়া) থেকে অযাচিত ফাইলগুলি সরিয়ে নিতে চান এবং কোনও নতুন প্রতিশ্রুতি তৈরি করতে চান না, যা অযৌক্তিক, ক্রিয়াটির কারণে:
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
দুর্ভাগ্যক্রমে আপনি যদি দ্বন্দ্ব পান তবে আপনাকে সেগুলি ম্যানুয়ালি সমাধান করতে হবে।
git rm --cached <file(s)>
।
--fixup=35c23c2
করা যায় git commit
। এটি প্রতিশ্রুতিটি প্রয়োজনীয় প্রতিশ্রুতি ফিক্সআপ হিসাবে স্বয়ংক্রিয়ভাবে সেট আপ করবে এবং সুতরাং আপনাকে এটি রিবেসে নির্দিষ্ট করার দরকার হবে না। উপরন্তু, যদি আপনি যোগ --autosquash
করতে git rebase
কমান্ড Git স্বয়ংক্রিয়ভাবে আপনার সঠিক অবস্থানে কমিট, তাই আপনি ইন্টারেক্টিভ রি-বেসের ফলে মধ্যে কিছু করতে প্রয়োজন হবে না সরানো হবে - শুধু হিসেবে সংরক্ষণ করতে (আপনি এমনকি প্রয়োজন হবে না যার মানে -i
পতাকা, যদিও আমি আশা করি যে সবকিছুই প্রত্যাশার মতো দেখায় তা নিশ্চিত করতে যাইহোক এটি ব্যবহার করতে চাই)।
যেমন গৃহীত উত্তর নির্দেশ করে, আপনি সম্পূর্ণ প্রতিশ্রুতি পুনরায় সেট করে এটি করতে পারেন। তবে এটি একটি ভারী হাতের পদ্ধতির।
এটি করার একটি পরিষ্কার উপায় হ'ল প্রতিশ্রুতি রক্ষা করা এবং এগুলি থেকে কেবল পরিবর্তিত ফাইলগুলি সরিয়ে ফেলা।
git reset HEAD^ -- path/to/file
git commit --amend --no-edit
git reset
যেমন পূর্ববর্তী ছিল ফাইল নিতে কমিট, এবং সূচক এটা মঞ্চ হবে। ওয়ার্কিং ডিরেক্টরিতে ফাইলটি অনুচ্চারিত। তারপর কমিট এবং স্কোয়াশ বর্তমান মধ্যে সূচক কমিট হবে।git commit
এটি মূলত পূর্বের প্রতিশ্রুতিযুক্ত ফাইলটির সংস্করণ নেয় এবং এটি বর্তমান প্রতিশ্রুতিতে যুক্ত করে। এর ফলে কোনও নেট পরিবর্তন হয় নি, এবং তাই ফাইলটি কার্যকরভাবে কমিট থেকে সরানো হয়েছে।
আপনি যদি সার্ভারে পরিবর্তনগুলি না ঠেকেন তবে আপনি ব্যবহার করতে পারেন
git reset --soft HEAD~1
এটি সমস্ত পরিবর্তনগুলি পুনরায় সেট করবে এবং একটি প্রতিশ্রুতিতে ফিরে যাবে
আপনি যদি নিজের পরিবর্তনগুলি ঠেলাঠেলি করেন তবে @ চারেলসবি এর উত্তর অনুসারে পদক্ষেপগুলি অনুসরণ করুন
আরএম ব্যবহার করে ফাইলটি সরিয়ে ফেললে তা মুছে যাবে!
আপনি সর্বদা মুছে ফেলার পরিবর্তে গিটের প্রতিশ্রুতি যুক্ত করছেন, সুতরাং এই উদাহরণে ফাইলটি প্রথম অঙ্গীকারের পূর্বে ছিল এমন অবস্থায় ফিরিয়ে দিন (ফাইলটি নতুন হলে এটি 'মুছে ফেলা' আরএম 'হতে পারে) এবং তারপরে পুনরায় প্রতিশ্রুতিবদ্ধ এবং ফাইল যাবে।
পূর্ববর্তী কিছু অবস্থায় ফাইলটি ফিরিয়ে আনার জন্য:
git checkout <commit_id> <path_to_file>
অথবা এটি প্রত্যন্ত হেডে রাজ্যে ফেরত পাঠাতে:
git checkout origin/master <path_to_file>
তারপরে প্রতিশ্রুতি সংশোধন করুন এবং ফাইলটি তালিকা থেকে অদৃশ্য হয়ে গেছে (এবং আপনার ডিস্ক থেকে মোছা হয়নি!)
git checkout HEAD~ path/to/file
git commit --amend
নিম্নলিখিতটি কেবল আপনার ইচ্ছা মতো ফাইলটি আনস্টেজ করবে, যা ওপি বলেছিল।
git reset HEAD^ /path/to/file
আপনি নীচের মত কিছু দেখতে পাবেন ...
প্রতিশ্রুতিবদ্ধ হতে পরিবর্তনগুলি: (স্টেঞ্জার জন্য "গিট রিসেট হেড ..." ব্যবহার করুন)
পরিবর্তিত: / পথ / থেকে / ফাইল
প্রতিশ্রুতিবদ্ধকরণের জন্য পরিবর্তনগুলি মঞ্চস্থ করা হয়নি: (প্রতিশ্রুতিবদ্ধ প্রতিবেদনটি আপডেট করতে "গিট অ্যাড ..." ব্যবহার করুন) (কার্যনির্বাহী ডিরেক্টরিতে পরিবর্তনগুলি বাতিল করতে "গিট চেকআউট - ..." ব্যবহার করুন)
পরিবর্তিত: / পথ / থেকে / ফাইল
এই মুহুর্তে, আপনি ফাইলটিতে যা পছন্দ করতে পারেন যেমন একটি ভিন্ন সংস্করণে পুনরায় সেট করা।
যখন আপনি প্রতিশ্রুতিবদ্ধ করতে প্রস্তুত:
git commit --amend -a
বা (যদি আপনি কিছু অন্যান্য পরিবর্তনগুলি পেয়ে থাকেন যা আপনি প্রতিশ্রুতিবদ্ধ করতে চান না, তবে)
git commit add /path/to/file
git commit --amend
আমি উদাহরণ দিয়ে আপনাকে ব্যাখ্যা করব।
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>
noop
করুন edit [A_commit_ID]
বাe [A_commit_ID]
আপনি সহজভাবে চেষ্টা করতে পারেন।
git reset --soft HEAD~1
এবং একটি নতুন প্রতিশ্রুতি তৈরি করুন।
তবে, সেখানে একটি দুর্দান্ত সফটওয়্যার রয়েছে "গিটক্রেন"। যা গিটের সাথে কাজ করা সহজ করে তোলে।
git commit --amend
আপনার শেষ প্রতিশ্রুতিতে ফাইল অপসারণটি আপডেট করতে চান; এবং তারপরে, আপনি এটি পরীক্ষা করতে পারেনgit log -1 --stat
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>^
এবং তারপরে আপনি আরও জটিল কমান্ডগুলি স্মরণ না করে বা বার্তা দিতে বা যতটা টাইপ না করে স্বাচ্ছন্দ্যে রিবেসটি শেষ করতে পারেন।
গিট জিইউআই ব্যবহার করা পূর্বের প্রতিশ্রুতি থেকে কোনও ফাইল সরানো সহজ করতে পারে।
ধরে নিই যে এটি কোনও ভাগ করা শাখা নয় এবং আপনার আবার ইতিহাস রাইটিংয়ের আপত্তি নেই , তবে চালান:
git gui citool --amend
আপনি যে ফাইলটি ভুলভাবে প্রতিশ্রুতিবদ্ধ হয়েছিল তা আন-চেক করতে পারেন এবং তারপরে "কমিট" ক্লিক করতে পারেন click
ফাইলটি কমিট থেকে সরানো হয়েছে, তবে এটি ডিস্কে রাখা হবে । সুতরাং আপনি ভুল করে এটি যুক্ত করার পরে যদি ফাইলটি চেক-ইন করে থাকেন তবে এটি আপনার অচিহ্নযুক্ত ফাইল তালিকায় প্রদর্শিত হবে (এবং যদি আপনি ভুল করে এটি সংশোধন করার পরে ফাইলটি চেক করে না থাকেন তবে এটি আপনার পরিবর্তনগুলি প্রতিশ্রুতিবদ্ধ তালিকার জন্য স্টেজ না করে প্রদর্শিত হবে)।
sudo apt-get install git-gui
git rebase -i HEAD~4
পরে আমি প্রথমে ব্যবহার করেছিলাম এবং তারপরে সম্পাদকটি খোলার জন্য আপনার আদেশটি চালিয়েছি। আরেকটি নোট: "আনস্টেজিং" "কমিট" মেনুতে পাওয়া যাবে।
git reset --soft HEAD^
(সাফ্ট আর্গ মনে রাখবেন), তারপরে git commit -c ORIG_HEAD
(--amend এর পরিবর্তে, যা সমস্ত কিছু স্ক্রু করে দেয়)।
যদি আপনি নিজের প্রতিশ্রুতি রক্ষা করতে চান (সম্ভবত আপনি ইতিমধ্যে বিশদ প্রতিশ্রুতি বার্তা লেখার জন্য কিছু সময় ব্যয় করেছেন এবং এটি হারাতে চান না), এবং আপনি কেবল প্রতিশ্রুতি থেকে ফাইলটি সরাতে চান, তবে সম্পূর্ণরূপে সংগ্রহস্থল থেকে নয়:
git checkout origin/<remote-branch> <filename>
git commit --amend
নিম্নলিখিত কমান্ডগুলির একটি ক্রম করুন:
//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'
এমন কিছু যা আমার পক্ষে কাজ করেছিল তবে এখনও মনে করেন এর থেকে আরও ভাল সমাধান হওয়া উচিত:
$ git revert <commit_id>
$ git reset HEAD~1 --hard
অন্যান্য প্রতিশ্রুতিতে আপনি যে পরিবর্তনটি বাতিল করতে চান তা কেবল ছেড়ে দিন, অন্যদের পরীক্ষা করে দেখুন
$ git commit --amend // or stash and rebase to <commit_id> to amend changes
আসলে, আমি মনে করি একটি দ্রুত এবং সহজ উপায় হ'ল গিট রিবেস ইন্টারেক্টিভ মোড ব্যবহার করা।
git rebase -i head~1
(বা হেড ~ 4, আপনি কতদূর যেতে চান)
এবং তারপরে, 'বাছাই' পরিবর্তে 'সম্পাদনা' ব্যবহার করুন। 'সম্পাদনা' কতটা শক্তিশালী তা আমি বুঝতে পারি নি।
https://www.youtube.com/watch?v=2dQosJaLN18
আশা করি আপনি এটি সহায়ক পাবেন।
যেখানে আমি কেবল একটি ফাইল ফিরিয়ে দিতে চেয়েছিলাম সেখানে একটি স্থানীয় শাখায় আমার পরিবর্তন আছে একই সমস্যা ছিল। আমার জন্য যা কাজ করেছে তা হ'ল -
( বৈশিষ্ট্য / টার্গেট_ব্রাঞ্চ নীচে আমি যেখানে একটি নির্দিষ্ট ফাইলের জন্য আমি পূর্বাবস্থায় ফেরাতে চাইছিলাম সেগুলি সহ আমার সমস্ত পরিবর্তন রয়েছে)
( উত্স / বৈশিষ্ট্য / টার্গেট_ ব্রাঞ্চ হ'ল এমন একটি দূরবর্তী শাখা যেখানে আমি আমার পরিবর্তনগুলিতে ধাক্কা দিতে চাই)
( বৈশিষ্ট্য / স্টেজিং হল আমার অস্থায়ী মঞ্চায়ন শাখা যেখানে আমি সেই ফাইলটিতে পরিবর্তন বাদে আমার সমস্ত পছন্দসই পরিবর্তনগুলি থেকে চাপ দিচ্ছি)
আমার উত্স / বৈশিষ্ট্য / লক্ষ্য_ব্রঞ্চ থেকে একটি স্থানীয় শাখা তৈরি করুন - এটিকে বৈশিষ্ট্য / মঞ্চায়ন বলা হয়
আমার কাজ স্থানীয় শাখা একীভূত বৈশিষ্ট্য / target_branch করার বৈশিষ্ট্য / পর্যায়ের শাখা
বৈশিষ্ট্য / পর্যায়ক্রমে চেক আউট করা হয়েছে তারপরে গিট রিসেট --সোফট ওআরআইজিএইইডিএইড (এখন বৈশিষ্ট্য / স্টেজিং থেকে সমস্ত পরিবর্তন মঞ্চস্থ হবে তবে নিঃশর্ত))
আমি পূর্বে অপ্রয়োজনীয় পরিবর্তনগুলির সাথে চেক ইন করেছি এমন ফাইলটি আনস্টেজ করা হয়নি
পরিবর্তিত জন্য মূল প্রজেক্টের শাখা বৈশিষ্ট্য / পর্যায় থেকে উৎপত্তি / বৈশিষ্ট্য / target_branch
পর্যায়ক্রমে করা বাকী পরিবর্তনগুলি প্রতিশ্রুতিবদ্ধ এবং আমার দূরবর্তী উত্স / বৈশিষ্ট্য / টার্গেট_ব্র্যাঞ্চে প্রবাহিত করে
আপনি যদি গিটহাব ব্যবহার করছেন এবং এখনও প্রতিশ্রুতিটি না চাপিয়ে দিয়েছেন, গিটহাব ডেস্কটপ সহজেই এই সমস্যাটি সমাধান করে:
আপনি যদি পূর্ববর্তী কমিটগুলি থেকে ফাইলগুলি সরাতে চান তবে ফিল্টারগুলি ব্যবহার করুন
git filter-branch --prune-empty --index-filter 'git rm --ignore-unmatch --cached "file_to_be_removed.dmg"'
যদি আপনি এই ত্রুটিটি দেখেন:
একটি নতুন ব্যাকআপ তৈরি করা যায় না। পূর্ববর্তী ব্যাকআপটি ইতিমধ্যে রেফ / মূল / ফোর্সে -f এর মাধ্যমে ব্যাকআপটি ওভাররাইট করে উপস্থিত রয়েছে
আপনার স্থানীয় রেপোতে কেবল রেফস ব্যাকআপগুলি সরান
$ rm -rf .git/refs/original/refs
আপনি যদি নিজের পরিবর্তনগুলি এখনও গিটে ঠেকেন না
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
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)
এই মুহুর্তের উত্তরগুলির কোনওটিই যুক্তিসঙ্গত নয়। মনে হচ্ছে যথেষ্ট চাহিদা রয়েছে যে আসল সমাধানটি প্রস্তাব করা উচিত: https://github.com/git/git/blob/master/Docamentation/SubmittingPatches
git --uncommit <ফাইলের নাম>
সুন্দর হবে. আমি পেয়েছি যে আমরা ইতিহাসটি সংশোধন করতে চাই না, তবে আমি যদি স্থানীয় এবং ঘটনাক্রমে স্থানীয় "হ্যাক" ফাইল যুক্ত করি এবং প্রতিশ্রুতি থেকে এটি সরাতে চাই তবে এটি অত্যন্ত সহায়ক be