git - what - গিট বা পর্ব কি




স্থানীয় এবং রিমোট গিট রিপোজিটরি উভয় জন্য মাস্টার শাখা পুনঃনামকরণ (10)

আপনি নিম্নলিখিত কাজ করতে পারেন:

git -m master master-old #rename current master
git checkout -b master   #create a new branch master
git push -f origin master #force push to master

কিন্তু অন্য লোকেরা এই সংগ্রহস্থলটি ভাগ করে নেওয়ার ক্ষেত্রে বল চাপানো একটি খারাপ ধারণা। ফোর্স ধাক্কা তাদের সংশোধন ইতিহাস নতুন এক সঙ্গে দ্বন্দ্ব হতে হবে।

আমার শাখা master যা দূরবর্তী শাখার origin/master ট্র্যাক করে।

আমি স্থানীয় এবং দূরবর্তী উভয় master-old তাদের নামকরণ করতে চান। এটা কি সম্ভব? অন্যান্য ব্যবহারকারীদের জন্য যারা origin/master ট্র্যাক করেছিল (এবং যারা সর্বদা তাদের স্থানীয় master শাখাটি git pull আপডেট করেছেন), আমি রিমোট শাখাটির নামকরণ করার পরে কী হবে? তাদের git pull এখনও কাজ করবে নাকি এটি একটি ত্রুটি ফেলে দেবে যা এটি origin/master আর খুঁজে origin/master না?

তারপরে, আমি আরও একটি নতুন master শাখা (স্থানীয় এবং দূরবর্তী উভয়) তৈরি করতে চাই। আবার, আমি এই কাজ করার পরে, কি হবে যদি অন্যান্য ব্যবহারকারীদের git pull ?

আমি এই সব সমস্যার অনেক ফলে অনুমান। আমি কি পেতে চান একটি পরিষ্কার উপায় আছে? নাকি আমি শুধু master হিসাবে ছেড়ে যাব এবং নতুন শাখা master-new এবং সেখানে আরও কাজ করবো?


আপনি বর্তমানে master উপর অনুমান করছেন:

git push origin master:master-old        # 1
git branch master-old origin/master-old  # 2
git reset --hard $new_master_commit      # 3
git push -f origin                       # 4
  1. স্থানীয় সংগ্রহস্থলের master কমিটির ভিত্তিতে origin সংগ্রহস্থলের master-old শাখা তৈরি করুন।
  2. এই নতুন origin/master-old শাখার জন্য একটি নতুন স্থানীয় শাখা তৈরি করুন (যা স্বয়ংক্রিয়ভাবে ট্র্যাকিং শাখা হিসাবে সঠিকভাবে সেট আপ হবে)।
  3. এখন আপনি নির্দেশ করতে চান যে কোন কমিটি আপনার স্থানীয় master নির্দেশ করুন।
  4. অবশেষে, আপনার নতুন স্থানীয় master প্রতিফলিত করার জন্য origin সংগ্রহস্থলের মধ্যে প্রভাবশালী master

(যদি আপনি এটি অন্য কোন উপায়ে করেন তবে আপনাকে অবশ্যই প্রাথমিক origin/master-old ট্র্যাক করার জন্য master-old সঠিকভাবে সেট আপ করতে হবে তা নিশ্চিত করতে অন্তত এক ধাপের প্রয়োজন। এই লেখার সময় পোস্ট করা অন্য কোন সমাধানগুলির মধ্যে এটি অন্তর্ভুক্ত নয়। )


আমি চেষ্টা করার সময় নির্বাচিত উত্তর ব্যর্থ হয়েছে। এটি একটি ত্রুটি ছুঁড়ে ফেলে: refusing to delete the current branch: refs/heads/master । আমি আমার জন্য কাজ করে পোস্ট করব অনুমান:

git checkout master             # if not in master already

git branch placeholder          # create placeholder branch
git checkout placeholder        # checkout to placeholder
git push remote placeholder     # push placeholder to remote repository

git branch -d master            # remove master in local repository
git push remote :master         # remove master from remote repository.

ট্রিকটি রিমোট রিপোজিটরিতে ধাক্কা দেওয়ার আগেই স্থানধারককে চেকআউট করতে হবে। বাকি স্ব ব্যাখ্যামূলক, মাস্টার শাখা মুছে ফেলা এবং রিমোট রিপোজিটরিতে এটি ধাক্কা এখন কাজ করা উচিত। here থেকে উদ্ধৃত।


আমি বিশ্বাস করি কীটি আপনার দ্বৈত নামকরণের উপলব্ধি। master-old master-new এবং master-new

অন্য সকল উত্তর থেকে আমি এই সংশ্লেষিত করেছি:

doublerename master-new master master-old

যেখানে আমরা প্রথমে doublerename বাশ ফাংশন সংজ্ঞায়িত করতে হবে:

# doublerename NEW CURRENT OLD
#   - arguments are branch names
#   - see COMMIT_MESSAGE below
#   - the result is pushed to origin, with upstream tracking info updated
doublerename() {
  local NEW=$1
  local CUR=$2
  local OLD=$3
  local COMMIT_MESSAGE="Double rename: $NEW -> $CUR -> $OLD.

This commit replaces the contents of '$CUR' with the contents of '$NEW'.
The old contents of '$CUR' now lives in '$OLD'.
The name '$NEW' will be deleted.

This way the public history of '$CUR' is not rewritten and clients do not have
to perform a Rebase Recovery.
"

  git branch --move $CUR $OLD
  git branch --move $NEW $CUR

  git checkout $CUR
  git merge -s ours $OLD -m $COMMIT_MESSAGE

  git push --set-upstream --atomic origin $OLD $CUR :$NEW
}

এটি একটি ইতিহাস পরিবর্তনকারী git rebase অনুরূপ যা শাখার সামগ্রীগুলি বেশ ভিন্ন, তবে এটি ভিন্ন যে ক্লায়েন্টগুলি এখনও নিরাপদভাবে git pull master সাথে দ্রুত অগ্রসর হতে git pull master


কি সম্পর্কে:

git checkout old-branch-name
git push remote-name new-branch-name
git push remote-name :old-branch-name
git branch -m new-branch-name

গিট v1.7 সঙ্গে, আমি এই সামান্য পরিবর্তন হয়েছে মনে হয়। নতুন রিমোটে আপনার স্থানীয় শাখার ট্র্যাকিং রেফারেন্স আপডেট করা এখন খুব সহজ।

git branch -m old_branch new_branch         # Rename branch locally    
git push origin :old_branch                 # Delete the old branch    
git push --set-upstream origin new_branch   # Push the new branch, set local branch to track the new remote

পুনঃনামকরণের সবচেয়ে কাছের জিনিসটি মুছে ফেলা হচ্ছে এবং তারপরে রিমোটে পুনরায় তৈরি করা হচ্ছে। উদাহরণ স্বরূপ:

git branch -m master master-old
git push remote :master         # delete master
git push remote master-old      # create master-old on remote

git checkout -b master some-ref # create a new local master
git push remote master          # create master on remote

তবে এই caveats অনেক আছে। প্রথমত, কোন বিদ্যমান চেকআউটগুলি পুনঃনাম সম্পর্কে জানবে - git শাখা নামগুলি ট্র্যাক করার চেষ্টা করে না । নতুন master এখনও বিদ্যমান না থাকলে, গিট টান ভুল আউট হবে। নতুন master তৈরি করা হয়েছে। পুল master এবং master-old বুনিয়াদ একত্রিত করার চেষ্টা করবে। সুতরাং এটি সাধারণত একটি খারাপ ধারণা না হওয়া পর্যন্ত আপনার পূর্বে যারা সংগ্রহস্থল চেক করেছেন তাদের সহযোগিতা আছে।

দ্রষ্টব্য: গিটের নতুন সংস্করণ আপনাকে ডিফল্টরূপে দূরবর্তীভাবে মাস্টার শাখাটি মুছে ফেলতে দেয় না। আপনি রিমোট রিপোজিটরিতে warn বা ignore করার জন্য receive.denyDeleteCurrent কনফিগারেশন মান সেট করে receive.denyDeleteCurrent উপরে ওভাররাইড করতে পারেন। অন্যথা, যদি আপনি সরাসরি একটি নতুন মাস্টার তৈরি করতে প্রস্তুত হন, তবে git push remote :master এড়িয়ে যান git push remote :master পদক্ষেপ, এবং git push remote master ধাপে পাস --force । মনে রাখবেন যে আপনি রিমোটের কনফিগারেশন পরিবর্তন করতে পারবেন না, আপনি মাস্টার শাখার সম্পূর্ণরূপে মুছে ফেলতে পারবেন না!

এই গুহা শুধুমাত্র বর্তমান শাখা (সাধারণত master শাখা) প্রযোজ্য; অন্য কোন শাখা মুছে ফেলা এবং উপরে হিসাবে recreated করা যাবে।


ভাল. আমার 2 সেন্ট। কিভাবে সার্ভারে লগইন করবেন, গিট ডিরেক্টরিতে যাচ্ছেন এবং খালি সংগ্রহস্থলের শাখাটির নামকরণ করবেন। এই একই শাখা পুনরায় আপলোড সঙ্গে যুক্ত সমস্ত সমস্যা নেই। প্রকৃতপক্ষে, 'ক্লায়েন্ট' স্বয়ংক্রিয়ভাবে সংশোধিত নামটি সনাক্ত করবে এবং তাদের দূরবর্তী রেফারেন্স পরিবর্তন করবে। পরে (বা আগে) আপনি শাখার স্থানীয় নামও সংশোধন করতে পারেন।


ঠিক আছে , স্থানীয়ভাবে এবং দূরবর্তী উভয় একটি শাখা পুনরায় নামকরণ করা বেশ সহজ!

যদি আপনি শাখায় থাকেন তবে আপনি সহজে এটি করতে পারেন:

git branch -m <branch>

অথবা যদি না হয়, আপনি করতে হবে:

git branch -m <your_old_branch> <your_new_branch>

তারপরে, রিমোটে এটিকে মুছে ফেলার মতো ধাক্কা দিন:

git push origin <your_old_branch>

এখন আপনি সম্পন্ন করেছেন, আপনি ধাক্কা দেওয়ার চেষ্টা করার সময় আপস্ট্রিম ত্রুটি পান, কেবল তা করুন:

git push --set-upstream origin <your_new_branch>

আমি বাস্তব কমান্ড লাইনের পদক্ষেপগুলি দেখানোর জন্য নীচের চিত্রটিও তৈরি করি, কেবল পদক্ষেপগুলি অনুসরণ করুন এবং আপনি ভাল হবেন:


git checkout -b new-branch-name
git push remote-name new-branch-name :old-branch-name

old-branch-name মুছে ফেলার আগে আপনাকে ম্যানুয়ালি new-branch-name নামতে স্যুইচ করতে হতে পারে





git-branch