গিট ইন্টারেক্টিভ রিবেস চয়ন করতে কোন প্রতিশ্রুতি দেয়


105

আমি মাস্টার এ এবং আমি করেছি rebase -i <my_branch>

বুঝেছি:

noop

# Rebase c947bec..7e259d3 onto c947bec
#
# Commands:
#  p, pick = use commit
#  r, reword = use commit, but edit the commit message
#  e, edit = use commit, but stop for amending
#  s, squash = use commit, but meld into previous commit
#  f, fixup = like "squash", but discard this commit's log message
#  x <cmd>, exec <cmd> = Run a shell command <cmd>, and stop if it fails
#
# If you remove a line here THAT COMMIT WILL BE LOST.
# However, if you remove everything, the rebase will be aborted.
#

আমি কিছু প্রতিশ্রুতি বাছাই করতে চাই যেগুলির কিছু স্বাগত নয়। এছাড়াও যখন আপনি কিছু ফাইল রাখতে চান বা কোনও শাখায় সর্বদা 'লোকাল' পরিবর্তন রাখতে চান আপনি কীভাবে কাজ করবেন? কিছু সাহায্যকারী আছে কি .gitignore?

উত্তর:


85

একটি অ-ইন্টারেক্টিভ রিবেসের মতো, আপনাকে একটি বিশেষ প্রতিশ্রুতিতে পুনর্বার ব্যবস্থা করতে হবে।

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

আমি আপনার পরিস্থিতির বিবরণ জানি না তবে আপনি হয়ত এর মতো কিছু চান:

# Opportunity to edit or prune commits between origin/master and current branch
git rebase -i origin/master

অথবা

# Edit some of the last ten commits
git rebase -i HEAD~10 # Note that ~10 uses a tilde("~") not a dash("-"_) !

HEAD~*সিনট্যাক্স ব্যবহার করে আমার পক্ষে কাজ হয়েছিল তবে প্রথমটি তা করেনি।
দেব ইয়েগো

25

rebase -iকমিটের পরিসীমা ছাড়াই কোনও কমিট প্রদর্শন করা হবে না। শেষটি পুনর্বাসনের জন্য, বলুন, 7 জন নিম্নলিখিতটি ব্যবহার করে:

git rebase -i HEAD~7

যদিও সতর্ক থাকুন, এটি ইতিহাস পুনর্লিখন করবে। যদি কমিটগুলি ইতিমধ্যে ঠেলাঠেলি করে থাকে তবে তা করবেন না


আপনার দ্বিতীয় প্রশ্নের জন্য: আপনার পরিবর্তনগুলি সঙ্গে একটি শাখা (মূলত একটি কনফিগারেশন শাখা) অন্যান্য শাখার একত্রীকরণ আছে এবং নিয়মিতভাবে মধ্যে এটি। এইভাবে পরিবর্তনগুলি অন্য শাখায় স্থানান্তরিত হবে না


9

আপনি যখন ব্যবহার করছেন git rebase -i, আপনাকে সাধারণত নির্দিষ্ট করতে হয়, যেহেতু আপনি পুনর্বাসনাটি সম্পাদন করতে চান বলে কোন প্রতিশ্রুতিবদ্ধ। সুতরাং, উদাহরণস্বরূপ, আপনি বর্তমান শাখায় সর্বশেষ 10 টির মধ্যে কিছু কমিট সরিয়ে নিতে চান, আপনি তা করবেন:

git rebase -i HEAD~10

6

অন্যরা যেমন উল্লেখ করেছে, আপনাকে কমিটের সীমা নির্দিষ্ট করতে হবে।

git rebase -i <latest-commit-to-be-retained>

(ধরে নিলাম যে আপনি সম্পাদনা করার প্রতিশ্রুতি হিসাবে একই শাখায় রয়েছেন) -

কমিটগুলি নির্দিষ্ট করতে, আপনি হেড ~ 5 শর্টহ্যান্ড ব্যবহার করতে পারেন বা শ চেকসাম ব্যবহার করতে পারেন (যা আপনি পেতে পারেন git log)

প্রকৃতপক্ষে কোনও প্রতিশ্রুতি যদি তা করা হয় তবে তা যদি আপনি গাছটিতে মুছে ফেলা / সম্পাদনা / শব্দচয়ন করতে চান এমন কমিটগুলির পূর্বে / পূর্বপুরুষ হয়। এটি <latest-commit-to-be-retained>সম্পাদকীয় ( যেহেতু আপনার গিট কনফিগারেশনে সংজ্ঞায়িত হয়েছে) থেকে সমস্ত কমিটকে তালিকাবদ্ধ করবে। তালিকা থেকে, কোনও প্রতিশ্রুতি মুছতে, কেবলমাত্র সেই নির্দিষ্ট লাইনটি মুছুন, সংরক্ষণ করুন এবং প্রস্থান করুন (vi হ্যাবিট :)) ফাইল + সম্পাদক, এবং করুনgit rebase --continue

দ্বিতীয় উত্তরের জন্য, আমি নিটলের সাথে একমত

আপনার পরিবর্তনগুলি (মূলত একটি কনফিগারেশন শাখা) সহ একটি শাখা রাখুন এবং নিয়মিতভাবে অন্যান্য শাখাগুলিকে এতে মার্জ করুন। এইভাবে পরিবর্তনগুলি অন্য শাখায় স্থানান্তরিত হবে না

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