আমি কীভাবে গিটে একটি বিদ্যমান ট্যাগ বার্তা সম্পাদনা করব?


225

আমাদের গিট সংগ্রহস্থলগুলিতে বেশ কয়েকটি এনোটোটেড ট্যাগ রয়েছে। পুরানো ট্যাগগুলিতে বোগাস বার্তা রয়েছে যা আমরা আমাদের নতুন স্টাইলে থাকতে আপডেট করতে চাই।

% git tag -n1
v1.0 message
v1.1 message
v1.2 message
v2.0 Version 2.0 built on 15 October 2011.

এই উদাহরণে, আমরা v1.x বার্তাগুলি v2.0 বার্তার মতো দেখতে চাই। কেউ জানেন কীভাবে আমরা এটি করব?


2
দ্রষ্টব্য: গিট 2.17 (Q2 2018) এর সাথে একটি সরল git tag -m "A message" --edit v1.0যথেষ্ট। দেখুন নিচের আমার উত্তর
VonC


@ ভনসি এটি fatal: tag 'v6.6.2' already existsব্যবহার করে ব্যবহার করে প্রাপ্ত হয়েছে 2.17.0
জোশ হাবদাস

1
আপনি সর্বদা আগের ট্যাগটি মুছতে এবং আবার এটি করতে পারেন।
রোডরুনার

উত্তর:


264

git tag <tag name> <tag name>^{} -f -m "<new message>"

এটি একই নামের সাথে একটি নতুন ট্যাগ তৈরি করবে (মূল ওভাররাইট করে)।


7
এটি কি মূল ট্যাগের তারিখ বজায় রাখে?
জেমস এম গ্রিন

16
আমার নিজের মন্তব্য প্রশ্নের উত্তর: হ্যাঁ, এটা নেই তারিখ পরিবর্তন করুন। :(
জেমস এম গ্রিন

10
"ব্যাকডেটিং ট্যাগস অন" বিভাগটি দেখুন git tag --help
dahlbyk

6
এটিও লক্ষ করা উচিত যে আপনি একাধিক বার্তাও যুক্ত করতে পারেন (তারা একটি নতুন লাইনের দ্বারা পৃথক হয়ে যায় - গিটহাবের উপর)git tag <tag name> <tag name> -f -m "<new message>" -m "<new message>" -m "<new message>"
ব্লেয়ার ম্যাকমিলান

5
নীচের আমার উত্তর এ @ChrisMorley সৌন্দর্য stackoverflow.com/a/23532519/603949 - সংক্ষিপ্ত, ব্যবহারে <tag name>^{}যখন আপনি প্রতিস্থাপন করতে চানold tag
Sungam

87

একটি জটিল বার্তা আপডেট করতে, কেবল এর সাথে টীকাযুক্ত ট্যাগ বিকল্প -aবা এর সাথে স্বাক্ষরিত ট্যাগ বিকল্পটি উল্লেখ করুন -s:

git tag <tag name> <tag name>^{} -f -a

এটি আপনার পুরানো ট্যাগ বার্তার সামগ্রী সহ একটি সম্পাদক খুলবে ।


39

git tag <tag name> <tag name>^{} -f -a

এটি একটি উন্নতি: এটি ছাড়াই ^{}কোনও নতুন ট্যাগ অবজেক্ট তৈরি হবে যা পুরাতন ট্যাগ অবজেক্টকে রেফার করে, যেখানে উভয়েরই একই ট্যাগের নাম থাকবে।

<tag name>^{} প্রথম কমিট হ্যাশ না পাওয়া পর্যন্ত ট্যাগ / রেফারেন্সটি সমাধান করবে।


4
@ ব্রেন্টফৌস্ট, কেবল তখনই কাজ করে যখন আপনার মাথা ট্যাগযুক্ত প্রতিশ্রুতিতে থাকে usage: git tag [-a|-s|-u <key-id>] [-f] [-m <msg>|-F <file>] <tagname> [<head>]
সুনগাম

33

টি এল; ডিআর

আপনি আপনার ট্যাগ মুছে ফেলা এবং তারিখ এবং লেখককে ফাঁকি দেওয়ার সময় এটি পুনরায় তৈরি করে এটি করতে পারেন:

> git tag -d <tag-name>
> [GIT_COMMITTER_DATE=<original-commit-date>] \
> [GIT_AUTHOR_NAME=<original-author-name>] \
> git tag <tag-name> [commit]

পুরো বিবরণ:

সুনগ্রামের উত্তরে বিল্ডিং (মূলত একটি সম্পাদনা হিসাবে প্রস্তাবিত):

1. গৃহীত উত্তর

এটি অ্যান্ডি এবং এরিক হু এর উত্তরগুলির চেয়ে উন্নতি । তাদের উত্তরগুলি একটি নতুন ট্যাগ অবজেক্ট তৈরি করবে যা পুরাতন ট্যাগ অবজেক্টের উল্লেখ করে এবং উভয়েরই একই নাম থাকবে।

এটি চিত্রিত করার জন্য, নিম্নলিখিতগুলি বিবেচনা করুন:

> git tag tag1 tag1 -f -a  # accepted answer
> git rev-list --objects -g --no-walk --all
[ example output: ]
6bdcc347fca041a5138f89fdf5276b3ebf9095d5
260ab7928d986472895b8c55e54569b3f3cb9517 tag1
a5797673f610914a45ef7ac051e3ee831a6e7c25 tag1
f22d6308c3cd330a3b0d86b9bf05562faf6b6f17

> git show tag1
tag tag1
Tagger: [tagger]
Date:   [date of updated tag]
[Updated description]

tag tag1
Tagger: [tagger]
Date:   [date of original tag]
[Original description]

[tagged commit details]

2. সুনগ্রামের উন্নতি

<tag name>^{}দ্বিতীয় আর্গুমেন্ট হিসাবে ব্যবহার করে git tagপরিবর্তে একই নামের সমস্ত পূর্ববর্তী ট্যাগ মুছে ফেলা হবে।

পূর্ববর্তী টার্মিনাল অধিবেশনটির ধারাবাহিকতা বিবেচনা করুন:

> git tag tag1 tag1^{} -f -a  # suggested improvement
> git rev-list --objects -g --no-walk --all
[ example output: ]
6bdcc347fca041a5138f89fdf5276b3ebf9095d5
75f02acacfd7d91d55b5bcfdfb1f00aebeed15e3 tag1
f22d6308c3cd330a3b0d86b9bf05562faf6b6f17 

> git show tag1
tag tag1
Tagger: [tagger]
Date:   [date of updated tag]
[Updated description]

[tagged commit details]

3. তারিখটি সংরক্ষণ করুন

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

> GIT_COMMITTER_DATE="$(git show tag1 |                              # get info about the tag cascade including the date original of the original tag
> awk '{
>     if ($1 == "Date:") {
>         print substr($0, index($0,$3))
>     }
> }' |                                                               # extract all the dates from the info
> tail -2 | head -1)"                                               `# get the second to last date, as the last one is the commit date` \
> git tag tag1 tag1^{} -a -f                                         # finally, update the tag message, but save the date of the old one
>
> git rev-list --objects -g --no-walk --all
6bdcc347fca041a5138f89fdf5276b3ebf9095d5
e18c178f2a548b37799b100ab90ca785af1fede0 tag1
f22d6308c3cd330a3b0d86b9bf05562faf6b6f17
> git show tag1
tag tag1
Tagger: [tagger]
Date:   [date of original tag]
[Updated description]

[tagged commit details]

তথ্যসূত্র:

4. DIY

ট্যাগগুলি আপডেট করার বিকল্প হিসাবে, আপনি কেবল সেগুলি মুছতে পারেন এবং সেগুলি আবার তৈরি করতে পারেন। এটি আপডেট হিসাবে দেখা যাচ্ছে যে কেবল একটি নতুন ট্যাগ যুক্ত হয়েছে এবং এটি পুরানোটির দিকে ইঙ্গিত করে, বা বিকল্পভাবে, কেবল স্পষ্টভাবে পুরানোটিকে মুছে দেয় এবং যেভাবেই হোক একই প্রতিশ্রুতিতে নির্দেশ করার জন্য একটি নতুন তৈরি করে।

আপনি জারি করে এটি অর্জন করতে পারেন:

> git tag -d <tag-name>
> [GIT_COMMITTER_DATE=<original-commit-date>] \
> [GIT_AUTHOR_NAME=<original-author-name>] \
> git tag <tag-name> [commit]

এখানে [optional]একটি fieldচ্ছিক ক্ষেত্র রয়েছে; <required>একটি প্রয়োজনীয় ক্ষেত্র। অবশ্যই আপনি git tagযে কমান্ডটি সাধারণত চালাতে চান তার পরে কোনও পতাকা যুক্ত করতে পারেন ।


3
"তাদের উত্তরগুলি একটি নতুন ট্যাগ অবজেক্ট তৈরি করবে" নির্দেশ করার জন্য ধন্যবাদ!
সিডব্লিউএসইউ

আন্ড্রেয়াস সোয়াব উদ্ধৃত : The tagger is controlled by the committer info. (...) GIT_COMMITTER_{NAME,EMAIL}. A tagger isn't really an author.
ইভান ভুইসিকা

11

অ্যান্ডির সমাধান

git tag <tag-name> <tag-name> -f -a

হয় ভুল । এর পরে, সাথে

git show

কমান্ড, আমরা একই নামের স্ট্যাক ট্যাগ দেখতে পাবেন।

এটি একই ট্যাগ নাম এবং কমিটের সময় নতুন বার্তা সহ একটি নতুন ট্যাগ যুক্ত করে <tag-name>। তবে এটি পুরানো ট্যাগ সরিয়ে দেয় না। এটি এই আদেশের একটি বিশেষ ক্ষেত্রে:

git tag [<commit> | <old-tag>] <tag-name>

তবে ঠিক <old-tag>একই রকম <tag-name>


সঠিক সমাধানটি সহজ, কেবল আপডেট ট্যাগ ঠিক আছে।

git tag <tag-name> -f -a

মনে রাখবেন, এখানে কেবল একটিই

যদি আমরা পরিবর্তন ট্যাগ চাই, যা না হয় তবে HEADআমাদের একটি অতিরিক্ত <commit>যুক্তি প্রয়োজন ।

git tag <commit> <tag-name> -f -a

হ্যাঁ! তুমি ঠিক বলছো. এটি নির্দেশ করার জন্য ধন্যবাদ। ট্যাগটি কয়েকবার টিকিয়ে দেওয়া পুনরায় লেখার পরে, আমি আমার ট্যাগটি চেক করেছিলাম git show <tag>এবং আমি আগের সমস্ত সংস্করণগুলি দেখতে পাচ্ছি।
মানোয়েল ভিলেলা

সমস্যাটি হ'ল: যদি আমার এমন কিছু ট্যাগ আপডেট করতে হয় যা HEADঅতিরিক্ত না করে , <commit>খোলা ট্যাগটি খালি থাকে। আমি পুরানো ট্যাগটি সম্পাদনা করার প্রত্যাশা করেছি। উপায় আছে?
মানোয়েল ভিলালা

দয়া করে মনে রাখবেন যে আপনি উত্তর দেওয়ার পরে অ্যান্ডির সমাধান আপডেট হয়েছে। আপনার উত্তরটি ঠিক করা হয়েছে এমন বার্তা দিয়ে শুরু করে খুব ভাল লাগবে? আপনার কমান্ডের git tag <commit> <tag-name> -f -a<কমিট> এবং <ট্যাগ: নামটি বিপরীত হয়েছে এমনটিও হতে পারে? অন্যান্য উত্তর এবং ডক্সের সাথে তুলনা করার সময় এটি এইভাবে দেখায় তবে আমি কোনও বিশেষজ্ঞ নই।
জ্যাকব আকারবুম

7

আমরা v1.x বার্তাগুলি v2.0 বার্তার মতো দেখতে চাই

গিট 2.17 (কিউ 2 2018) এর সাথে একটি নতুন ট্যাগ তৈরির বিকল্প থাকবে git tag <tag name> <tag name> -f -m "<new message>", যেহেতু " git tag" একটি স্পষ্ট " --edit" বিকল্পটি শিখেছে যা " -m" এবং " -F" এর মাধ্যমে প্রদত্ত বার্তাটিকে আরও সম্পাদনা করার অনুমতি দেয়।

দেখুন কমিট 9eed6e4 দ্বারা (06 ফেব্রুয়ারী 2018) নিকোলাস মধ্যে Morey-Chaisemartin ( nmorey)
(দ্বারা একীভূত junio সি Hamano - gitster- মধ্যে কমিট 05d290e , 06 মার্চ 2018)

tag: --editবিকল্প যোগ করুন

একটি --editবিকল্প যুক্ত করুন যা প্রদত্ত বার্তাগুলি সংশোধন করার অনুমতি দেয় -mবা -Fএকইভাবে git commit --editকরে।


4
আপনি দয়া --editকরে ওপিকে সম্বোধন করে একটি সুসংগত উদাহরণ সরবরাহ করতে পারেন?
জোশ হাবদাস

@ জোশহাবদাস আসলে, আপনাকে -f বিকল্পটি যুক্ত করতে হবে: --edit কেবলমাত্র বার্তাটিকে আরও সম্পাদনা করার অনুমতি দেয়।
ভোনসি

ধন্যবাদ। সুতরাং যদি -fপতাকাটিও যুক্ত করা হয় তবে --editবার্তাটি সম্পাদনা করতে হবে এবং টাইমস্ট্যাম্পটি সংশোধন করবে, তাইনা?
জোশ হাবদাস

@ জোশহাবদাস হ্যাঁ, এটিই ধারণা।
ভনসি

4

আপনাকে -fজোর পতাকা ব্যবহার করে আবার ট্যাগ করতে হবে ।

git tag v1.0 -f -m "actual message"

3
এই সমাধানটি ধরে নিয়েছে যে বর্তমান গিট মাথাটি 1.0 সংস্করণে রয়েছে। এটি সংস্করণ 1.0 এর সাথে সম্পর্কিত সংশোধনকে পরিবর্তন করার সাথে সাথে জিনিসগুলিকে গোলমেলে ফেলতে পারে। অ্যান্ডির সমাধান এই সমস্যাটি এড়ায়।
এরিক হে লেবিগোট

4

উপরের উত্তরগুলি ব্যবহার করে, এটি আমার ওরফে ওয়ান-লাইনার .gitconfig। বিদ্যমান ট্যাগ প্রতিস্থাপন এবং প্রতিশ্রুতি তারিখ সংরক্ষণ করে।

[alias]
    tm = "!sh -c 'f() { export GIT_COMMITTER_DATE=$(git log -1 --format=%ci $0); git tag -f -a $0 $0^{}; }; f '"

উন্নতি?


1
tag-amend = "!sh -c 'f() { name=$(git log -1 --format=%an $0); email=$(git log -1 --format=%ae $0); date=$(git log -1 --format=%ci $0); GIT_AUTHOR_NAME=\"${name}\" GIT_COMMITTER _NAME=\"${name}\" GIT_AUTHOR_EMAIL=\"${email}\" GIT_COMMITTER_EMAIL=\"${email}\" GIT_AUTHOR_DATE=\"${date}\" GIT_COMMITTER_DATE=\"${date}\" git tag -f -a $0 $0^{}; }; f '"
লেখককেও

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

0

তোমার মত একটি GUI ব্যবহার করে থাকেন smartgit মাত্র

  1. নতুন বার্তা সহ একই পজিশনে আবার একই ট্যাগ তৈরি করুন
  2. "বিদ্যমান ট্যাগ ওভাররাইট" নির্বাচন করুন
  3. আপ স্ট্রিম সংগ্রহস্থলে ট্যাগটি জোর-চাপুন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.