সম্পাদনা করুন, 24 নভেম্বর 2016: এই উত্তরটি দৃশ্যত জনপ্রিয়, তাই আমি এখানে একটি নোট যুক্ত করছি। আপনি যদি কোনও সেন্ট্রাল সার্ভারে কোনও ট্যাগ প্রতিস্থাপন করেন , যার কাছে পুরাতন ট্যাগ রয়েছে central সেই কেন্দ্রীয়-সার্ভারের সংগ্রহস্থলের যে কোনও ক্লোন ইতিমধ্যে ট্যাগ রয়েছে its তার পুরানো ট্যাগটি ধরে রাখতে পারে । সুতরাং এটি আপনাকে কীভাবে করতে হবে তা বলার সময়, আপনি এটি করতে চান তা নিশ্চিত হন। আপনার ইতিমধ্যে "ভুল" ট্যাগ থাকা প্রত্যেককেই তাদের "ভুল ট্যাগ" মুছতে এবং নতুন "রাইট ট্যাগ" দিয়ে প্রতিস্থাপন করতে হবে।
গিট ২.১০ / ২.১১-এ পরীক্ষা করে দেখা যায় যে পুরানো ট্যাগ ধরে রাখা ক্লায়েন্টদের চলার জন্য ডিফল্ট আচরণ git fetch, এবং আপডেট হওয়া ক্লায়েন্টদের জন্য ডিফল্ট আচরণ git fetch --tags।
(মূল উত্তর অনুসরণ করে।)
আপনি যখন ট্যাগ পুশ git push --tagsকরতে বলেন, ফর্মের একটি আপডেটের অনুরোধকে রিমোটে প্রেরণ করে (প্রয়োজনীয় যেকোন কমিট এবং অন্যান্য প্রয়োজনীয় জিনিস এবং পুশ সেটিংস থেকে অন্য কোনও রেফ আপডেট) সহ প্রেরণ করে । (ভাল, এটি প্রেরণে অনেকগুলি রয়েছে: প্রতিটি ট্যাগের মধ্যে একটি onenew-sha1 refs/tags/name
আপডেট অনুরোধটি একটি old-sha1(বা আবার, প্রতিটি ট্যাগের জন্য একটি ) যুক্ত করার জন্য রিমোট দ্বারা সংশোধন করা হয়েছে , তারপরে প্রাক-প্রাপ্ত এবং / অথবা আপডেট হুকগুলিতে সরবরাহ করা হবে (রিমোটে যে কোনও হুক বিদ্যমান রয়েছে)। ট্যাগগুলি তৈরি / মোছা / আপডেট করার অনুমতি দেয় বা প্রত্যাখ্যান করবে কিনা সেগুলি এই হুকগুলি সিদ্ধান্ত নিতে পারে।
old-sha1মান সব শূন্য "নাল" রয়েছে SHA-1 টি ট্যাগ তৈরি করা হচ্ছে যদি হয়। new-sha1নাল রয়েছে SHA-1 যদি ট্যাগটি মোছা হচ্ছে হয়। অন্যথায় SHA-1 মান দুটিই আসল, বৈধ মান।
এমনকি কোনও হুক না থাকলেও এখানে "বিল্ট-ইন হুক" রয়েছে যা চালানো হয়: আপনি "ফোর্স" পতাকা ব্যবহার না করে রিমোট কোনও ট্যাগ সরিয়ে নিতে অস্বীকার করবে (যদিও "বিল্ট-ইন হুক" উভয়ের সাথে সর্বদা ঠিক থাকে না "যুক্ত" এবং "মুছুন")। আপনি যে প্রত্যাখ্যান বার্তাটি দেখছেন তা এই অন্তর্নির্মিত হুক থেকে আসছে। (প্রসঙ্গক্রমে, এই একই বিল্ট-ইন হুক শাখা আপডেটগুলিও প্রত্যাখ্যান করে যা দ্রুত অগ্রসর হয় না)) 1
তবে what's কী চলছে তা বোঝার জন্য এখানে একটি কী — git pushপদক্ষেপটির কোনও ধারণাই নেই যে রিমোটের সেই ট্যাগটি এখন রয়েছে কিনা, এবং যদি তাই হয় তবে তার কী কী SHA-1 মান রয়েছে। এটি কেবল "SHA-1 মান সহ আপনার ট্যাগগুলির সম্পূর্ণ তালিকা এখানে আছে" বলে। রিমোট মানগুলির সাথে তুলনা করে এবং যদি সংযোজন এবং / অথবা পরিবর্তনগুলি থাকে তবে সেগুলিতে হুক চালায়। (যে ট্যাগগুলি একই রকম, এটি কিছুই করে না tag ট্যাগগুলির জন্য যা আপনার কাছে নেই সেগুলিও কিছুই করে না!)
আপনি যদি স্থানীয়ভাবে ট্যাগটি মুছে ফেলেন তবে pushআপনার ধাক্কা কেবল ট্যাগটি স্থানান্তর করে না। রিমোট ধরে নেয় কোনও পরিবর্তন করা উচিত নয়।
আপনি যদি স্থানীয়ভাবে ট্যাগটি মুছে ফেলেন তবে এটি নতুন স্থানের দিকে নির্দেশ করে তৈরি করুন, তারপরে pushআপনার ধাক্কা ট্যাগটি স্থানান্তর করে এবং রিমোট এটি ট্যাগ-পরিবর্তন হিসাবে দেখায় এবং পরিবর্তনটিকে প্রত্যাখ্যান করে, যদি না এটি জোর চাপ দেওয়া হয়।
সুতরাং, আপনার কাছে দুটি বিকল্প রয়েছে:
- একটি জোর-ধাক্কা, বা
- রিমোটের ট্যাগ মুছুন।
আধুনিক হয় মাধ্যমে সম্ভাব্য git push2 যদিও ট্যাগ স্থানীয়ভাবে মোছা এবং pushing কোনো প্রভাব নেই। রিমোটটির নামটি ধরে নেওয়া originএবং আপনি যে ট্যাগটি মুছতে চান তা হ'ল dev:
git push origin :refs/tags/dev
এটি দূরবর্তীটিকে ট্যাগটি মুছতে বলে। devআপনার স্থানীয় সংগ্রহস্থলে ট্যাগ উপস্থিতি বা অনুপস্থিতি অপ্রাসঙ্গিক; রেফস্পেক pushসহ এই ধরণের হ'ল খাঁটি-মুছুন push:remoteref
রিমোট ট্যাগ মুছে ফেলার অনুমতি দিতে পারে বা নাও করতে পারে (যুক্ত হওয়া কোনও অতিরিক্ত হুকের উপর নির্ভর করে)। যদি এটি মুছে ফেলার অনুমতি দেয়, তবে ট্যাগটি চলে যাবে এবং দ্বিতীয়ত git push --tags, যখন আপনার কাছে কোনও স্থানীয় devট্যাগ কিছু প্রতিশ্রুতিবদ্ধ বা টীকাযুক্ত ট্যাগ রেপো অবজেক্টের দিকে নির্দেশ করে, আপনার নতুন devট্যাগটি প্রেরণ করুন । রিমোটে, devএখন একটি নতুন তৈরি করা ট্যাগ হবে, তাই রিমোট সম্ভবত ধাক্কা দিতে দেবে (আবার এটি কোনও অতিরিক্ত হুক যুক্ত করা উপর নির্ভর করে)।
বল-ধাক্কা সহজ। আপনি যদি ট্যাগ ব্যতীত অন্য কিছু আপডেট না করার বিষয়ে নিশ্চিত হতে চান git pushতবে কেবলমাত্র সেই একটি রেসপেককে পুশ করতে বলুন:
git push --force origin refs/tags/dev:refs/tags/dev
(দ্রষ্টব্য: আপনি --tagsযদি কেবল একটি ট্যাগ রেফ-স্পিকে স্পষ্টভাবে চাপ দিচ্ছেন তবে আপনার প্রয়োজন নেই )।
1 অবশ্যই, এই অন্তর্নির্মিত হুকের কারণটি হ'ল একই দূরবর্তী-রেপোর অন্যান্য ব্যবহারকারীরা যে আচরণটি প্রত্যাশা করছেন তা কার্যকর করতে সহায়তা করে: যে শাখাগুলি পুনরায় হয় না এবং ট্যাগগুলি সরানো হয় না। যদি আপনি জোর করে ধাক্কা দেন, আপনি অন্য ব্যবহারকারীদের জানিয়ে দিন যে আপনি এটি করছেন তা যাতে তারা এটির জন্য সংশোধন করতে পারে। নোট করুন যে "ট্যাগগুলি মোটেও সরবে না" নতুনভাবে গিট 1.8.2 দ্বারা প্রয়োগ করা হয়েছে; পূর্ববর্তী সংস্করণগুলি কমিট গ্রাফটিতে ট্যাগটিকে "এগিয়ে যাওয়ার" অনুমতি দেয়, অনেকটা শাখার নামের মতো। দেখুন Git 1.8.2 রিলিজ নোট ।
2 আপনি যদি রিমোটটিতে লগইন করতে পারেন তবে এটি তুচ্ছ। কেবল সেখানে গিট সংগ্রহস্থলে যান এবং চালান git tag -d dev। মনে রাখবেন যে কোনও উপায়ে the রিমোটের ট্যাগটি মুছে ফেলা, বা git pushএটি মুছতে ব্যবহার করে — এমন একটি সময়কালের সময় হয় যখন যে কেউ রিমোটটিতে অ্যাক্সেস করে তা দেখতে পাবে যে devট্যাগটি অনুপস্থিত। ( তাদের যদি ইতিমধ্যে এটি থাকে তবে তাদের নিজস্ব পুরানো ট্যাগটি অবিরত থাকবে এবং আপনি নতুনটি চাপ দেওয়ার আগে তারা তাদের পুরাতন ট্যাগটিকে আবার ব্যাক আপ করতে পারেন))