গিট: বার্তা টাইপ করার মাঝামাঝি সময়ে গর্ভপাত বন্ধ করুন


131

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

উত্তর:


85

হ্যাঁ. একটি পৃথক ফাইলে ( :w /some/other/path.txt) প্রতিশ্রুতি বার্তা লিখুন । তারপরে সম্পাদকটিকে প্রস্থান না করে ( :q!) সংরক্ষণ করুন । আপনি যদি আগে ফাইলটিকে আসল পথে সংরক্ষণ করেন তবে সবকিছু মুছে ফেলুন এবং খালি ফাইলটি প্রথমে লিখুন (একটি খালি প্রতিশ্রুতি বার্তা প্রতিশ্রুতি বাতিল করবে)।

এখন, যখন আপনি "বাস্তবের জন্য" প্রতিশ্রুতিবদ্ধ হতে প্রস্তুত হন, বিকল্প পথে আপনি সংরক্ষণ করা বার্তা ফাইলটি ব্যবহার করুন।

পর্যায়ক্রমে, প্রতিশ্রুতি বার্তাটি কোনও ভিমের বাফারগুলিতে অনুলিপি করুন।

এটি লক্ষণীয় যে আপনাকে আসলেই এটি করার দরকার নেই : commit --amendপ্রতিশ্রুতিটি তৈরির পরে পরিবর্তন করতে দেয়, তাই সহজ সমাধান হ'ল আপনি যা পেয়েছেন তা দিয়ে প্রতিশ্রুতি তৈরি করে এবং তারপরে চাপ দেওয়ার আগে এটি ঠিক করে ফেলুন। এমনকি আপনি কেবল তার ভাঙ্গা অবস্থায় প্রতিশ্রুতিটি শেষ করতে পারেন, reset HEAD~(আপনাকে প্রতিশ্রুতি দেওয়ার পূর্বে যে কাজকর্মের অনুলিপিটি ছিল তার রাজ্যে পুনরায় সেট করুন), আপনার কার্যকরী অনুলিপিটি ঠিক করুন এবং তারপরে commit -a -c HEAD@{1}পুরানো প্রতিশ্রুতি বার্তাটি ব্যবহার করতে পারেন।


7
দ্রষ্টব্য: ": কিউ!" কোনও স্ব-প্রচারিত মার্জ সংঘাতের বার্তা থাকলে প্রতিশ্রুতি বাতিল করবেন না ab পরিবর্তে প্রতিশ্রুতিবদ্ধতা অব্যাহত থাকবে এবং কোন ফাইলগুলির মধ্যে বিরোধ রয়েছে তা বার্তাটি তালিকাভুক্ত করবে না।
স্টেফেনবেজ

write the empty file (an empty commit message will abort the commit)অংশ একটি মোহন মত কাজ, ধন্যবাদ!
Саша Давиденко

182

যদি আপনার সম্পাদক ত্রুটি কোড সহ প্রস্থান করতে পারেন - গিট অঙ্গীকার বাতিল করে দেবে। ভিআইএম ব্যবহার করার সময় টাইপ করুন

:cq

অ-শূন্য ত্রুটি কোড সহ প্রস্থান করতে এবং প্রতিশ্রুতি বাতিল করতে।


5
এটি বাতিল করার জন্য একটি দুর্দান্ত কৌশল commit --amendকারণ আপনি অন্যথায় বিদ্যমান প্রতিশ্রুতি বার্তা এবং মুছে ফেলতে হবে :wq
অ্যালেক্স জেসমিন

2
দুর্দান্ত কৌশল! তবে প্রশ্নটি ছিল কীভাবে প্রতিশ্রুতি বার্তাটি সংরক্ষণ করবেন, এটি মুছবেন না।
ইলিয়াস লিন

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

1
দুর্দান্ত যখন আপনি একটি ইন্টারেক্টিভ
রিবায়েস

আমার জীবন বাঁচিয়েছিল যখন আমি পুনঃবাসের সময় পরিবর্তনের git commit --amendপরিবর্তে একটি কাজ করেছিলাম git rebase --continue
ওয়েশি জেং

68

আপনি যদি নিজের প্রতিশ্রুতি বার্তা লিখতে ভিম খোলেন তবে # দিয়ে শুরু হয় না এমন লাইনগুলি মুছুন এবং গিট আপনার প্রতিশ্রুতি বাতিল করবে

Aborting commit due to empty commit message.

11
আপনি গিট কমিট --amend বাতিল করতে চাইলে এটি বিশেষত কার্যকর।
এডস্কো

1
প্রশ্নটি ছিল কীভাবে প্রতিশ্রুতি বাতিল করতে হবে তবে প্রতিশ্রুতি বার্তাটি সংরক্ষণ করুন। # দিয়ে শুরু না হওয়া লাইনগুলি মুছে ফেলা কার্যকরভাবে প্রতিশ্রুতি বার্তা মুছে দেয়, প্রতিশ্রুতি বার্তাটি সংরক্ষণ করে না। নিশ্চিত কীভাবে এটির এতগুলি উপার্জন রয়েছে।
ইলিয়াস লিন

2
ggdGবার্তার সমস্ত বিষয়বস্তু কেটে ফেলবে, তারপরে পরের বার চালানোর সময় আপনি পূর্বের কাটা টেক্সটটি করতে vimপারেন P
অ্যারোমিলিউইগ

ন্যানো,
সিটিআরএল

9

আপনি যখন প্রতিশ্রুতি বাতিল করতে পারেন, তখন অন্য পদ্ধতির পরে কমিটটি সংশোধন করা । কেবল আপনার বর্তমান কাজটি কমিট করুন, তারপরে আপনি যা কিছু অতিরিক্ত পরিবর্তন চান তা করুন, git addসেগুলি করুন, তারপরে চালান git commit --amend। আপনাকে প্রতিশ্রুতি বার্তা সম্পাদকে ফিরিয়ে দেওয়া হবে এবং আপনি যখন সংরক্ষণ করবেন তখন অতিরিক্ত পরিবর্তন এবং আপনার নতুন প্রতিশ্রুতি বার্তা অন্তর্ভুক্ত করার জন্য কমিট সংশোধন করা হবে।


7

হ্যাঁ এটা সম্ভব. প্রতিশ্রুতিবদ্ধ হওয়ার জন্য, আপনার সম্পাদককে প্রতিশ্রুতি বার্তাটি ফাইলটিতে লিখতে হবে .git/COMMIT_EDITMSGএবং 0 টি স্ট্যাটাস কোড দিয়ে প্রস্থান করতে হবে।

সুতরাং আপনি যদি ষষ্ঠ / ভিআইএম ব্যবহার করে থাকেন তবে আপনি নিম্নলিখিতগুলি করতে চাইতে পারেন ...

  1. আপনার প্রতিশ্রুতি বার্তা লিখুন।
  2. প্রতিশ্রুতিবদ্ধ বার্তাটি এতে সংরক্ষণ করুন :w(এটি ডিফল্টরূপে বর্তমান সামগ্রীতে সংরক্ষণ করবে .git/COMMIT_EDITMSG)
  3. একটি ত্রুটি সহ সম্পাদক থেকে প্রস্থান করুন :cq
  4. ... আপনার যা করতে হবে তা করুন ... এমনকি মঞ্চে ফাইল যুক্ত / সরান add
  5. আপনার বিদ্যমান প্রতিশ্রুতি বার্তাটি সম্পাদনা করে চালিয়ে যান git commit -eF .git/COMMIT_MESSAGE

-F /path/to/file/ এ / সম্পাদনাটি / পথ / থেকে / ফাইল থেকে প্রদত্ত যে কোনও বিষয়বস্তু সহ সম্পাদককে পপুলেট করবে। যাইহোক, ডিফল্টরূপে এটি তাত্ক্ষণিকভাবে প্রতিশ্রুতি সম্পাদন করবে, যদি না আপনি সম্পাদনার-e জন্য অতিরিক্ত পতাকা সরবরাহ করেন ।


এটি কাজ করে তবে কম পছন্দসই কারণ 1) এটি ধরে নিয়েছে যে আমি সিডাব্লুডি যেখানে .git ফোল্ডারটি 2) আমি গিট ওয়ার্কট্রি ব্যবহার করি এবং গিট ওয়ার্কটিস সহ, .git আসলে এমন একটি ফাইল যা বলছে আসল .git ফোল্ডারটি কোথায়।
আলেকজান্ডার বার্ড

@ আলেকজান্ডার বার্ড এটি সত্য নয় ... আপনি যখন পদক্ষেপ 5 এ পুরানো প্রতিশ্রুতি বার্তাটি নিতে চান), আপনাকে কেবল একটি আপেক্ষিক পথ নির্দিষ্ট করতে হবে (বলুন আপনি /foo/bar/ডিরেক্টরিতে রয়েছেন, প্রকল্পের মূল থেকে আপেক্ষিক)git commit -eF ../../.git/COMMIT_MESSAGE
রুডলফ টুসেক

@ আলেকজান্দার বার্ড দুর্দান্ত, এখনও গিটে একাধিক কার্যকারী গাছের বৈশিষ্ট্যটি লক্ষ্য করা যায় নি। ইঙ্গিতটির জন্য থেক্স! আমি বিশ্বাস করি এর একমাত্র নেতিবাচক দিকটি হ'ল, আপনাকে আপনার মাথায় একটি সাধারণ ওভারভিউ রাখতে হবে, যা আপনাকে আসল কোডটিতে ফোকাস করা থেকে বিরত রাখে। এবং কেবল "যেখানে আমি ছেড়ে দিয়েছি - এটি কিছুটা ভারী :) -এ প্রতিশ্রুতিবদ্ধ বার্তাটি বাছাইয়ের জন্য
রুডলফ টুসেক

1
@ আলেকজান্দার বার্ড এর পরিবর্তে :wকরুন :sav committmpএবংgit commit -eF committmp
হ্যাশব্রাউন

0

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

git commit -m'my message' // etc

সুতরাং কেবলমাত্র আমি মনে করি যে এটি করা নিরাপদ তা কেবলমাত্র টার্মিনাল উইন্ডোটি বন্ধ করা! আপনি যদি এটি সংরক্ষণ করতে চান তবে কেবল অনুলিপি করুন, তারপরে অনুলিপি করুন, তারপরে টার্মিনাল উইন্ডোটি বন্ধ করুন।


-2

@ বিডনলান উত্তর এই প্রশ্নের জন্য খুব ভাল তবে আমি এমন একটি পরিস্থিতির দিকে ইঙ্গিত করব যেখানে আপনি আরও ভাল সমাধান চান।

বলুন আপনি শেষ প্রতিশ্রুতিতে পরিবর্তন যুক্ত করতে চান। আপনি @ বিডোলনের পরামর্শ অনুসারে এটি করুন:

git add files
git commit --amend

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

কৌশলটি হ'ল সম্পাদকটিকে সংরক্ষণ এবং প্রস্থান করার সময় এটির কেবলমাত্র লাইনগুলি শুরু হয় #বা কোনও লাইন নেই। আপনি যখন প্রস্থান করবেন তখন আপনাকে বার্তাটি দিয়ে স্বাগত জানানো হবে:

Aborting commit due to empty commit message.

এবং আপনি শেষ প্রতিশ্রুতি মোটেও পরিবর্তন করেন নি।


আপনি যদি যা বলছেন তা যদি আমি বুঝতে পারি তবে এটি ভুল; এখানে প্রদর্শিত: git commit; vim ....; git commit --amend; git reset HEAD@{1}। তা হ'ল: যদি আমি সংশোধনীটি "পূর্বাবস্থায়" রাখতে চাই, তবে আমার পূর্ববর্তী প্রতিশ্রুতিগুলি বিভক্ত করতে হবে না । সংশোধন করার পূর্বে যে শৃঙ্খলা রক্ষাকারী বিষয় ছিল সেগুলি সংরক্ষণ করা হয় HEAD@{1}। এছাড়াও, জেটা ইতিমধ্যে সমস্ত মন্তব্য নয় এমন লাইন মুছে ফেলার পরামর্শ দিয়েছে।
আলেকজান্ডার বার্ড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.