আমি কীভাবে দুটি প্রতিশ্রুতি একত্রিত করতে পারি?


99

আমার 2 টি কমিট সহ একটি শাখা 'ফার্স্টপ্রজেক্ট' রয়েছে। আমি এই কমিটগুলি থেকে মুক্তি পেতে এবং এগুলিকে একক প্রতিশ্রুতি হিসাবে উপস্থিত করতে চাই।

কমান্ডটি git merge --squashআশাব্যঞ্জক শোনাচ্ছে তবে আমি যখন git merge --squashআমার টার্মিনালটি চালাচ্ছি তখন কমান্ডের জন্য কেবল বিকল্পগুলি উপস্থিত করা হয়। সঠিক আদেশ কি?

Commit 1:
Added 'homepage.html'
Added 'contacts.html'

Commit 2:
Added 'homepage.php'
Added 'homepage.php'
Deleted 'homepage.html'
Deleted 'contacts.html'

আমি মনে করি না যে এটি সঠিক কমান্ড। এছাড়াও, আমি সন্দেহ করছি যে আপনি এমনকি এরকম কমিটগুলিও পরিবর্তন করতে পারেন।
বিএসউল

না আপনি একাধিক অঙ্গীকারকে একটি প্রতিশ্রুতিতে পরিবর্তন করতে পারবেন: git-scm.com/book/en/Git-Tools- লিখন-ইতিহাস আমার ইতিহাস এটির জন্য নির্দিষ্ট কমান্ড সম্পর্কে।
ডন পি

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

এটা কখনই ফাঁকি দেওয়া উচিত ছিল না। প্রকৃতপক্ষে, অন্য একটি খুব প্রশস্ত হিসাবে বন্ধ করা উচিত ছিল। এটির পূর্ববর্তী শুল্ক পরিত্যাগের সাথে জড়িত অন্য প্রশ্নটি এটির অযৌক্তিক জটিল হিসাবে চিহ্নিত হয়েছে।
ইভান ক্যারল

উত্তর:


134

আপনি git rebase -iএকটি ইন্টারেক্টিভ রিবেস সম্পাদন করতে চান ।

আপনি যদি বর্তমানে আপনার "প্রতিশ্রুতি 1" তে রয়েছেন এবং যে প্রতিশ্রুতিটি আপনি মার্জ করতে চান, "কমিট 2", এটি পূর্বের প্রতিশ্রুতি হিসাবে চালানো যেতে পারে git rebase -i HEAD~2, যা রিবেসকে ছাড়িয়ে যাবে এমন সমস্ত সম্পাদনের তালিকাভুক্ত সম্পাদক হিসাবে কাজ করবে। "পিক" দিয়ে শুরু হওয়া আপনার দুটি লাইন দেখতে হবে। স্কোয়াশিংয়ের সাথে এগিয়ে যেতে, দ্বিতীয় পংক্তির প্রথম শব্দটিকে "বাছাই" থেকে "স্কোয়াশ" এ পরিবর্তন করুন। তারপরে আপনার ফাইলটি সংরক্ষণ করুন এবং প্রস্থান করুন। গিট আপনার প্রথম শেষ প্রতিশ্রুতিতে প্রথম প্রতিশ্রুতি স্কোয়াশ করবে।

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

মনে রাখবেন যে প্রশ্নে দু'টি কমিট শাখায় শেষ দুটি কমিট না হলে প্রক্রিয়াটি কিছুটা আলাদা হবে।


4
কীভাবে করবেন Then write your file, and quit? আমি অ্যান্ড্রয়েড স্টুডিও টার্মিনালটি ব্যবহার করছি, গিট কনসোল নিজেই বা সোর্স ট্রি সফ্টওয়্যার দ্বারা গিট কনসোলটি খোলার জন্যও। তবে কীভাবে বাঁচাবেন এবং ছাড়বেন?
ডাঃ জ্যাকি

4
শাখায় শেষ দুটি কমিটি না করে এমন দুটি কমিটকে কীভাবে একত্র করবেন?
ওয়েইশি জেং

4
@ মিগর আমি মনে করি এটির কোনও অর্থ নেই ... আপনি যদি এই সমস্যাটি (এটির একটি সদৃশ) পরীক্ষা করেন তবে স্কোয়াশিং 'দিকনির্দেশ' একটি বড় পার্থক্য করেছে এবং পুরো ইস্যুটির মূল ছিল (প্রায় ২০০ টি upvotes নিয়ে প্রথম মন্তব্য দেখুন ' কুপথ ') স্কোয়াশিং - stackoverflow.com/a/2568581/43453
PandaWood

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

4
আমি "দ্বিতীয় লাইনের প্রথম শব্দটি পরিবর্তন করতে" বুঝতে পেরেছি - দ্বিতীয় লাইনের কী?
অ্যান্ড্রু টর 21

70

আমার মতো ভুলে যাওয়ার জন্য অলস সহজ সংস্করণ:

git rebase -i HEAD~3 বা তবে 3 এর পরিবর্তে অনেকগুলি কমিট করে।

এই ঘুরিয়ে

pick YourCommitMessageWhatever
pick YouGetThePoint
pick IdkManItsACommitMessage

এই মধ্যে

pick YourCommitMessageWhatever
s YouGetThePoint
s IdkManItsACommitMessage

এবং কিছু কর্ম যেখানে আপনি আঘাত না escতারপর enterপরিবর্তনগুলি সংরক্ষণ করতে। [1]

যখন পরবর্তী স্ক্রিনটি আসবে, তখন সেই আবর্জনা # লাইনগুলি থেকে মুক্ত করুন [2] এবং একটি নতুন প্রতিশ্রুতি বার্তা বা কিছু তৈরি করুন এবং একই escape enterক্রিয়া করুন। [1]

বাহ, আপনার কমিট কম আছে। অথবা আপনি কেবল সবকিছু ভেঙে দিয়েছেন।


[1] - বা আপনার গিট কনফিগারেশনের সাথে যা কিছু কাজ করে। এটি কেবলমাত্র একটি ক্রম যা আমার সেটআপটি কার্যকর my

[2] - আপনি # this is your n'th commitএই বার্তার ঠিক নীচে আপনার আসল প্রতিশ্রুতি সহ কয়েক বারের মতো কিছু জিনিস দেখতে পাবেন । আপনি এই রেখাগুলি সরিয়ে দিতে চান এবং n এর প্রতিশ্রুতিবদ্ধ প্রতিশ্রুতিবদ্ধ প্রতিশ্রুতি তৈরি করতে চান যে আপনি 1 এর সাথে সম্মিল করছেন।


খুব সংক্ষিপ্ত সমাধান - আপনাকে ধন্যবাদ। sএখানে ব্যবহৃত স্ক্রোয়াশ হিসাবে ব্যবহৃত রূপরেখার পক্ষে সহজেই কাজে লাগতে পারে । প্রতিশ্রুতিটি ব্যবহার করার জন্য, তবে পূর্বের প্রতিশ্রুতিগুলিতে
মিলিত হতে হবে

আপনি শুধু যদি 2করে এবং একত্রিত একই চান 2কমিট, আপনি চালানোর জন্য প্রয়োজন হবে git reset --soft HEAD~এবং git commit --amend
স্ক্রুটারি

22
  1. আপনার শাখাটি পরীক্ষা করে দেখুন এবং আপনার সমস্ত কমিটের পরিমাণ গণনা করুন।
  2. গিট ব্যাশ খুলুন এবং লিখুন: git rebase -i HEAD~<quantity of your commits>(যেমন git rebase -i HEAD~5)
  3. খোলা ইন txtফাইল পরিবর্তন pickকরতে শব্দ squashসব করে জন্য, প্রথম ছাড়া কমিট (যা উপরে হয়)। শীর্ষের জন্য এটিতে পরিবর্তন করুন reword(যার অর্থ আপনি পরবর্তী পদক্ষেপে এই প্রতিশ্রুতিটির জন্য একটি নতুন মন্তব্য প্রদান করবেন) এবং সংরক্ষণ ক্লিক করুন! যদি ভিমে থাকে escতবে তারপরে সেভ wq!টিপুন এবং এন্টার টিপুন।
  4. মন্তব্য প্রদান করুন।
  5. গিট খুলুন এবং নতুন পরিবর্তনগুলি দেখতে "সমস্ত আনুন" করুন।

সম্পন্ন


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