วิธีการแท็กการคอมมิชชันเก่าใน Git


949

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

ดังนั้นวิธีเพิ่มแท็กลงในคำสั่งที่เก่ากว่าหรือไม่


ฉันมาที่นี่เพื่อขอความช่วยเหลือในการลบแท็กเก่าในพื้นที่และห่างไกลและในที่สุดก็พบว่ามีประโยชน์นี้บางทีมันอาจช่วยคนอื่นได้เช่นกัน: gist.github.com/mobilemind/7883996
Aleksander Lidtke

1
และอย่าลืมวิธีผลักดันแท็กไปยังพื้นที่เก็บข้อมูลระยะไกลโดยใช้ Git เพราะ Git จะไม่ผลักแท็กโดยไม่ทำอะไรเป็นพิเศษ
jww

คุณสามารถเพิ่มแท็กให้กับการคอมมิชชันเก่าโดยใช้แฮชการกระทำ นี่คือไวยากรณ์สำหรับที่: git tag -a <tagName> -m "แท็กข้อความ" <กระทำแฮช> สำหรับพื้นฐานขั้นสูงถึงขั้นสูงนี่คือการอ้างอิงabhisheksharma.online/git-tags
Abhishek Sharma

คำตอบ:


1510

ตัวอย่าง:

git tag -a v1.2 9fceb02 -m "Message here"

9fceb02ส่วนเริ่มต้นของรหัสการกระทำอยู่ที่ไหน

git push origin v1.2จากนั้นคุณสามารถผลักดันแท็กใช้

คุณสามารถทำได้git logเพื่อแสดงรหัสกระทำทั้งหมดในสาขาปัจจุบันของคุณ

นอกจากนี้ยังมีบทที่ดีเกี่ยวกับการติดแท็กในหนังสือ Pro Git

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


45
คุณสามารถทำสิ่งนี้ได้ในเมนูคลิกขวาใน gitk - สะดวกถ้านั่นคือวิธีที่คุณค้นหา SHA1 อยู่ดี
Cascabel

62
งดเว้น-aและ-m "Message here"ส่วนต่าง ๆ หากคุณไม่ต้องการเพิ่มข้อความ:git tag v1.2 9fceb02
devius

3
คุณสามารถใช้รหัสยืนยันฉบับสมบูรณ์ได้เช่นกัน
j08lue

1
@devius ความแตกต่างระหว่างการใช้และ-a -mดูเหมือนว่าหน้าคนจะบอก-aเป็นนัยเมื่อ-mมีการใช้งาน
John Strood

7
git push --tags origin masterจะผลักดันแท็กทั้งหมดในสาขาท้องถิ่นไปยังระยะไกล ต้องการgit push origin <tag_name>เพียงกดแท็กที่สร้างขึ้น อ้างอิง: stackoverflow.com/a/5195913/452708 , git-scm.com/book/en/v2/Git-Basics-Tagging
Abhijeet

144

เพียงแค่รหัส

# Set the HEAD to the old commit that we want to tag
git checkout 9fceb02

# temporarily set the date to the date of the HEAD commit, and add the tag
GIT_COMMITTER_DATE="$(git show --format=%aD | head -1)" \
git tag -a v1.2 -m"v1.2"

# set HEAD back to whatever you want it to be
git checkout master

รายละเอียด

คำตอบโดย @dkinzer สร้างแท็กที่มีวันที่เป็นวันที่ปัจจุบัน (เมื่อคุณรันgit tagคำสั่ง) ไม่ใช่วันที่คอมมิท ความช่วยเหลือของ Git tagมีส่วน"On Backdating Tags"ซึ่งระบุว่า:

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

หากต้องการกำหนดวันที่ที่ใช้ในวัตถุแท็กในอนาคตให้ตั้งค่าตัวแปรสภาพแวดล้อมGIT_COMMITTER_DATE(ดูการอภิปรายในภายหลังเกี่ยวกับค่าที่เป็นไปได้รูปแบบที่พบบ่อยที่สุดคือ "YYYY-MM-DD HH: MM")

ตัวอย่างเช่น:

$ GIT_COMMITTER_DATE="2006-10-02 10:31" git tag -s v1.0.1

หน้า"วิธีการติดแท็กใน Git"แสดงให้เราเห็นว่าเราสามารถแยกเวลาที่ HEAD กระทำผ่าน:

git show --format=%aD  | head -1
#=> Wed, 12 Feb 2014 12:36:47 -0700

เราสามารถดึงข้อมูลวันที่ที่ระบุไว้ผ่าน:

GIT_COMMITTER_DATE="$(git show 9fceb02 --format=%aD | head -1)" \
git tag -a v1.2 9fceb02 -m "v1.2"

อย่างไรก็ตามแทนที่จะทำซ้ำการกระทำสองครั้งดูเหมือนจะง่ายกว่าเพียงแค่เปลี่ยน HEAD เป็นการกระทำนั้นและใช้งานโดยนัยในทั้งสองคำสั่ง:

git checkout 9fceb02 

GIT_COMMITTER_DATE="$(git show --format=%aD | head -1)" git tag -a v1.2 -m "v1.2"

4
@ColonelPanic ความปรารถนาของคุณคือคำสั่งของฉัน! github.com/lucasrangit/git-custom-commands/blob/master/…
Lucas

หากคุณใช้ Github เพื่อจัดการการเผยแพร่และการดูแลเกี่ยวกับวันที่ที่แสดงในหน้า / แท็กโครงการของคุณให้ตั้งค่า GIT_COMMITTER_DATE เป็นสิ่งสำคัญอย่างยิ่ง!
Lesley

2
@ColonelPanic ฉันให้ upvote สำหรับการเล่นสำนวนและหวังว่าฉันจะให้รหัสที่สองแก่คุณ แต่ดาว GitHub จะต้องทำ
andyhasit

96

วิธีที่ง่ายที่สุดในการทำเช่นนี้คือ:

git tag v1.0.0 f4ba1fc

ด้วยf4ba1fcการเป็นจุดเริ่มต้นของแฮชของการส่งข้อความที่คุณต้องการแท็กและv1.0.0เป็นเวอร์ชันที่คุณต้องการติดแท็ก


ขอบคุณมาก :)
Saleh Enam Shohag

39

ใช้คำสั่ง:

git tag v1.0 ec32d32

โดยที่ v1.0 คือชื่อแท็กและ ec32d32 เป็นคอมมิทที่คุณต้องการแท็ก

เมื่อเสร็จแล้วคุณสามารถผลักดันแท็กโดย:

git push origin --tags

อ้างอิง:

Git (การควบคุมการแก้ไขใหม่): ฉันจะติดแท็กจุดยอมรับก่อนหน้านี้เฉพาะใน GitHub ได้อย่างไร


36

ตกลงคุณสามารถทำได้:

git tag -a <tag> <commit-hash>

ดังนั้นหากคุณต้องการเพิ่มแท็ก: 1.0.2 เพื่อกระทำe50f795เพียงทำ:

git tag -a 1.0.2 e50f795

นอกจากนี้คุณเพิ่มข้อความในตอนท้ายโดยใช้-mสิ่งนี้:

git tag -a 1.0.2 e50f795 -m "my message"

ท้ายที่สุดคุณต้องผลักดันมันไปที่remoteการทำเช่นนั้นเพียงแค่:

git push origin 1.0.2 

หากคุณมีแท็กมากมายที่คุณไม่ต้องการพูดถึงทีละรายการเพียงทำ:

git push origin --tags

เพื่อผลักดันแท็กทั้งหมดเข้าด้วยกัน ...

นอกจากนี้ฉันได้สร้างขั้นตอนในภาพด้านล่างเพื่ออธิบายขั้นตอนเพิ่มเติมให้ชัดเจนยิ่งขึ้น: การสร้างแท็กบนแฮชการคอมมิต

นอกจากนี้คุณยังสามารถ dd แท็กในHubหรือการใช้เครื่องมือเช่นSourceTreeเพื่อหลีกเลี่ยงขั้นตอนก่อนหน้าผมที่เข้าสู่ระบบของฉันBitbucketในกรณีนี้และทำมันออกมาจากที่นั่น

  1. ไปที่สาขาของคุณและค้นหาความมุ่งมั่นที่คุณต้องการเพิ่มแท็กและคลิกที่มัน:

ค้นหาความมุ่งมั่นของคุณใน bitbucket

  1. ในหน้ากระทำด้านขวาค้นหาว่ามีข้อความอยู่ที่ไหนNo tagsและคลิกที่+ไอคอน:

ค้นหาที่ระบุว่าไม่มีแท็ก

  1. ในกล่องชื่อแท็กเพิ่มแท็กของคุณ:

เพิ่มชื่อแท็ก

  1. ตอนนี้คุณจะเห็นว่าแท็กสร้างสำเร็จแล้ว:

ป้อนคำอธิบายรูปภาพที่นี่


11

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

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


6

สร้างขึ้นจากคำตอบของคนอื่น ๆ นี่คือวิธีแก้ปัญหาแบบหนึ่งซับที่กำหนดวันที่แท็กเมื่อมันเกิดขึ้นจริงใช้แท็กหมายเหตุประกอบและไม่ต้องgit checkout:

tag="v0.1.3" commit="8f33a878" bash -c 'GIT_COMMITTER_DATE="$(git show --format=%aD $commit)" git tag -a $tag -m $tag $commit'
git push --tags origin master

โดยที่tagถูกตั้งค่าเป็นสตริงแท็กที่ต้องการและcommitการแฮชการกระทำ


3

คำตอบโดย @Phrogz เป็นสิ่งที่ดี แต่ไม่ได้ทำงานบน Windows ต่อไปนี้เป็นวิธีติดแท็กการส่งมอบเก่ากับวันที่เริ่มต้นการส่งมอบโดยใช้ Powershell:

git checkout 9fceb02
$env:GIT_COMMITTER_DATE = git show --format=%aD | Select -First 1
git tag v1.2
git checkout master
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.