স্থানীয় এবং দূরবর্তী উভয় গিট সংগ্রহস্থলের জন্য মাস্টার শাখার নাম পরিবর্তন করুন


819

আমার কাছে শাখা রয়েছে masterযা প্রত্যন্ত শাখাকে ট্র্যাক করে origin/master

আমি master-oldস্থানীয় এবং দূরবর্তী উভয় এগুলির নাম পরিবর্তন করতে চাই । এটা কি সম্ভব?

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

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

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


2
গৃহীত উত্তরে প্রদত্ত রেসিপিটি কোনও নামের শাখায় প্রযোজ্য, তবে গিটে (পূর্বনির্ধারিতভাবে) মাস্টার শাখার বিশেষ ভূমিকার কারণে ক্যাভ্যাটগুলি (যেমন উল্লেখ করা হয়েছে) তা নয় ।
কিনান

3
@ কেনান: আমার মনে হয় আমি বুঝতে পারছি না। মাস্টারকে কী সাবধানতা প্রয়োগ করা হয় এবং অন্যান্য শাখায় প্রয়োগ হয় না? এটি যদি xy নামে একটি শাখা হয়ে থাকে এবং অন্যান্য লোকেরা সেই শাখাটিকে সন্ধান করে থাকে তবে কীভাবে এটি আলাদা হবে?
অ্যালবার্ট

4
যে সতর্কতা আপনি সাধারণত দূরবর্তী মাস্টারকে মুছতে পারবেন না। এটি যদিও অ্যারিস্টটলের উত্তরের ক্ষেত্রে প্রযোজ্য নয়, সুতরাং আপনি এটি গ্রহণযোগ্য উত্তর হিসাবে চিহ্নিত করতে চাইতে পারেন। আপনি সঠিক, যে কোনও দূরবর্তী ট্র্যাকিং শাখা থেকে git push -fসক্ষমতার উপর প্রভাব ফেলে pull
কিনান

আপনি একটি নতুন শাখা তৈরি করতে পারেন master-oldযা পূর্ববর্তী masterশাখার মতো একই প্রতিশ্রুতিতে নির্দেশ করে । তারপর আপনি ওভাররাইট করতে masterএকটি করে আপনার নতুন পরিবর্তনের সঙ্গে শাখা mergeসঙ্গে oursকৌশল। যখন রিমোটটি অ-দ্রুতগতির পরিবর্তনগুলিকে অনুমতি দেয় না তখন মার্জ করা কাজ করে। এর অর্থ হ'ল অন্যান্য ব্যবহারকারীদের জোর করে আপডেট হবে না।
dnozay

1
@ কেনান masterকেবলমাত্র ততক্ষণ বিশেষ যেহেতু এটি কেবলমাত্র বিদ্যমান শাখা। আপনার একাধিকগুলি হওয়ার সাথে সাথে সমস্ত শাখা সমান ভিত্তিতে চলেছে।
jub0bs

উত্তর:


614

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

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

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

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

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


2
শাখাগুলি কেবল একটি (নাম, হ্যাশ) জোড়া - বেশি কিছু নয়, কিছু কম নয়। শাখাগুলিতে রিফ্লগ রয়েছে তবে এটি দূরবর্তী ক্লায়েন্টদের কাছে কখনই উন্মুক্ত হয় না।
বিডনলান

122
আমি রিমোটে মাস্টার মুছে ফেলার আগে রিমোটে মাস্টার-ওল্ড তৈরি করব। আমি তো ভৌতিক।
অ্যাডাম ডাইমিত্রুক

6
নীচে অ্যারিস্টটলের উত্তর আপনাকে মাস্টারকে মুছে না ফেলে এটি করতে দেয়, তাই আমি মনে করি এটিই ভাল rable
ক্লে ব্রিজগুলি

13
এটি পরিষ্কার এবং নিরাপদ হবে যদি আপনি / এর পরিবর্তে new-branch-nameএবং ব্যবহার করতে পারেন তবে এটি একটি সাধারণ সমস্যা। old-branch-namemastermaster-old
জয়দার

2
যদি মুছে ফেলা শাখা (এখানে: মাস্টার) অন্য শাখাগুলি দ্বারা রেফারেন্স না পাওয়া যায়, তবে গিট আবর্জনা সেই সমস্ত কমেটি সংগ্রহ করতে পারে ... ভাল ... "শাখা"। - কিছু গিট চীনামাটির বাসন কমান্ড একটি আবর্জনা সংগ্রহ ট্রিগার করে। - অতএব: নতুন নামটি প্রথমে তৈরি করুন (একই প্রতিশ্রুতি দেখানো), তারপরে পুরানো নামটি মুছুন।
রবার্ট সিমার

257

ধরে নিচ্ছেন আপনি বর্তমানে চালু আছেন 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-oldশাখা originতৈরি করুন master
  2. এই নতুন শাখার জন্য একটি নতুন স্থানীয় শাখা তৈরি করুন origin/master-old(যা স্বয়ংক্রিয়ভাবে ট্র্যাকিং শাখা হিসাবে সঠিকভাবে সেট আপ হবে)।
  3. এখন আপনার স্থানীয়কে masterযাকে প্রতিশ্রুতি দিতে চান তাতে নির্দেশ করুন।
  4. অবশেষে, জোর করে পরিবর্তন masterমধ্যে originসংগ্রহস্থল আপনার নতুন স্থানীয় প্রতিফলিত master

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


11
এটি "উত্তর" এর চেয়ে ভাল উত্তর, আমি সম্মত, তবে যারা এখানে এসেছিলেন কেবল একটি শাখার নাম পরিবর্তন করতে (স্পষ্টভাবে মাস্টার নয়), তৃতীয় ধাপটি তেমন কোনও অর্থ দেয় না।
নোকট করুন

আপনি masterবা অন্য কোনও শাখায় রয়েছেন কিনা তা উত্তর দিয়ে এটি কোনও পার্থক্য করে না । যদিও প্রশ্নটি খারাপভাবে শিরোনাম করা হয়েছিল, এটি কেবল একটি শাখার নামকরণের চেয়ে আরও জটিল কোনও কাজ সম্পর্কে জিজ্ঞাসা করে ।
অ্যারিস্টটল পাগাল্টজিস

3
এটি আমার পক্ষে কাজ করা সমাধান হতে পারে। আমি মাস্টারকে অন্য একটি শাখা দিয়ে প্রতিস্থাপন করার চেষ্টা করছিলাম। আমি পদক্ষেপ 3-এর জন্য $ নতুন_মাস্টার_কমিট পাওয়ার জন্য গিট লগ -1 উত্স / কী_আই_ওয়ান্ট_আস_নিউ_মাস্টারটি করেছি the ধাপ (পদক্ষেপ 4) পরে, অন্যান্য দেবগণ বার্তা টেনে আনবেন "আপনার শাখাটি 295 টি কমিট দ্বারা মাস্টারের চেয়ে এগিয়ে আছে।" এটি ঠিক করতে আমি একটি ইমেল প্রেরণ করেছি যাতে তারা প্রতিটি রানকে জানতে দেয়: গিট টান; গিট চেকআউট কিছু_রেন্ডম_ব্র্যাঞ্চ; গিট শাখা -D মাস্টার; গিট টান; গিট চেকআউট মাস্টার; মূলত, তাদের তাদের স্থানীয় মাস্টার সরিয়ে নতুন সংস্করণটি টানতে হবে অন্যথায় তারা স্থানীয়ভাবে ভুল জায়গায় রয়েছে।
nairbv

আপনি এটি আরও সহজেই করতে পারতেন: ধরে নিলেন তারা ইতিমধ্যে ইতিমধ্যে রয়েছে masterতবে তারা কেবল git fetch && git reset --hard origin/masterতাদের স্থানীয়কে masterএকইরকম হতে বাধ্য করতে বাধ্য করতে পারে origin। আমি এই নথিভুক্ত আছে, পাশাপাশি আরো জটিল কেস হিসাবে যেখানে আপনি উপরে স্থানীয় বদ্ধ পরিকর masterআপনি রাখা, চাই যে stackoverflow.com/q/4084868
অ্যারিস্টট্ল Pagaltzis

নিশ্চিত করুন যে রিমোট কনফিগারেশনের ফাইলটিতে "অস্বীকৃতি ন্যানফাস্টফওয়ার্ডস = মিথ্যা" রয়েছে বা আপনি "রিমোট: ত্রুটি: অ-দ্রুত-ফরোয়ার্ড রেফ / হেডস / মাস্টারকে অস্বীকার করছেন (আপনাকে প্রথমে টানতে হবে)"
gjcamann

158

গিট ভি 1.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

10
এর বিকল্প --set-upstreamনিম্নরূপ: একবার আপনার শাখার স্থানীয়ভাবে নাম পরিবর্তন করা হয়েছে এবং git push -u --all
উত্সটিতে

4
এটি মাস্টার শাখায় কাজ করবে না, যেহেতু গিট আপনাকে রিমোট মাস্টার মুছতে দেয় না।
আলেকজান্দ্রে

4
@ আলেকজান্দ্রনেটো এই ক্ষেত্রে আপনি ২ য় লাইনের আগে ২ য় লাইনটি কার্যকর করতে পারেন, ডিফল্ট শাখায় সেট করতে পারেন new_branchএবং শেষ পর্যন্ত master২ য় লাইনের সাহায্যে রিমোটটি মুছতে পারেন ।
ত্রিস্তান জহিয়ার

3
আশ্চর্যজনকভাবে সহজ পদক্ষেপ। এটি প্রশ্নের সেরা উত্তর
সিদ্ধসুহিং

13
রিমোট শাখা মুছতে git push origin --delete old_branchকিছুটা বেশি পঠনযোগ্য।
থমাস ডাব্লু

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

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


এই সমাধানের কোনও অংশ কী স্থানীয় পুরাতন-শাখা-নাম মুছে দেয়, বা এটি কোনও সেরাপারেট অনুশীলন?
গ্রিনএজজেড

4
আমি মনে করি শেষে git branch -d old-branch-nameস্থানীয় পুরাতন শাখাটি মুছে ফেলার জন্য চালানো উচিত ।
নবী কেজেড

আপনি শুধুমাত্র একটি হুকুমে পরিবর্তন ধাক্কা পারেন: git push remote-name new-branch-name :old-branch-name
সিগড

এইভাবে আপনি গিট ইতিহাস জটিল হবে না? কারণ আপনি বর্তমানটির নতুন নামকরণের পরিবর্তে একটি নতুন শাখা খুলছেন।
androidevil

1
@ এন্ড্রয়েডার নং শাখায় গিটের একটি সহজ রেফারেন্স
সিগড

29

শাখাটির নতুন নামকরণের অনেকগুলি উপায় রয়েছে, তবে আমি আরও বড় সমস্যার দিকে মনোনিবেশ করতে চলেছি: "ক্লায়েন্টদের কীভাবে দ্রুত-অগ্রগতি করতে দেওয়া যায় এবং স্থানীয়ভাবে তাদের শাখাগুলি নিয়ে গোলযোগ না ঘটে "

প্রথমে একটি দ্রুত চিত্র: মাস্টার শাখার নামকরণ এবং ক্লায়েন্টদের দ্রুত-এগিয়ে দেওয়ার অনুমতি দেওয়া

এটি আসলে করা সহজ কিছু; তবে এটিকে গালি দিবেন না। পুরো ধারণাটি মার্জ কমিটিকে আবদ্ধ করে; যেহেতু তারা দ্রুত-ফরওয়ার্ডের অনুমতি দেয় এবং অন্য একটি শাখার ইতিহাস লিঙ্ক করে।

শাখার নামকরণ:

# rename the branch "master" to "master-old"
# this works even if you are on branch "master"
git branch -m master master-old

নতুন "মাস্টার" শাখা তৈরি করা:

# create master from new starting point
git branch master <new-master-start-point>

পিতামাতার সন্তানের ইতিহাস থাকার জন্য মার্জ কমিট তৈরি করা:

# now we've got to fix the new branch...
git checkout master

# ... by doing a merge commit that obsoletes
# "master-old" hence the "ours" strategy.
git merge -s ours master-old

এবং voila।

git push origin master

এটি কাজ করে কারণ একটি mergeপ্রতিশ্রুতি তৈরি করা ব্রাঞ্চটিকে একটি নতুন সংশোধনীতে দ্রুত-ফরওয়ার্ড করার অনুমতি দেয় ।

একটি বুদ্ধিমান মার্জ কমিট বার্তা ব্যবহার করে:

renamed branch "master" to "master-old" and use commit ba2f9cc as new "master"
-- this is done by doing a merge commit with "ours" strategy which obsoletes
   the branch.

these are the steps I did:

git branch -m master master-old
git branch master ba2f9cc
git checkout master
git merge -s ours master-old

3
ধন্যবাদ! git merge -s ours master-oldঅন্যান্য উত্তরগুলি মিস করে এমন এক গুরুত্বপূর্ণ বিষয়। এছাড়াও, "করণে সহজ" এর অর্থ "বোঝা সহজ বা সন্ধান করা" এর অর্থ নয় যা মনে হয় প্রচুর গিট, তবে আমি ডিগ্রি করি।
মার্টিন ভিডনার

3
আমি এই সত্যটি পছন্দ করি যে কোনও মুছে ফেলার কথা উল্লেখ করা হয়নি এবং উজানের ক্লোনগুলির সাথে যারা কাজ করছেন তাদের জন্য স্থানান্তর "বিরামবিহীন"। ধন্যবাদ!
পিয়োট্রেইক

12

আমি ধরে নিচ্ছি আপনি এখনও আপনার আগের প্রশ্নের মতো একই পরিস্থিতি সম্পর্কে জিজ্ঞাসা করছেন । অর্থাৎ, মাস্টার-নতুন এর ইতিহাসে মাস্টার-ওল্ড ধারণ করবে না * * আপনি যদি মাস্টার-নতুনকে "মাস্টার" বলছেন, আপনি কার্যকরভাবে পুনর্লিখনের ইতিহাস পাবেন। আপনি কীভাবে এমন একটি রাজ্যে প্রবেশ করবেন তা বিবেচনাধীন নয় যেখানে মাস্টার মাস্টারের কোনও পূর্ববর্তী অবস্থানের বংশধর নয়, কেবলমাত্র এটি সেই অবস্থায় রয়েছে।

মাস্টার উপস্থিত না থাকাকালীন অন্য ব্যবহারকারীরা টানার চেষ্টা করছেন কেবল তাদের টানগুলি ব্যর্থ হবে (রিমোটের উপর এমন কোনও রেফ নেই) এবং এটি আবার কোনও নতুন জায়গায় উপস্থিত হয়ে গেলে, তাদের টানগুলি তাদের মাস্টারকে নতুন রিমোট মাস্টারের সাথে একীভূত করার চেষ্টা করতে হবে, ঠিক যেমন আপনি নিজের ভাণ্ডারে মাস্টার-ওল্ড এবং মাস্টার-নতুনকে একীভূত করেছেন। আপনি এখানে যা করার চেষ্টা করছেন তা দেওয়া, মার্জটিতে বিরোধ রয়েছে have (যদি এগুলি সমাধান করা হয় এবং ফলাফলটি পুনরায় ভান্ডারটিতে ঠেলাঠেলি করা হয় তবে আপনি আরও খারাপ অবস্থার মধ্যে থাকবেন - সেখানকার ইতিহাসের উভয় সংস্করণ))

আপনার প্রশ্নের সহজ উত্তর দেওয়ার জন্য: আপনার গ্রহণ করা উচিত যে কখনও কখনও আপনার ইতিহাসে ভুল হবে। ঠিক আছে. এটা সবার সাথেই ঘটে। Git.git সংগ্রহস্থলটিতে ফেরত প্রতিশ্রুতি রয়েছে। গুরুত্বপূর্ণ বিষয়টি হ'ল একবার আমরা ইতিহাস প্রকাশ করি, এটি এমন কিছু যা প্রত্যেকে বিশ্বাস করতে পারে।

* যদি এটি করা থাকে তবে এটি মাস্টারকে কিছু পরিবর্তন ঠেকানোর সমতুল্য হবে এবং তারপরে এটি নতুন একটি শাখা তৈরি করা হবে যেখানে এটি ব্যবহৃত হত। সমস্যা নেই.


হ্যাঁ, এটি একই সমস্যা, এটি কীভাবে সমাধান করা যায় তা কেবল একটি ধারণা ছিল। তবে আমি এই শাখাটির পুনঃনামকরণ না করলেও এটি সম্ভব হলে আমি আকর্ষণীয় ছিলাম। আমি ভেবেছিলাম "মাস্টার" এর মতো রেফগুলি কেবল নির্দিষ্ট কমিটের উল্লেখ। আমি আসলে কোনও ইতিহাস পরিবর্তন করতে চাই না। আমি ভেবেছিলাম আমি কেবলমাত্র অন্য একটি প্রধানের সাথে মাস্টার-রেফারেন্সটি নির্দেশ করব। এর অর্থ হ'ল, আমি এর আগে কখনও কখনও কোনও শাখার নাম ব্যবহার করতে পারি না?
অ্যালবার্ট

প্রকৃতপক্ষে, শাখাগুলি রেফ - কমিটের পয়েন্টার। জিনিসটি হ'ল, আমরা প্রত্যাশা করি কোনও শাখার প্রধান কোনও নির্দিষ্ট উপায়ে বিকশিত হবে (যথা, সর্বদা দ্রুত এগিয়ে নেওয়া)। অন্য কারও দৃষ্টিকোণ থেকে, আপনার পাবলিক রেপোতে একটি শাখা স্থানান্তর করা শাখার ইতিহাস পুনর্লিখনের সমান। এটি আর আগে ব্যবহৃত সমস্ত কিছু প্রতিশ্রুতিতে নির্দেশ করে না।
ক্যাস্যাবেল

8

নির্বাচিত উত্তর ব্যর্থ যখন আমি চেষ্টা করে। এটা তোলে একটি ত্রুটি ছোঁড়া: 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.

কৌতুকটি হ'ল দূরবর্তী সংগ্রহস্থলের দিকে ঠেলাঠেলি করার আগে প্লেসোল্ডারটি ডানদিকে চেকআউট করা। বাকীটি স্ব-বর্ণনামূলক, মাস্টার শাখাটি মুছে ফেলা এবং এটিকে দূরবর্তী সংগ্রহস্থলে চাপানো এখন কাজ করা উচিত। এখান থেকে উদ্ধৃত ।


এটি গিট পুশ রিমোটে ব্যর্থ হবে: মাস্টার যদি এটি দূরবর্তী দিক থেকে পরীক্ষা করা হয় - আপনি ত্রুটি লগ লাইনে প্রিফিক্স হিসাবে "দূরবর্তী: ত্রুটি:" দেখতে পাবেন।
রাফালমাগ

2

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


8
আমি গিথুব সার্ভারে লগ ইন করতে শংসাপত্রগুলি ভুলে গেছি। সেখানে শংসাপত্র সহ যে কেউ :
পি

1

কি সম্পর্কে:

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

শাখা ট্র্যাকিংয়ের সাথে বিশৃঙ্খল - ব্যবহারকারীদের স্থানীয়ভাবে তাদের শাখা ঠিক করতে হবে?
dnozay

1

এটি আমার জানা সবচেয়ে সহজ এবং সবচেয়ে 'পাঠযোগ্য' উপায়:

-ম ব্যবহার করে স্থানীয় শাখা 'সরান'

git branch -m my_old_branch_name my_new_branch_name

রিমোটে 'সরানো' শাখাটি পুশ করুন, -u ব্যবহার করে 'আপস্ট्रीम' সেট করুন

git push origin -u my_new_branch_name

('আপস্ট্রিম' সেট করা আপনার স্থানীয় শাখাকে মূলত 'সংযুক্ত করে' দূরবর্তী স্থানে, যাতে আনতে, টানুন এবং ধাক্কা দেওয়ার মতো কাজ করবে)

রিমোট থেকে পুরানো শাখা মুছুন

git push origin -D <old_name>

(আপনার স্থানীয় শাখা ইতিমধ্যে চলে গেছে, কারণ আপনি এটি প্রথম পদক্ষেপে 'সরানো')


1

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

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

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>

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

এখানে চিত্র বর্ণনা লিখুন


0

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

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

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


0

কাজটি করতে নীচে শেল স্ক্রিপ্টে সংরক্ষণ করা যায়:

উদাহরণ স্বরূপ:

remote="origin"

if [ "$#" -eq 0 ] # if there are no arguments, just quit
then
    echo "Usage: $0 oldName newName or $0 newName" >&2
    exit 1
elif
    [ "$#" -eq 1 ] # if only one argument is given, rename current branch
then 
    oldBranchName="$(git branch | grep \* | cut -d ' ' -f2)" #save current branch name
    newBranchName=$1
else
    oldBranchName=$1
    newBranchName=$2
fi

git branch -m $oldBranchName $newBranchName

git push $remote :$oldBranchName #delete old branch on remote
git push --set-upstream $remote $newBranchName # add new branch name on remote and track it

দয়া করে নোট করুন যে এখানে ডিফল্ট দূরবর্তী নাম "উত্স" হার্ড-কোডড, আপনি যদি কনফিগারযোগ্য হয় তবে স্ক্রিপ্টটি প্রসারিত করতে পারেন!

তারপরে এই স্ক্রিপ্টটি ব্যাশ এলিয়াস, গিট এলিয়াস বা ইন উদাহরণস্বরূপ সোর্সট্রি কাস্টম অ্যাকশনগুলির সাথে ব্যবহার করা যেতে পারে।


-1

আমি বিশ্বাস করি কী উপলব্ধি যে আপনি একটি করণ করা হয় ডবল পুনঃনাম দিন: masterথেকে master-oldএবং master-newথেকে master

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

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


-5
git update-ref newref oldref
git update-ref -d oldref newref

2
এটি আমার পক্ষে কাজ করে বলে মনে হচ্ছে না, আমি পেয়েছি: গিট আপডেট-রেফ ট্রাঙ্ক ট্রাঙ্ক 2 মারাত্মক: ট্রাঙ্ক 2: বৈধ SHA1 নয়
গ্রেগ লিন্ড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.