একটি একক গিট কমিট রিবেস করুন


116

একটি শাখা থেকে অন্য শাখায় একক প্রতিশ্রুতি পুনর্বার উপায় আছে?

আমার এই শাখার কাঠামো রয়েছে:

-- -- -- -- -- (Master)
            \
              -- -- -- -- -- XX (Feature-branch)

আমি যা করতে চাই তা হ'ল Feature-branchমাস্টার এবং রোলব্যাক Feature-branchওয়ান কমিটের সর্বশেষ প্রতিশ্রুতি পুনরায় ফিরিয়ে আনা ।

-- -- -- -- -- XX (Master)
            \
              -- -- -- -- -- (Feature-branch)

আমি কেমন করে ঐটি করি?


3
আপনি যদি কোনও সংখ্যক কমিটিকে রিবাজ করতে পারেন তবে আপনি কেন একটি একককে রিবাইজ করার বিষয়ে জিজ্ঞাসা করবেন? আমি যদি এসওতে প্রশ্ন জিজ্ঞাসা করতে পারি তবে আমি জিজ্ঞাসা করব রিবাইজিং (একক প্রতিশ্রুতি) এবং চেরি-বাছাইয়ের মধ্যে পার্থক্য কী?
Val,

9
যেহেতু আমি জানতাম না যে চেরি-বাছাইয়ের অস্তিত্ব ছিল এবং আমি "ফাফ সম্পর্কে অন শাখায়", "বিভিন্ন শাখায় ফিক্সের জন্য অনুরোধ পান", "এটি ঠিক করুন", "ভুল শাখায় প্রতিশ্রুতিবদ্ধ", "ডি'ও!" যথেষ্ট যে প্রশ্ন জিজ্ঞাসা দরকারী ছিল।
কেভিন মেয়ার

উত্তর:


116

আপনি মাস্টার করতে চেরি-বাছাই XX করতে পারেন।

git checkout master
git cherry-pick <commit ID of XX>

এবং গিট রিসেট সহ বৈশিষ্ট্য শাখা থেকে শেষ প্রতিশ্রুতি মুছে ফেলুন।

git checkout Feature-branch
git reset --hard HEAD^

63
'গিট রিবেস ...' নামক কোনও প্রশ্নের কীভাবে চেরি-পিকের চেয়ে গ্রহণযোগ্য উত্তর থাকতে পারে, যা সম্পূর্ণ ভিন্ন ধারণা এবং কখনও কখনও প্রতিটিকে অশুচি বলে বিবেচিত হয়?
বোন্ডাক্স

1
এটি প্রাসঙ্গিক কিনা তা নিশ্চিত না, তবে আমি যে প্রতিশ্রুতিটি পুনঃস্থাপন করতে চেয়েছিলাম তার কিছু ফাইল রয়েছে যা সরানো হয়েছিল এবং cherry-pickসেগুলিকে এমনভাবে উপস্থিত করা হয়েছিল যেন তারা পুরানো অবস্থান থেকে মুছে ফেলা হয়েছে এবং নতুন অবস্থানে তৈরি করা হয়েছিল। আমি মনে করি রিবেস সেটির যত্ন নিয়েছে তবে এখন পর্যন্ত আমি উপরের দিকে ধাক্কা দিয়েছি যাতে আমি এটি পরীক্ষা করতে পারি না। যাই হোক না কেন, আপনার যদি একইরকম পরিস্থিতি থাকে তবে সাবধান হন।
ওয়াল্ডরিয়াস

নোট: ধাক্কা আপনি পরিবর্তন Feature-branchউৎপত্তি আপনাকে এটি করতে হবে করতে git push -f origin Feature-branchহিসাবে আপনার Feature-branchএখন 1 পিছনে কমিট হিসেবে গণ্য করা হয় origin/Feature-branch
জোজো

1
এই সমাধান এবং চার্লসবি এর একটিটির মধ্যে ব্যবহারিক পার্থক্য কী ?
লিই

96
git rebase --onto master branch~1 branch 

এটি বলেছে "মাস্টার শাখার ডগায় সর্বশেষ-পূর্ব-শাখা এবং শাখা (যা, এক্সএক্স কমিট) এর মধ্যে কমিটের সীমাটি পুনরায় চালু করুন"

এই অপারেশন branchটিপ প্রতিশ্রুতিবদ্ধ হওয়ার পরে XX, তাই আপনি এটি দিয়ে আবার সেট করতে চান

git checkout branch
git reset --hard branch@{1}^

যা বলে "শাখার টিপটি তার পূর্বের অবস্থার আগে কমিটে রিসেট করুন"

সুতরাং একটি চেরি বাছাই একটি সহজ সমাধান ...


5
এটি আমার পক্ষে কাজ করে না বলে মনে হচ্ছে, এক্সএক্সের আগে আমি কমিটগুলি হারাব এবং শাখাটি একক প্রতিশ্রুতি দিয়ে মাস্টার হিসাবে পুনর্বহাল হবে, তবে আমি এর --ontoআগে কখনও ব্যবহার করিনি যাতে আমি কিছু ভুল করছি। বিটিডব্লিউ ওপি রিবেস জানিয়েছে তবে মনে হচ্ছে তিনি চেরি-পিক করতে চান।
tewe

1
আমার ত্রুটি, রিবাজে প্রকৃতপক্ষে শাখাকে মাস্টারে স্থানান্তরিত করে, এটি পুনরায় সেট করতে হবে
চার্লসবি

1
এই সমাধান এবং টিউবি এক এর মধ্যে ব্যবহারিক পার্থক্য কী ?
লিই

1
@ লি শুধুমাত্র আমি দেখতে পাচ্ছি যে এটি 4 এর পরিবর্তে 3 টি পদক্ষেপ ব্যবহার করে
চার্লসবি

51

আসলে এটি করা বেশ সহজ। সমাধানটি হল একটি ইন্টারেক্টিভ রিবেস করা এবং আপনি যে চুক্তিগুলি রিবেসে অন্তর্ভুক্ত করতে চান না তার সমস্তগুলি "ড্রপ" করা।

git rebase -i <target_branch>target_branchআপনি যে শাখাটি পুনরায় চালু করতে চান তা কোথায়

তারপরে আপনি যে ফাইলটি খোলেন এবং এটি সম্পাদনা করবেন pick সেগুলি যে কমিটগুলি চান তা সম্পাদনা করবেন এবং drop(বা dসংক্ষেপে) আপনি যে কমিটগুলি আনতে চান না তা সম্পাদনা করবেন।


6
আইএমও একটি আরও ভাল সমাধান, এবং এটি আসলে প্রশ্নের সমাধান করে।
গ্যাব্রিয়েল ওশিরো

এটি কতটা সাধারণ, স্বজ্ঞাত এবং সংক্ষিপ্ত তা দেওয়া মেনে নেওয়া সমাধান হওয়া উচিত।
পাবলো আরিয়াস

1

@ চার্লসের প্রতিক্রিয়া সঠিক। যাইহোক, আমি এটিকে বহুবার ব্যবহার করে শেষ করেছি, বেশিরভাগই কোনও প্রকল্পের নির্দিষ্ট কনফিগারটিকে রিবেস করতে

  * a8f9182 (শিরোনাম -> উত্পাদন) উত্পাদন কনফিগারেশন
  | * daa18b7 (প্রাক) প্রিপ্রোডাকশন কনফিগারেশন
  | /  
  | * d365f5f (স্থানীয়) স্থানীয় কনফিগারেশন
  | /  
  * 27d2835 (দেব) আশ্চর্যজনক নতুন বৈশিষ্ট্য যা বিশ্বকে রক্ষা করবে
* | প্রকল্পের জন্য শিল্পের 56d2467 (মাস্টার) বোরিং রাষ্ট্র
| /

যে আমি এটির জন্য একটি নতুন কমান্ড তৈরি করেছি:

$ বিড়াল ~ / বিন / গিট-রিবেসশট 
কমিট = $ 1
DEST এর = $ {2: -HEAD}
গিট রিবেস $ MM কমিট} ^ $ {কমিট} --ও $ শেষ

সাধারণত আপনি এই কমান্ডটির জন্য শাখার নামগুলি স্বতঃপূরণ করতে চান, সুতরাং এটি এই ফাংশনটি সোর্সিং যুক্ত করুন (.bashrc বা। প্রোফাইলে যুক্ত করুন):

_git_rebaseshot () 
{ 
    __gitcomp_nl "$ (__ git_refs)"
}

গিট স্বতঃসিদ্ধ এটি অনুসন্ধান করবে

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

# rebase config on prepro on actual HEAD
$ git rebaseshot prepro 
# rebase config on local onto dev
$ git rebaseshot local dev
# rebase production config on master
$ git rebaseshot pro master

আপনি যখন বৈশিষ্ট্যগুলি সঠিকভাবে ভাগ করেন, সম্ভাবনাগুলি অন্তহীন।

* a8f9182 (শিরোনাম -> postgres) বিবিডিডি কনফিগারেশন
* a8f9182 (স্থানীয়) স্থানীয় কনফিগারেশন
* a8f9182 (ডিবাগ) লগ স্তরের কনফিগারেশন
* a8f9182 (দেব) নতুন বৈশিষ্ট্য
|

আমি অনুমান করি যে এগুলি পাখির লোকেরা করতে পছন্দ করে।

এই কমান্ডটি যাই হোক না কেন sha / রেফারীর সাথে কাজ করবে:

$ git rebaseshot <Feature branch> master
$ git rebaseshot <commit of XX> master

//, আপনি যে কোনও প্রকল্পের সাথে লিঙ্ক করতে পারেন যেখানে আমরা এটি কার্যকরভাবে দেখতে পারি?
নাথান বাসানিজ

এর প্রকৃতির জন্য, পুনর্বাসনের জন্য উপলব্ধ শাখাগুলি স্থানীয় রেপোর বাইরে চালিত হয় না। মাস্টারের শীর্ষে কয়েকটি শাখা তৈরি করুন (লগ স্তর, ডাটাবেস সংযোগ, কনফিগারেশন) এবং তাদের মধ্যে কমান্ড ব্যবহার করুন। এর প্রভাবটি দেখতে প্লেইন।
albfan

//, আমি কিছু সমস্যায় পড়েছি। আমি আবার চেষ্টা করব।
নাথান বাসানিজ

0

এখানে আরও একটি বিকল্প রয়েছে:

  1. বৈশিষ্ট্য শাখার অনুলিপি সহ আপনার কাছে কোনও রিমোট রয়েছে তা নিশ্চিত করুন
  2. স্থানীয় বৈশিষ্ট্য শাখা মুছুন
  3. আপনি সবেমাত্র মাস্টার ছাড়াই পুরানো বৈশিষ্ট্য শাখা হিসাবে একই নামের সাথে একটি নতুন শাখা তৈরি এবং চেকআউট করুন
  4. আপনি যে ফিচার শাখাটি চান তা দূরবর্তী অনুলিপি থেকে চেরি-চয়ন করুন।

কমান্ডগুলি দেখতে দেখতে:

git checkout Feature-branch
git push -u origin HEAD
git checkout master
git branch -D Feature-branch
git checkout -b Feature-branch
git cherry-pick HASH-OF-XX

এটি রিবেস কমান্ড নং নয়, তবে এটি স্পিরিট রিবেস।

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