git - tutorial - বর্তমান গিট শাখা একটি মাস্টার শাখা করুন




gitlab (9)

আমি জিট একটি সংগ্রহস্থল আছে। আমি একটি শাখা তৈরি, তারপর মাস্টার এবং শাখা উভয় কিছু পরিবর্তন হয়েছে।

তারপরে, দশ বছর পরে কৃতজ্ঞতা প্রকাশ করে আমি বুঝতে পেরেছি যে শাখাটি মাস্টারের চেয়ে অনেক ভাল অবস্থায় রয়েছে, তাই আমি শাখাটি মাস্টারের হয়ে উঠতে চাই এবং মাস্টারের পরিবর্তনগুলি উপেক্ষা করতে চাই।

আমি এটি মার্জ করতে পারছি না, কারণ আমি মাস্টারগুলিতে পরিবর্তনগুলি রাখতে চাই না। আমার কি করা উচিৎ?

অতিরিক্ত : এই ক্ষেত্রে, 'পুরানো' মাস্টারটি ইতোমধ্যে অন্য একটি রিপোজিটরিতে যেমন GitHub হিসাবে push হয়েছে। কিভাবে এই জিনিস পরিবর্তন করে?


অন্য দুটো উত্তর দিয়ে সমস্যা হল যে নতুন মাস্টারের পূর্বপুরুষ হিসাবে পুরানো মাস্টার নেই, তাই যখন আপনি এটি চাপিয়ে দেন, তখন সবাই অন্যকে মজাদার করে তুলবে। আপনি যা করতে চান তা হল:

git checkout better_branch
git merge --strategy=ours master    # keep the content of this branch, but record a merge
git checkout master
git merge better_branch             # fast-forward master up to the merge

আপনি যদি আপনার ইতিহাসটিকে সামান্য পরিষ্কার করতে চান, তবে আপনি কী করেছেন তা পরিষ্কার করার জন্য বার্তাটি একত্রিত করতে কিছু তথ্য যুক্ত করার সুপারিশ করব। দ্বিতীয় লাইন পরিবর্তন করুন:

git merge --strategy=ours --no-commit master
git commit          # add information to the template merge message

অন্য শাখা থেকে সকল ফাইলকে মাস্টারে চেকআউটও করতে পারেন:

git checkout master
git checkout better_branch -- .

এবং তারপর সব পরিবর্তন কমিট।


আমি যা বুঝি তা থেকে আপনি বর্তমান শাখাটি একটি বিদ্যমান শাখাতে শাখা করতে পারেন। মূলত, এটি বর্তমান শাখাটিতে আপনার যা যা আছে তার সাথে master ওভাররাইট করবে:

git branch -f master HEAD

একবার আপনি এটি সম্পন্ন করলে, আপনি সাধারণত আপনার স্থানীয় master শাখাকে ধাক্কা দিতে পারেন, সম্ভবত এখানেও বল পরিমাপের প্রয়োজন হয়:

git push -f origin master

কোন মার্জ, কোন দীর্ঘ কমান্ড। শুধু branch এবং push - কিন্তু, হ্যাঁ, এটি master শাখার ইতিহাস পুনর্লিখন করবে , তাই আপনি যদি কোনও টিমের সাথে কাজ করেন তবে আপনি কী করছেন তা জানতে হবে।

অন্যথায়, আমি দেখেছি যে আপনি কোনও শাখাটি কোনও দূরবর্তী শাখাতে ধাক্কা দিতে পারেন, তাই:

# This will force push the current branch to the remote master
git push -f origin HEAD:master

# Switch current branch to master
git checkout master

# Reset the local master branch to what's on the remote
git reset --hard origin/master

আমি সেরা কাজ করার জন্য এই সহজ পদ্ধতি খুঁজে পাওয়া যায় নি। এটি ইতিহাসকে পুনর্লিখন করে না এবং শাখাটির আগের সমস্ত চেক-ইনগুলি মাস্টারকে যুক্ত করা হবে। কিছুই হারিয়ে গেছে, এবং আপনি পরিষ্কারভাবে প্রত্যক্ষ লগ মধ্যে transpired কি দেখতে পারেন।

উদ্দেশ্য: "শাখা" এর বর্তমান অবস্থাটি "মাস্টার" করুন

একটি শাখায় কাজ করা, আপনার স্থানীয় এবং দূরবর্তী রিপোজিটরিগুলি আপ টু ডেট কিনা তা নিশ্চিত করতে আপনার পরিবর্তনগুলি চাপুন এবং ধাক্কা দিন:

git checkout master      # Set local repository to master
git reset --hard branch  # Force working tree and index to branch
git push origin master    # Update remote repository

এর পরে, আপনার মাস্টারটি আপনার শাখার শেষ কমিটির সঠিক অবস্থান এবং আপনার মাস্টার কমিটি লগ শাখার সমস্ত চেক-ইন দেখাবে।


কাজ করার আমার উপায় নিম্নলিখিত

#Backup branch
git checkout -b master_backup
git push origin master_backup
git checkout master
#Hard Reset master branch to the last common commit
git reset --hard e8c8597
#Merge
git merge develop

জেরফমি এর উত্তর যোগ করার জন্য, যদি আপনি source শাখার ইতিহাসে অর্থহীন মার্জ স্থাপন করতে না চান তবে আপনি ours একত্রিত করার জন্য একটি অস্থায়ী শাখা তৈরি করতে পারেন, তারপর এটি নিক্ষেপ করুন:

git checkout <source>
git checkout -b temp            # temporary branch for merge
git merge -s ours <target>      # create merge commit with contents of <source>
git checkout <target>           # fast forward <target> to merge commit
git merge temp                  # ...
git branch -d temp              # throw temporary branch away

এইভাবে মার্জ কমিটি শুধুমাত্র target শাখার ইতিহাসে বিদ্যমান থাকবে।

অন্যথায়, আপনি যদি একত্রীকরণ তৈরি করতে না চান তবে আপনি কেবল source সামগ্রীগুলি ধরতে এবং target উপর একটি নতুন কমিটির জন্য তাদের ব্যবহার করতে পারেন:

git checkout <source>                          # fill index with contents of <source>
git symbolic-ref HEAD <target>                 # tell git we're committing on <target>
git commit -m "Setting contents to <source>"   # make an ordinary commit with the contents of <source>

নিম্নলিখিত ধাপগুলি আটলাসিয়ান (বিটবકેટ সার্ভার) দ্বারা চালিত গিট ব্রাউজারে সম্পাদিত হয়।

master হিসেবে {বর্তমান-শাখা} তৈরি করা

  1. master থেকে একটি শাখা তৈরি করুন এবং এটি "মাস্টার-ডুপ্লিকেট" নাম দিন।
  2. {বর্তমান-শাখা} থেকে একটি শাখা তৈরি করুন এবং এটি "{বর্তমান-শাখা} -কপি" নাম দিন।
  3. রিপোজিটরি সেটিং (বিটবাকিট) "ডিফল্ট শাখা" পরিবর্তন করে "মাস্টার-ডুপ্লিকেট" এ নির্দেশ করে (এই পদক্ষেপ ছাড়াই, আপনি "পরবর্তী ধাপে" মাস্টারটি মুছতে পারবেন না)।
  4. "মাস্টার" শাখা মুছুন - আমি উত্স গাছ থেকে এই পদক্ষেপটি করেছি (আপনি এটি CLI বা গিট ব্রাউজার থেকে করতে পারেন)
  5. "{বর্তমান-শাখা}" থেকে "মাস্টার" এ পুনঃনামকরণ করুন এবং সংগ্রহস্থলের দিকে ধাক্কা দিন (এটি একটি নতুন "মাস্টার" শাখা তৈরি করবে যা এখনও "{বর্তমান-শাখা}" বিদ্যমান থাকবে)।
  6. সংগ্রহস্থল সেটিংসে, "মাস্টার" এ নির্দেশ করতে "ডিফল্ট শাখা" পরিবর্তন করুন।

যদি আপনি eclipse এ eGit ব্যবহার করছেন :

  • ডানদিকে প্রকল্প নোড ক্লিক করুন।
  • টিম → তারপর উন্নত → তারপর শাখা পুনরায়নাম নির্বাচন করুন
  • তারপর রিমোট ট্র্যাকিং ফোল্ডার প্রসারিত করুন।
  • ভুল নাম দিয়ে শাখাটি নির্বাচন করুন, তারপরে নাম পরিবর্তন করুন বোতামটি ক্লিক করুন, নতুন নামটির সাথে এটি পুনঃনামকরণ করুন।
  • নতুন মাস্টার চয়ন করুন, তারপর মাস্টার এটি পুনঃনামকরণ।

সম্পাদনাঃ আপনি বলেছিলেন না যে আপনি জনসাধারণের রেপোতে ধাক্কা দিয়েছিলেন! যে পার্থক্য একটি বিশ্বের তোলে।

দুটি উপায় আছে, "নোংরা" উপায় এবং "পরিষ্কার" উপায়। ধরুন আপনার শাখাকে new-master । এটি পরিষ্কার উপায়:

git checkout new-master
git branch -m master old-master
git branch -m new-master master
# And don't do this part.  Just don't.  But if you want to...
# git branch -d --force old-master

এটি কনফিগারেশন ফাইলগুলিকে পুনঃনামিত শাখার সাথে মেলে পরিবর্তন করবে।

আপনি এটি নোংরা উপায়ও করতে পারেন, যা কনফিগারেশন ফাইলগুলি আপডেট করবে না। এই ধরনের হুড অধীনে হুড কি ধরনের ...

mv -i .git/refs/new-master .git/refs/master
git checkout master




git