কোনও ফাইল আন-এড করার জন্য সর্বশেষ প্রতিশ্রুতিটি কীভাবে সংশোধন করবেন?


108

আমি দুটি ফাইলের সংশোধন করেছেন a, bশেষ কমিট। তবে ফাইলটি bকমিট করা উচিত নয়, এটি সংশোধন করার জন্য ওয়ার্কফ্লো কী?

উত্তর:


109

আপডেট (কয়েক বছর পরে)

জান হুডেক

এটি কেবল সূচি থেকে অপসারণ করা তুচ্ছ।

সত্য: আপনি সামান্য পরিমাণে সহজেই তার ফাইলের সূচিপত্রটিতে পুনরায় সেট করতে পারেন, যেমন সাম্প্রতিক উত্তর ( ম্যাট কনলির লিখিত ) পরামর্শ দেয়:

git reset HEAD^ path/to/file/to/revert

HEAD^শেষের আগে পূর্বের প্রতিশ্রুতিতে ফাইলটিকে তার সামগ্রীতে অ্যাক্সেস করার অনুমতি দেয় ।

তারপরে আপনি করতে পারেন git commit --amend, যেমন আমি মূলত নীচে লিখেছি।


গিট 2.23 (আগস্ট 2019) এর মাধ্যমে, আপনি নতুন কমান্ডটি ব্যবহার করতে পারেনgit restore

 git restore --source=HEAD^ --staged  -- path/to/file/to/revert

খাটো:

 git restore -s@^ -S -- path/to/file/to/revert

আবার, আপনি তখন করতে পারেন git commit --amend, যেমনটি আমি মূলত নীচে লিখেছি।


আসল উত্তর (জানুয়ারী ২০১১)

যদি এটি আপনার শেষ প্রতিশ্রুতি হয় (এবং আপনি এটি কোথাও ঠেকেননি), আপনি এটি সংশোধন করতে পারেন :
(প্রথম স্ট্যাশ বা সংরক্ষণ করুন b)

 git commit --amend

তারপরে বি মুছে ফেলুন, পুনরায় কমিট করুন। পুনরুদ্ধার খ এবং আপনি সম্পন্ন করেছেন।

--amend

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


... Then stash/delete b, re-commit.., এখানে শব্দটি Thenহওয়া উচিত নয় after? - --amendস্টাচ / বি মোছার পরে, ...
শিও জেলি

@ 谢 继 雷: অন্য কথায়, প্রথমে বি কে সংরক্ষণ করুন, তারপরে কমিট করুন, তারপরে পুনরুদ্ধার করবেন? সত্য। আমি উত্তর আপডেট করেছি।
ভনসি

গিট ইনডেক্সের শক্তির সাথে, ফাইলকে স্ট্যাশ / সেভ করতে কাউকে বলা কেবল সাদামাটা (-1)- এটি কেবল সূচি থেকে অপসারণ করা তুচ্ছ।
জান হুডেক

1
@ জানহুদেক সত্য, আমি সেই অনুযায়ী উত্তরটি সম্পাদনা করেছি। স্ট্যাক ওভারফ্লোতে আমি যেমন করি তেমন কাছ থেকে আমি সেই পুরানো উত্তরটি অনুসরণ করি নি। এসইউতে 99% গিট প্রশ্নের যেকোন উপায়ে এসওতে স্থানান্তরিত করা উচিত।
ভোনসি

66
  1. git diff --name-only HEAD^ - (alচ্ছিক) সর্বশেষ কমিটে পরিবর্তিত ফাইলগুলির তালিকা করতে ব্যবহার করুন।
  2. git reset HEAD^ path/to/file/to/revert- কাজের অনুলিপিটি ছোঁয়া রেখে, সেই শেষ সংস্করণে সূচকটি পুনরায় সেট করতে ।
  3. git commit --amend- সূচক পরিবর্তনগুলি অন্তর্ভুক্ত করার জন্য সর্বশেষ প্রতিশ্রুতি সংশোধন করা

9
ইমো এটির চেয়ে আরও ভাল উত্তর তবে গ্রহণযোগ্য।
mik01aj

1
নোট করুন যে git commit -a --amend3 য় ধাপের জন্য আপনার (যেমন ফাইলগুলি যুক্ত করবেন না) ব্যবহার করা উচিত নয় , বা আপনি যে সম্পাদনাগুলি মুছে ফেলার চেষ্টা করছেন সেগুলি আপনার কাজের অনুলিপি পরিবর্তনগুলি সম্পাদন করবেন। git checkout path/to/file/to/revertআপনার কার্যকরী অনুলিপিটি পরিষ্কার করার জন্য একটি .চ্ছিক পদক্ষেপ 2.5 হতে পারে ।
dmnd

1
বিকল্পভাবে git rm --cached path/to/file/to/revertগাছ থেকে মুছে ফেলা ব্যতীত আন-অ্যাড করার জন্য।
জানু হুডেক

13

বিকল্প হিসাবে আপনি যদি ব্যবহার করছেন git gui, আপনি কেবল "সংশোধিত শেষ প্রতিশ্রুতি" বিকল্পটি নির্বাচন করুন, যুক্ত ফাইলটি "স্টেজড" তালিকায় উপস্থিত হবে, এটি "আনস্টেজড" তালিকায় সরানোর জন্য আইকনে ক্লিক করুন এবং প্রতিশ্রুতিবদ্ধ করুন।


1
@ ভনসি: ভারী গিট ব্যবহারকারীদের জন্য প্যাচগুলি সম্পাদনা করা এবং বিভক্ত করা বেশ সাধারণ কাজ, তাই গুই এটি সহজ করার জন্য ডিজাইন করা হয়েছিল এবং এটির জন্য আইএমও সেরা সরঞ্জাম।
জান হুডেক

যে এক কাজ! আমি সেই বিশেষ কাজের জন্য অন্যান্য বিকল্পের সাথে সাফল্য পাইনি। ভকভগক!
সের্গুস্টে

10

আপনি যদি আপনার শেষ প্রতিশ্রুতি থেকে বি মুছতে চান

git rm --cached b (will preserve the file in the working tree but remove it from the index)
git commit --amend

আপনি যদি আপনার শেষ প্রতিশ্রুতিতে সমস্ত পরিবর্তন খ সরিয়ে নিতে চান

(backup b)
(modify b to state before incorrect commit)
git commit --amend
(restore b)

git rm --cachedএবং ব্যাকআপ / পুনরুদ্ধার নাচের সাথে দূরে থাকুন (-1)।
জান হুডেক

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

4

একটি বিকল্প যার জন্য সূচক হ্যাকারি প্রয়োজন হয় না, তবে তা সত্ত্বেও পুরানো প্রতিশ্রুতি বার্তাটি সংরক্ষণ করে:

$ git reset HEAD^
$ git add <all the files you want, excluding the one you don't want>
$ git commit -C HEAD@{1}

আমি এটি পছন্দ করি কারণ (ক) এটি নিয়মিত আমি যে আদেশগুলি ব্যবহার করি তা ব্যবহার করে এবং (খ) আমি git add -pযেটি প্রতিশ্রুতিবদ্ধ হতে চাই তা সঠিকভাবে নির্ধারণ করতে আমি কী করতে পারি ।

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