যদি আমার কাছে কেবলমাত্র git://
অ্যাক্সেস রয়েছে এমন কোনও ভাণ্ডার থাকে (এবং সাধারণত এটি কেবল ধাক্কা + টান), স্থানীয়ভাবে আমি যেভাবে করব সেভাবে os ভান্ডারটিতে শাখাগুলি পুনর্নাম করার কোনও উপায় আছে কি git branch -m
?
যদি আমার কাছে কেবলমাত্র git://
অ্যাক্সেস রয়েছে এমন কোনও ভাণ্ডার থাকে (এবং সাধারণত এটি কেবল ধাক্কা + টান), স্থানীয়ভাবে আমি যেভাবে করব সেভাবে os ভান্ডারটিতে শাখাগুলি পুনর্নাম করার কোনও উপায় আছে কি git branch -m
?
উত্তর:
আপনাকে কেবল পছন্দসই নামের সাথে একটি নতুন স্থানীয় শাখা তৈরি করতে হবে, এটি আপনার রিমোটে চাপ দিন এবং তারপরে পুরানো দূরবর্তী শাখাটি মুছুন:
$ git branch new-branch-name origin/old-branch-name
$ git push origin --set-upstream new-branch-name
$ git push origin :old-branch-name
তারপরে, পুরাতন শাখার নাম দেখতে, সংগ্রহস্থলের প্রতিটি ক্লায়েন্টকে করতে হবে:
$ git fetch origin
$ git remote prune origin
দ্রষ্টব্য: যদি আপনার পুরাতন শাখাটি আপনার প্রধান শাখা হয় তবে আপনার প্রধান শাখার সেটিংস পরিবর্তন করা উচিত। অন্যথায়, আপনি চালানোর সময় $ git push origin :old-branch-name
, আপনি ত্রুটিটি পাবেন "বর্তমান শাখার মোছন নিষিদ্ধ" ।
git fetch origin --prune
(কার্যকরভাবে নতুন শাখাগুলি আনতে এবং দূরবর্তীটিতে রেফারেন্সগুলি আর ছাড়িয়ে নিতে)।
-d
বা --delete
পরিবর্তে ব্যবহার করতে পারে :
।
আপনি যদি একইসাথে কোনও স্থানীয় শাখার নাম পরিবর্তন না করেই কেবলমাত্র দূরবর্তী অবস্থানের শাখার নাম পরিবর্তন করতে চান তবে আপনি একক কমান্ড দিয়ে এটি করতে পারেন:
git push <remote> <remote>/<old_name>:refs/heads/<new_name> :<old_name>
আমি এই স্ক্রিপ্টটি লিখেছি ( গিট-নামকরণ-রিমোট-শাখা ) যা উপরেরটি সহজেই করার জন্য একটি সহজ শর্টকাট সরবরাহ করে।
বাশ ফাংশন হিসাবে:
git-rename-remote-branch(){
if [ $# -ne 3 ]; then
echo "Rationale : Rename a branch on the server without checking it out."
echo "Usage : $(basename $0) <remote> <old name> <new name>"
echo "Example : $(basename $0) origin master release"
exit 1
fi
git push $1 $1/$2:refs/heads/$3 :$2
}
@ কেএসআরবি'র মন্তব্যকে সংহত করার জন্য : এটি মূলত যা করে তা হ'ল প্রথম একক আদেশে দুটি ধাক্কাgit push <remote> <remote>/<old_name>:refs/heads/<new_name>
পুরানো দূরবর্তী ট্র্যাকিং শাখার উপর ভিত্তি করে একটি নতুন দূরবর্তী শাখা এবং তারপরে git push <remote> :<old_name>
পুরানো দূরবর্তী শাখাটি মুছে ফেলা।
git push <remote>/<old_name>:refs/heads/<new_name>
git push [space]:<old_name>
refs/heads/name
? আপনি কি name
প্রথম কমান্ড তৈরি করে সরাসরি সরাসরি ব্যবহার করতে পারবেন না git push <remote> <remote>/<old_name>:<new_name>
?
<new_name>
এখনও বিদ্যমান নেই। যদি শাখাটি বিদ্যমান না থাকে, গিটের জন্য আপনাকে পুরো নামটি ব্যবহার করা দরকার অন্যথায় <new_name>
কোনও ট্যাগের নামও উল্লেখ করা যেতে পারে।
refs/heads/<new_name>
ইতিমধ্যে যদি উপস্থিত থাকে তবে আমরা কেবলমাত্র ক্যাভেটের মুখোমুখি হই । মুছাটি এখনও সফল হয়, ফলস্বরূপ কেবল মুছে <remote>/<old_name>
ফেলা হয়। কিছু হাত আগে পরীক্ষা করা সহজেই এড়াতে পারে।
আপনি যে শাখার নাম পরিবর্তন করতে চান তাতে প্রথমে চেকআউট করুন:
git branch -m old_branch new_branch
git push -u origin new_branch
থেকে একটি পুরানো শাখা অপসারণ remote
:
git push origin :old_branch
git push -u origin new_branch
) অন্যথায় নাম পরিবর্তন করা শাখা (নতুন_ ব্রাঞ্চ) মূল / ওল্ড ব্রাঞ্চটিকে ট্র্যাক করতে থাকবে। এবং একবার আপনি রিমোট ওল্ড_ব্রাঞ্চ মুছে ফেললে, নতুন_ ব্রাঞ্চ এখনও সেই শাখাটি চলে গেলেও, মূল / ওল্ড ব্রাঞ্চটিকে ট্র্যাক করবে।
অবশ্যই। কেবল স্থানীয়ভাবে শাখাটির নাম পরিবর্তন করুন, নতুন শাখাটি টিপুন এবং পুরানো একটি মুছুন।
কেবল আসল সমস্যাটি হ'ল সংগ্রহস্থলের অন্যান্য ব্যবহারকারীর স্থানীয় ট্র্যাকিং শাখার নাম পরিবর্তন করা হবে না।
একটি প্রত্যন্ত শাখার "পুনর্নামকরণ" আসলে একটি 2 ধাপ প্রক্রিয়া (প্রয়োজনীয় অর্ডার করা হয় না):
git push [space]:<old_name>
যেমন ksrb ব্যাখ্যা করেছে) );আমি টর্টোজাইজিট ব্যবহার করি এবং কমান্ড লাইনের মাধ্যমে যখন আমি প্রথম শাখাটি মুছে ফেলার চেষ্টা করেছি তখন আমি এটি পেয়েছি:
$ git push origin :in
মারাত্মক: 'উত্স' একটি গিট সংগ্রহস্থল হিসাবে উপস্থিত হয় না
মারাত্মক: দূরবর্তী সংগ্রহস্থল থেকে পড়া যায়নি।
দয়া করে নিশ্চিত হয়ে নিন যে আপনার কাছে সঠিক অ্যাক্সেসের অধিকার রয়েছে এবং ভান্ডার রয়েছে।
এই সম্ভবত হবার কথা ছিলো প্যাজেন্ট হচ্ছে না প্রাইভেট কী (যা লোড TortoiseGit লোড মধ্যে স্বয়ংক্রিয়ভাবে প্যাজেন্ট )। তদুপরি, আমি লক্ষ্য করেছি যে টর্টোজাইজিট কমান্ডগুলির মধ্যে origin
রেফ নেই (উদাঃ git.exe push --progress "my_project" interesting_local:interesting
)।
আমি বিটবকেটও ব্যবহার করছি এবং অন্যরকম ওয়েব-ভিত্তিক অনলাইন গিট ম্যানেজার হিসাবে (গিটহাব, গিটল্যাব), আমি সরাসরি তাদের ইন্টারফেসের মাধ্যমে (শাখা পৃষ্ঠা) মুছে ফেলতে সক্ষম হয়েছি:
যাইহোক, টর্টোইজগিতে আপনি ব্রাউজ রেফারেন্সের মাধ্যমে দূরবর্তী শাখাগুলিও মুছতে পারেন :
দূরবর্তী শাখায় ডান-ক্লিক করে (রিমোটগুলি তালিকা) রিমোট শাখা মুছুন বিকল্পটি প্রদর্শিত হবে:
পুরানো রিমোট শাখাটি মোছার পরে আমি কেবল নতুন নাম টাইপ করে টর্টোজাইজিটের মাধ্যমে একটি নতুন দূরবর্তী শাখায় সরাসরি ঠেলে দিয়েছি দূরবর্তী: ক্ষেত্র পুশ উইন্ডো এবং এই শাখা স্বয়ংক্রিয়ভাবে তৈরি করা এবং দৃশ্যমান ছিল Bitbucket ।
তবে, আপনি যদি এখনও এটি ম্যানুয়ালি করতে পছন্দ করেন তবে এই থ্রেডে এখনও উল্লেখ করা হয়নি এমন একটি পয়েন্টটি -u
= --set-upstream
।
git push
দস্তাবেজগুলি থেকে , -u
কেবলমাত্র একটি উপনাম --set-upstream
, সুতরাং সিলভাইন ( -set-upstream new-branch
) এবং শশাঙ্ক ( -u origin new_branch
) এর উত্তরের আদেশগুলি সমান, কারণ দূরবর্তী রেফorigin
অন্য কোনও রেফ আগে সংজ্ঞায়িত না হলে ডিফল্ট ছিল:
git push origin -u new_branch
= git push -u new_branch
থেকে ডক্স বিবরণ :
যদি কনফিগারেশনটি অনুপস্থিত থাকে তবে এটি ডিফল্ট হয়
origin
।
শেষ পর্যন্ত, আমি এখানে অন্য উত্তরগুলির দ্বারা প্রস্তাবিত কোনও আদেশ ম্যানুয়ালি টাইপ বা ব্যবহার করি নি, তাই সম্ভবত এটি একইরকম পরিস্থিতিতে অন্যের পক্ষে দরকারী be
origin
। আপনি যত আপনি এটা কমান্ড চালানোর থেকে পেতে আপনার রিমোটের নাম আছে git remote
। গিটটি এর দ্বারা কাজ করে ssh
যা বোঝায় যে আপনি সর্বজনীন + ব্যক্তিগত কী ব্যবহার করছেন। আমি ধরে নিয়েছি যে Autoload Putty keys
টর্টোজাইজিট আপনার দূরবর্তী রেফারেন্স সহ কিছু করার জন্য কেবল প্রয়োজনীয় কীগুলি স্বয়ংক্রিয়ভাবে চালিত করছে। শেষ কথাটি হ'ল git push -u
দূরবর্তী শাখায় ঠেলাঠেলি করার জন্য কোনও উপনাম নয়, এটি স্থানীয়ভাবে তৈরি এমন একটি দূরবর্তী শাখায় ঠেলাঠেলি করার জন্য একটি উলামের নাম এবং এর প্রত্যন্ত রেফারেন্সটি এখনও এই শাখাটি পায় নি ।
-u
একটি উপনাম --set-upstream
এবং "যদি কনফিগারেশনটি অনুপস্থিত থাকে তবে এটি ডিফল্ট হয়origin
"। সিলভাইন এবং শশাঙ্ক এটি একটি নতুন নির্মিত প্রত্যন্ত শাখায় প্রবেশের জন্য ব্যবহার করে । কী সমস্যা হতে পারে হয়েছে কারণে প্যাজেন্ট হচ্ছে না এটা লোড যখন আমি চেষ্টা git push origin :in
শেল উপর। সুতরাং আমি আপনার উপনীতটি বুঝতে পারি না, আমি কেবলমাত্র অন্য উত্তরে আমার এবং অ-সম্বোধিত বিশদটি নির্দেশ করেছি, সেগুলি ব্যাখ্যা করেছি এবং সেগুলি সমাধান করেছি।
-u
জন্য একটি নাম --set-upstream
তবে এটি আপনি যেমন বলেছিলেন তেমন কোনও প্রত্যন্ত শাখায় প্রবেশের জন্য এটি একটি উপনাম নয়। কোনও দূরবর্তী শাখায় প্রবেশের জন্য আপনার অনন্যরূপে প্রয়োজন git push <remote>
এবং এটি এখনও রিমোটে না থাকলে আপনি যুক্ত করেন git push -u <remote>
। সুতরাং, -u
রিমোটে শাখার একটি রেফারেন্স তৈরি করতে ব্যবহৃত হয়।
আমি জানি না তবে @ সিলওয়াইন ডফ্রেসনের উত্তর আমার পক্ষে কার্যকর হয় না।
git branch new-branch-name origin/old-branch-name
git push origin --set-upstream new-branch-name
git push origin :old-branch-name
আমাকে উজানে আনসেট করতে হবে এবং তারপরে আমি আবার স্ট্রিম সেট করতে পারি। নিম্নলিখিতটি আমি এটি কীভাবে করেছি।
git checkout -b new-branch-name
git branch --unset-upstream
git push origin new-branch-name -u
git branch origin :old-branch-name
এটি সঠিক বা ভুল কিনা তা আমি জানি না, তবে আমি শাখার "পুরাতন নাম" টি শাখার "নতুন নাম" এর দিকে ঠেলে দিয়েছিলাম, তারপরে নিম্নলিখিত দুটি লাইন দিয়ে পুরানো শাখাটি পুরোপুরি মুছে ফেলেছি:
git push origin old_branch:new_branch
git push origin :old_branch
আপনি পুরানো নাম শাখার উপর ভিত্তি করে একটি নতুন শাখা তৈরি করতে পারেন। ঠিক এইভাবে, তারপরে পুরানো শাখাটি মুছুন, ওভার !!!
ইতিমধ্যে প্রদত্ত উত্তরগুলিতে যুক্ত করা, এখানে একটি সংস্করণ যা নতুন শাখাটি ইতিমধ্যে বিদ্যমান কিনা তা পরীক্ষা করে (যাতে আপনি এটি নিরাপদে কোনও স্ক্রিপ্টে ব্যবহার করতে পারেন)
if git ls-remote --heads "$remote" \
| cut -f2 \
| sed 's:refs/heads/::' \
| grep -q ^"$newname"$; then
echo "Error: $newname already exists"
exit 1
fi
git push "$oldname" "$remote/$oldname:refs/heads/$newname" ":$oldname"
(চেকটি এই উত্তর থেকে )
git show-ref --quiet --verify -- refs/heads/$new_name
পরিবর্তে ব্যবহার করতে হবে ls-remote | cut | sed | grep
।
git push origin origin/old_name:refs/heads/new_name && git push origin :old_name
।