คุณจะเปลี่ยนชื่อแท็ก Git ได้อย่างไร


1219

วันนี้ฉันดูบันทึกของโครงการและรู้ว่าฉันอ้วนขึ้นชื่อแท็กเมื่อไม่นานมานี้ มีวิธีเปลี่ยนชื่อแท็กหรือไม่ Google ไม่มีประโยชน์อะไรเลย

ฉันรู้ว่าฉันสามารถตรวจสอบเวอร์ชันที่ติดแท็กและสร้างแท็กใหม่ได้ฉันก็ลองทำดู แต่ดูเหมือนว่าจะสร้างวัตถุแท็กที่ไม่ถูกต้อง สำหรับหนึ่ง

git tag -l

แสดงรายการที่ไม่เกี่ยวข้องกับแท็กอื่นทั้งหมด ฉันไม่รู้ว่าสำคัญหรือไม่ แต่มันทำให้ฉันเชื่อว่าวัตถุแท็กใหม่นั้นไม่ใช่สิ่งที่ฉันต้องการ ฉันสามารถอยู่กับสิ่งนั้นได้เพราะฉันแค่แคร์ว่าชื่อแท็กตรงกับเอกสาร แต่ฉันอยากจะทำ "ถูกต้อง" โดยสมมติว่ามีวิธีที่ถูกต้องในการทำเช่นนี้


คุณใช้การร้องขอเดียวกันคือถ้าแท็กเก่าถูกใส่คำอธิบายประกอบ / แท็กที่ลงนามแล้วเป็นแท็กใหม่เช่นนี้หรือเป็นแท็กที่มีน้ำหนักเบาหรือไม่
Jakub Narębski

1
ทั้งแท็กเก่าที่ไม่ถูกต้องและแท็กใหม่ที่ต้องการควรมีคำอธิบายประกอบและไม่ได้ลงชื่อ แท็กเก่าถูกสร้างด้วย 'git tag -a bad_tag_name' ดังนั้นฉันต้องการทำบางอย่างตามบรรทัดของ 'git tag -a good_tag_name'
Brandon Fosdick

ฉันควรชี้ให้เห็นว่าฉันยังต้องการให้กระบวนการเปลี่ยนชื่อแท็กเวทมนต์เพื่อรักษาคำอธิบายประกอบจากแท็กที่ถูกเปลี่ยนชื่อ ที่จริงแล้วฉันอยากจะเปลี่ยนเพียงชื่อและไม่มีอะไรอื่น
Brandon Fosdick

7
git log --oneline --decorate --graphมีประโยชน์เมื่อล้างแท็ก
Joel Purra

คุณสามารถเปลี่ยนชื่อแท็กในหนึ่งบรรทัด: ดูคำตอบของฉันด้านล่าง
VonC

คำตอบ:


2038

นี่คือวิธีที่ฉันเปลี่ยนชื่อแท็กoldเป็นnew:

git tag new old
git tag -d old
git push origin :refs/tags/old
git push --tags

โคลอนในคำสั่ง push จะลบแท็กออกจากที่เก็บรีโมต หากคุณไม่ทำเช่นนี้ Git จะสร้างแท็กเก่าบนเครื่องของคุณเมื่อคุณดึง

สุดท้ายตรวจสอบให้แน่ใจว่าผู้ใช้รายอื่นลบแท็กที่ถูกลบออก กรุณาบอกพวกเขา (เพื่อนร่วมงาน) ให้เรียกใช้คำสั่งต่อไปนี้:

git pull --prune --tags

โปรดทราบว่าหากคุณกำลังเปลี่ยนแท็กที่มีคำอธิบายประกอบคุณจะต้องตรวจสอบให้แน่ใจว่าชื่อแท็กใหม่นั้นอ้างอิงถึงการคอมมิชชันพื้นฐานและไม่ใช่ออบเจ็กต์คำอธิบายประกอบแบบเก่าที่คุณกำลังจะลบ ดังนั้นให้ใช้git tag -a new old^{}แทนgit tag new old(นี่เป็นเพราะแท็กที่มีคำอธิบายประกอบเป็นวัตถุในขณะที่แท็กที่มีน้ำหนักเบาไม่ใช่ข้อมูลเพิ่มเติมในคำตอบนี้ )


19
หากแท็กมีคำอธิบายประกอบแท็กใหม่จะไม่มีข้อความของแท็กเก่า แต่เป็นข้อมูลที่เป็นประโยชน์
NickSoft

25
@NickSoft ฉันเพิ่งทำข้างต้นด้วยแท็กคำอธิบายประกอบ ข้อความถูกคัดลอกจากเก่าไปใหม่ใช้ได้ บางทีฉันอาจมีคอมไพล์รุ่นที่ใหม่กว่า?
katyhuff

25
git push origin :refs/tags/oldสามารถทำให้ง่ายขึ้นgit push origin :oldฉันคิดว่า
Jesse Glick

25
ฉันขอแนะนำให้เปลี่ยน "git push --tags" เพื่อให้ชัดเจนยิ่งขึ้นสำหรับแท็กนี้ "git push pushs refs / tags / new" คุณไม่ต้องการดันแท็กอื่นโดยไม่ตั้งใจ
chrish

11
คำเตือน : การใช้git tag new oldจะสร้างแท็กที่ชี้ไปที่แท็กเก่าไม่ใช่การกระทำของแท็กเก่า (ดูทำไมฉันไม่สามารถเช็คเอาต์แท็กของฉันจาก Git GUI ได้ )
Stevoisiak

297

คำถามเดิมเป็นวิธีการเปลี่ยนชื่อแท็กซึ่งเป็นเรื่องง่าย: ครั้งแรกที่สร้างใหม่เป็นชื่อแทนของเก่า: git tag NEW OLDแล้วลบ git tag -d OLDOLD:

ข้อความอ้างอิงเกี่ยวกับ "วิธี Git" และ (ใน) สติอยู่นอกฐานเพราะมันกำลังพูดถึงการรักษาชื่อแท็ก แต่ทำให้มันอ้างถึงสถานะพื้นที่เก็บข้อมูลที่แตกต่างกัน


3
คำตอบข้างต้นเป็นที่นิยมมากกว่าเล็กน้อยเนื่องจากมันรวมถึงgit push originธุรกิจ
Roly

วิธีที่ง่ายที่สุดใช้งานได้ดีในการเปลี่ยนชื่อแท็กรีลีสก่อนหน้านี้ที่สร้างด้วย Gitflow
RousseauAlexandre

5
คำเตือน : การใช้git tag new oldจะสร้างแท็กที่ชี้ไปที่แท็กเก่าไม่ใช่การกระทำของแท็กเก่า (ดูทำไมฉันไม่สามารถเช็คเอาต์แท็กของฉันจาก Git GUI ได้ )
Stevoisiak

118

นอกจากคำตอบอื่น ๆ :

ก่อนอื่นคุณต้องสร้างนามแฝงของชื่อแท็กเก่าโดยชี้ไปที่การส่งต้นฉบับ:

git tag new old^{}

จากนั้นคุณต้องลบไฟล์เก่าในเครื่อง :

git tag -d old

จากนั้นลบแท็กในที่ตั้งระยะไกล:

# Check your remote sources:
git remote -v
# The argument (3rd) is your remote location,
# the one you can see with `git remote`. In this example: `origin`
git push origin :refs/tags/old

ในที่สุดคุณต้องเพิ่มแท็กใหม่ของคุณไปยังสถานที่ห่างไกล จนกว่าคุณจะทำสิ่งนี้แท็กใหม่จะไม่ถูกเพิ่ม:

git push origin --tags

ทำซ้ำสิ่งนี้สำหรับทุก ๆ ที่ที่ห่างไกล

ระวังการเปลี่ยนแปลงแท็ก Git ที่มีต่อผู้บริโภคแพ็คเกจ!


คำเตือน : การใช้git tag new oldจะสร้างแท็กที่ชี้ไปที่แท็กเก่าไม่ใช่การกระทำของแท็กเก่า (ดูทำไมฉันไม่สามารถเช็คเอาต์แท็กของฉันจาก Git GUI ได้ )
Stevoisiak

1
@StevenVascellaro ขอบคุณสำหรับลิงค์ ในครั้งต่อไปโปรดแก้ไขไฟล์ - การตอบรับเป็นความพยายามของชุมชนเช่นกัน ขอบคุณ
ไกเซอร์

ฉันยังไม่ได้ทำการแก้ไขเพราะฉันยังไม่ได้ทดสอบโค้ดสำหรับตัวเอง (หมายเหตุวันที่ส่งในคำถามที่เชื่อมโยง)
Stevoisiak

เมื่อเราทำgit tag new old^{}แล้วเราไม่ต้องการgit tag new_tag_name old_tag_name(ขั้นตอนแรก)
หมายเลข 945

28

หากมีการเผยแพร่คุณจะไม่สามารถลบได้ (โดยไม่เสี่ยงกับการถูกทิ้งไว้นานและขนซึ่งก็คือ) วิธี 'Git' คือการทำ:

สิ่งที่มีสติ เพียงยอมรับว่าคุณเมาแล้วใช้ชื่ออื่น มีคนอื่นเห็นชื่อแท็กหนึ่งชื่อแล้วและถ้าคุณใช้ชื่อเดิมคุณอาจอยู่ในสถานการณ์ที่คนสองคนมี "เวอร์ชัน X" แต่จริง ๆ แล้วพวกเขามี "X" ที่แตกต่างกัน ดังนั้นเพียงแค่เรียกมันว่า "X.1" และทำมันให้เสร็จ

อีกวิธีหนึ่งคือ

สิ่งที่บ้า คุณต้องการเรียกรุ่น "X" ใหม่ด้วยเช่นกันถึงแม้ว่าคนอื่นจะเคยเห็นรุ่นเก่าแล้ว ดังนั้นให้ใช้ git-tag -f อีกครั้งราวกับว่าคุณยังไม่ได้เผยแพร่สิ่งเก่า

มันบ้ามากเพราะ:

Git ไม่ได้ (และไม่ควร) เปลี่ยนแท็กหลังผู้ใช้งานด้านหลัง ดังนั้นหากใครบางคนมีแท็กเก่าอยู่แล้วการทำ git-pull บนต้นไม้ของคุณไม่ควรทำให้พวกมันเขียนทับเก่า

หากใครบางคนได้รับแท็กปล่อยจากคุณคุณจะไม่สามารถเปลี่ยนแท็กให้กับพวกเขาได้ด้วยการอัปเดตแท็กของคุณเอง นี่เป็นปัญหาด้านความปลอดภัยที่ยิ่งใหญ่ซึ่งผู้คนต้องเชื่อถือชื่อแท็กได้ หากคุณต้องการทำสิ่งที่บ้าคุณต้องยอมรับมันและบอกคนอื่นว่าคุณทำผิดพลาด

ความอนุเคราะห์จากหน้ามนุษย์ทั้งหมด


6
หรือคุณสามารถติดแท็ก (ด้วยชื่อที่ถูกต้อง) แท็กที่มีชื่อไม่ถูกต้องนี้
Jakub Narębski

6
ขอบคุณฉันผ่านหน้าเว็บนี้ไปแล้วล้านครั้งแล้ว โชคดีที่แท็กที่ไม่ดียังไม่ได้เผยแพร่ที่ไหนเลย แม้ว่ามันจะเป็นโครงการภายในและฉันเป็นนักพัฒนาเพียงคนเดียว (ในขณะนี้) ฉันคิดว่าฉันค่อนข้างปลอดภัยจากทั้งตัวละครและตัวน้อย แต่ถ้าฉันสามารถเอา repo มาจับคู่กับเอกสารได้
Brandon Fosdick

บางครั้งฉันใช้แท็กสำหรับการอ้างอิงส่วนตัวของฉันเอง เช่น. อาจเป็นแท็ก 'ok_jb' ฉันใช้สิ่งนี้เพราะบางคนที่ฉันทำงานด้วยไม่สามารถสร้างสำหรับแพลตฟอร์มของฉันได้ดังนั้นบางครั้งจะมีข้อผิดพลาดในการสร้าง ฉันสามารถรับเวอร์ชันที่สร้างได้อย่างรวดเร็วโดยการตรวจสอบแท็กนั้น เมื่อแหล่งที่มาสร้างใหม่ฉันเพิ่งย้ายแท็กหรือเปลี่ยนชื่อเป็นสร้าง ## โดยที่ ## เป็นตัวเลข (ขึ้นอยู่กับโครงการ) ฉันอาจเน้นเมื่อมีการแนะนำคุณสมบัติพิเศษด้วยการเพิ่มแท็ก

7
คำตอบไม่ดี "อย่าทำ" ไม่ใช่คำตอบที่ถูกต้องสำหรับ "ฉันจะทำอย่างไร" ผู้ใช้ไม่ได้ถามว่าคุณคิดว่าควรทำเช่นนั้นหรือไม่ หากมีคนถามว่า "ฉันจะตัดมือของฉันได้อย่างไร" ให้บอกเขาว่ามันเสร็จแล้วหรือปล่อยให้เขาอยู่คนเดียว แต่เขาไม่ต้องการใครบอกเขาว่าการตัดมืออาจไม่ใช่ความคิดที่ยอดเยี่ยม และคุณสามารถทำได้ คุณสามารถเพิ่มแท็กใหม่และลบแท็กเก่าซึ่งเป็นไปได้ทางเทคนิคแม้ในที่เก็บระยะไกล
Mecki

5
ดูเหมือนว่าจะตอบคำถาม "ฉันจะทำให้แท็กที่มีอยู่ชี้ไปที่การแก้ไขอื่นได้อย่างไร" แทนที่จะเป็นคำถามของ OP "ฉันจะเปลี่ยนชื่อแท็กได้อย่างไร" ยังไม่ชัดเจนว่าการบอกคนที่คุณทำผิดพลาดนั้นจะแก้ปัญหาได้อย่างไร (แม้ว่าโดยทั่วไปจะเป็นความคิดที่ดี)
LarsH

25

หน้าวิกินี้มีซับในที่น่าสนใจซึ่งเตือนเราว่าเราสามารถผลักดันผู้อ้างอิงหลายคน :

git push origin <refs/tags/old-tag>:<refs/tags/new-tag> :<refs/tags/old-tag> && git tag -d <old-tag>

และขอร้องให้คนอื่นทำ git pull --prune --tags

ดังนั้นความคิดคือการผลักดัน:

  • <new-tag>สำหรับทุกการกระทำที่อ้างอิงโดย<old-tag>:<refs/tags/old-tag>:<refs/tags/new-tag> ,
  • การลบ<old-tag> ::<refs/tags/old-tag>

ดูตัวอย่าง " เปลี่ยนแบบแผนการตั้งชื่อของแท็กภายในที่เก็บ git? "


สิ่งนี้จะเก็บคำอธิบายประกอบไว้หรือไม่
Brandon Fosdick

1
ระวังว่านี่ทำให้ชื่อแท็กดั้งเดิมอยู่ในคำอธิบายประกอบสำหรับแท็กที่มีคำอธิบายประกอบ !! ฉันไม่แน่ใจว่าจริง ๆ แล้วมันหมายถึงอะไรอย่างน้อยในรุ่นปัจจุบัน
gbr

@gbr คุณสามารถแก้ไขคำตอบด้วยตัวอย่างที่แสดงว่า "ชื่อแท็กดั้งเดิม" ค้างไว้ในคำอธิบายประกอบได้หรือไม่
VonC

1
@VonC ฉันไม่แน่ใจว่าฉันเข้าใจสิ่งที่คุณถาม; บางทีฉันก็ไม่ชัดเจน: วัตถุคำอธิบายประกอบมีแท็กฟิลด์ที่ตั้งให้เป็นชื่อของแท็กที่คุณสามารถเห็นได้ด้วยgit cat-file -p <tag>; ด้วยวิธีการของคุณในระบบของฉันฉันจะได้รับการอ้างอิงแท็ก 'เปลี่ยนชื่อ' <new-tag>แต่ฟิลด์แท็กยังคง<old-tag>อยู่
gbr

3
@gbr ไม่ใช่สิ่งที่ OP ต้องการหรือไม่ เขากล่าวว่า "ฉันควรชี้ให้เห็นว่าฉันยังต้องการให้กระบวนการเปลี่ยนชื่อแท็กเวทมนต์นี้เพื่อรักษาคำอธิบายประกอบจากแท็กที่ถูกเปลี่ยนชื่อจริง ๆ แล้วฉันต้องการเปลี่ยนชื่อจริง ๆ เท่านั้น" ( stackoverflow.com/questions/1028649/ วิธีเปลี่ยนชื่อคุณ
-a

25

ในฐานะที่เป็นส่วนเสริมของคำตอบอื่น ๆ ฉันได้เพิ่มนามแฝงเพื่อทำทุกอย่างในขั้นตอนเดียวด้วยความรู้สึกคำสั่งย้ายที่คุ้นเคยมากขึ้น อาร์กิวเมนต์ 1 เป็นชื่อแท็กเก่าอาร์กิวเมนต์ 2 เป็นชื่อแท็กใหม่

[alias]
    renameTag = "!sh -c 'set -e;git tag $2 $1; git tag -d $1;git push origin :refs/tags/$1;git push --tags' -"

การใช้งาน:

git renametag old new

เรื่องนี้ไม่ได้ทำงานสำหรับฉันเพราะมันล้มเหลวใน!sh(คำถามที่ได้รับเกี่ยวกับการใช้ Windows Git) renametag = "!f() { git tag $2 $1; git tag -d $1; git push origin :refs/tags/$1; git push --tags; }; f"แต่หลังจากการปรับปรุงรูปแบบต่อไปนี้ก็ทำงาน:
Sunny Patel

10

ทำตามวิธีการ 3 ขั้นตอนสำหรับแท็กหนึ่งหรือสองสามจำนวน

ขั้นตอนที่ 1: ระบุ commit / object ID ของการกระทำแท็กปัจจุบันที่ชี้ไป

     command: git rev-parse <tag name>
     example: git rev-parse v0.1.0-Demo
     example output: db57b63b77a6bae3e725cbb9025d65fa1eabcde

ขั้นตอนที่ 2: ลบแท็กออกจากพื้นที่เก็บข้อมูล

     command: git tag -d <tag name>
     example: git tag -d v0.1.0-Demo
     example output: Deleted tag 'v0.1.0-Demo' (was abcde)

ขั้นตอนที่ 3: สร้างแท็กใหม่ที่ชี้ไปยังรหัสยืนยันเดียวกันกับแท็กเก่าที่ชี้ไป

     command: git tag -a <tag name>  -m "appropriate message" <commit id>
     example: git tag -a v0.1.0-full  -m "renamed from v0.1.0-Demo" db57b63b77a6bae3e725cbb9025d65fa1eabcde
     example output: Nothing or basically <No error>

เมื่อ git โลคัลพร้อมกับการเปลี่ยนชื่อแท็กการเปลี่ยนแปลงเหล่านี้สามารถถูกผลักกลับไปที่จุดเริ่มต้นเพื่อให้ผู้อื่นสามารถรับสิ่งเหล่านี้


ไม่มีขั้นตอนในการผลักแท็กที่ถูกลบกลับไป: git push origin :refs/tags/v0.1.0-Demoและเพื่อดันแท็กกลับ (พร้อมสิ่งอื่น ๆ ที่ค้างอยู่)git push --tags
Star Wolf

6

สำหรับการผจญภัยมันสามารถทำได้ในหนึ่งคำสั่ง:

mv .git/refs/tags/OLD .git/refs/tags/NEW

7
วิธีนี้จะไม่ทำงานหากผู้อ้างอิงของคุณถูกบรรจุเช่นถ้าคุณgit gcเพิ่งเรียกใช้
for

2
สิ่งนี้จะมีผลกับธุรกรรมซื้อคืนในท้องถิ่นเท่านั้น หากคุณมีการกำหนดค่าจากระยะไกลฉันไม่แน่ใจว่าสิ่งใดที่ทำให้เกิดผลเสีย ฉันไม่แนะนำวิธีการนี้
therealklanni

1
โปรดทราบว่าสำหรับแท็กที่มีคำอธิบายประกอบสิ่งนี้อาจจะเป็นปัญหาได้มากขึ้นเนื่องจากหยด 'คำอธิบายประกอบ' ในหมู่สิ่งอื่น ๆ มีชื่อเดิมของแท็ก จริง ๆ แล้วฉันไม่แน่ใจว่ามีอะไรใช้หรือเปล่า (หวังว่าอย่างน้อยก็จะใช้การยืนยันแท็ก) แต่ฉันก็ไม่ได้มีโอกาส
gbr

1
@gbr สิ่งนี้ใช้ได้ดี (แน่นอนว่าต้องคำนึงถึงหมายเหตุโดย @forivall ด้วย) เคล็ดลับนี้มีการใช้อย่างหนาแน่นสำหรับทุกวัยในระบบสร้าง ALT Sisyphus ดูที่วิธีการแหล่งที่มาสำหรับแพคเกจจะถูกเก็บไว้เช่น: git.altlinux.org/gears/g/gear.git แท็กที่อ่านได้เช่น2.0.7-alt1เป็นแท็กที่ลงนามแล้วซึ่งส่งโดยผู้ดูแลระบบระบบบิลด์ แท็กเข้ารหัส gb-sisyphus-task164472.200ถูกวางไว้ที่นั่นโดยระบบบิลด์เพื่อติดตาม ID ภารกิจที่สร้างขึ้นและเผยแพร่ pkg จากแหล่งนี้ พวกเขาเป็นสำเนาที่โง่ ( cp) โดยไม่มีการแตะที่ข้อความของผู้ดูแล
imz - Ivan Zakharyaschev

@ imz - IvanZakharyaschev รู้ดีฉันจะไม่ไว้ใจมากเกินไปแม้ว่ามันจะไม่ก่อให้เกิดปัญหาในอนาคตด้วยผลิตภัณฑ์บางอย่าง; ไม่มีสเปคที่แท้จริงของรูปแบบที่เก็บคอมไพล์และการโต้ตอบที่คาดหวังดังนั้นเมื่อเป็นไปได้ฉันจะพยายามทำสิ่งต่าง ๆ อย่างหมดจดด้วยวิธีที่น่าประหลาดใจอย่างน้อยที่สุด
gbr

3

ไม่ว่าปัญหาที่เกี่ยวข้องกับการผลักแท็กและการเปลี่ยนชื่อแท็กที่ถูกผลักไปแล้วในกรณีที่แท็กเพื่อเปลี่ยนชื่อนั้นเป็นบันทึกย่อคุณสามารถคัดลอกได้ด้วยบรรทัดคำสั่งบรรทัดเดียวต่อไปนี้:

git tag -a -m "`git cat-file -p old_tag | tail -n +6`" new_tag old_tag^{}

จากนั้นคุณเพียงแค่ลบแท็กเก่า:

git tag -d old_tag

ฉันพบบรรทัดคำสั่งนี้ต้องขอบคุณคำตอบสองข้อต่อไปนี้:

แก้ไข:
มีปัญหาที่พบตรงกันโดยอัตโนมัติโดยใช้แท็กการตั้งค่าfetch.pruneTags=true(ตามที่อธิบายไว้ในhttps://stackoverflow.com/a/49215190/7009806 ) ผมเองขอแนะนำให้ครั้งแรกคัดลอกแท็กใหม่บนเซิร์ฟเวอร์และแล้วลบคนเก่า วิธีการที่แท็กใหม่ไม่ได้รับการลบสุ่มเมื่อลบแท็กเก่าและการประสานของแท็กที่ต้องการลบแท็กใหม่ที่ยังไม่บนเซิร์ฟเวอร์ ตัวอย่างเช่นเราได้รับ:

git tag -a -m "`git cat-file -p old_tag | tail -n +6`" new_tag old_tag^{}
git push --tags
git tag -d old_tag
git push origin :refs/tags/old_tag

3

นอกจากนี้คุณยังสามารถเปลี่ยนชื่อแท็กระยะไกลโดยไม่ต้องตรวจสอบพวกเขาโดยทำซ้ำแท็ก / สาขาเก่าเป็นชื่อใหม่และลบอันเก่าออกในgit pushคำสั่งเดียว

รีโมทเปลี่ยนชื่อแท็ก / สาขาที่ห่างไกล→แปลงแท็ก: (Notice: :refs/tags/)

git push <remote_name> <old_branch_or_tag>:refs/tags/<new_tag> :<old_branch_or_tag>

เปลี่ยนชื่อสาขาที่ห่างไกล / แท็กระยะไกล→แปลงสาขา: (Notice: :refs/heads/)

git push <remote_name> <old_branch_or_tag>:refs/heads/<new_branch> :<old_branch_or_tag>

เอาต์พุตเปลี่ยนชื่อแท็กระยะไกล:

D:\git.repo>git push gitlab App%2012.1%20v12.1.0.23:refs/tags/App_12.1_v12.1.0.23 :App%2012.1%20v12.1.0.23

Total 0 (delta 0), reused 0 (delta 0)
To https://gitlab.server/project/repository.git
 - [deleted]               App%2012.1%20v12.1.0.23
 * [new tag]               App%2012.1%20v12.1.0.23 -> App_12.1_v12.1.0.23
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.