programing

Git에서 기존 태그 메시지를 편집하려면 어떻게 해야 합니까?

closeapi 2023. 5. 26. 20:57
반응형

Git에서 기존 태그 메시지를 편집하려면 어떻게 해야 합니까?

Git 저장소에 주석이 달린 태그가 몇 개 있습니다.오래된 태그에는 새로운 스타일로 업데이트하고자 하는 가짜 메시지가 있습니다.

% 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 메시지처럼 표시하려고 합니다.어떻게 하면 좋을까요?

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

이렇게 하면 원본을 덮어써 동일한 이름의 새 태그가 만들어집니다.

복잡한 메시지를 업데이트하려면 주석이 달린 태그 옵션을 지정하십시오.-a또는 서명된 태그 옵션-s:

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

이전 태그 메시지의 내용이 포함된 편집기가 열립니다.

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

이것은 개선 사항입니다: 사용하지 않음^{}이전 태그 개체를 참조하는 새 태그 개체를 만듭니다. 여기서 두 개체의 태그 이름은 동일합니다.

<tag name>^{}첫 번째 커밋 해시를 찾을 때까지 태그/참조를 확인합니다.

TL;DR

날짜 및 작성자를 스푸핑하는 동안 태그를 삭제하고 다시 생성하여 이 작업을 수행할 수 있습니다.

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

전체 내용:

선그램의 답변을 기반으로 구축(원래는 편집으로 제안됨):

합격답변

이것은 Andy와 Eric Hu의 답변보다 개선된 것입니다.이들의 응답에 따라 이전 태그 개체를 참조하는 새 태그 개체가 생성되고 둘 다 같은 이름을 갖게 됩니다.

이를 설명하기 위해 다음 사항을 고려합니다.

> 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]

선그램의 개선점

사용.<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]

날짜 저장

마지막으로 원래 태그의 날짜를 업데이트된 태그의 날짜로 유지하려면 약간의 어색한(또는 유사한) 마법을 사용하거나 원하는 날짜를 대신 붙여넣습니다.다음은 두 번째 예를 대체하는 것입니다(그렇지 않으면 재지정으로 인해 원래 날짜가 손실됩니다).

> 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]

참조:

DIY

태그를 업데이트하는 대신 태그를 삭제하고 다시 만들 수 있습니다.업데이트는 새 태그를 추가하여 이전 태그를 가리키게 하거나, 아니면 이전 태그를 암시적으로 삭제하고 새 태그를 만들어 동일한 커밋을 가리킵니다.

다음을 발행하여 이를 달성할 수 있습니다.

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

여기서[optional]필드입니다.<required>는 필수 필드입니다.물론, 다음에 플래그를 추가할 수 있습니다.git tag일반적으로 사용할 수 있는 명령입니다.

@Andy의 2016년 오리지널 솔루션(결국 업데이트됨)

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

v1.x 메시지를 v2.0 메시지처럼 만들고 싶습니다.

Git 2.17(2018년 2분기)을 사용하여 새로운 태그를 만드는 대안이 있을 것입니다.git tag <tag name> <tag name> -f -m "<new message>"""1977년 git tag를 통해 제공되는 메시지를 허용하는 --edit명시적인 " 옵션을 배웠습니다.-m그리고 "-F추가로 편집할 수 있습니다.

니콜라스 모리-차이세마틴()nmorey의 커밋 9eed6e4(2018년 2월 6일)를 참조하십시오.
(Junio C Hamano에 의해 합병됨 -- -- commit 05d290e, 2018년 3월 6일)

tag을 더하다--edit

추가--edit에서 제공하는 메시지를 수정할 수 입니다.-m또는-F 방법으로, 은방법같방.git commit --edit 그렇습니다.

▁the▁▁using,를 사용하여 다시 태그를 해야 할 입니다.-f강제 깃발

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

위의 답변(특히 성암의 답변)을 사용하여, 이것은 저의 별칭 원라이너입니다..gitconfig기존 태그를 대체하고 커밋 날짜를 유지합니다.

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

개선사항?

만약 당신이 smartgit 같은 GUI를 사용한다면 그냥.

  1. 새 메시지와 같은 위치에 동일한 태그를 다시 만듭니다.
  2. 기존 태그 지정을 선택합니다.
  3. 태그를 업스트림 리포지토리에 강제 적용

다음은 기존 답변(특히 stanm)을 기반으로 하는 일련의 별칭입니다.

# Edit an existing tag, preserving the date and tagger
tag-amend = "!f() { : git tag ;\
    eval \"`git x-tag-environment-string`\";\
    git tag -a -f --edit -m \"$(git x-tag-message \"$1\")\" \"$1\" \"$1^{}\" \"${@:2}\";\
}; f"

# Rewrite an existing tag, preserving the date and tagger (accepts -m and -F)
tag-rewrite = "!f() { : git tag ;\
    eval \"`git x-tag-environment-string`\";\
    git tag -a -f \"$1\" \"$1^{}\" \"${@:2}\";\
}; f"

# Helpers to Extract the Tag Data
x-tag-data = tag -l --format
x-tag-message = x-tag-data '%(contents)'
x-tagger-name = x-tag-data '%(taggername)'
x-tagger-email = x-tag-data '%(taggeremail)'
x-tag-date = x-tag-data '%(taggerdate:rfc2822)'
x-tag-environment-string = "!f() { echo '\
    export GIT_COMMITTER_DATE=${GIT_COMMITTER_DATE-`git x-tag-date \"$1\"`};\
    export GIT_COMMITTER_NAME=${GIT_COMMITTER_NAME-`git x-tagger-name \"$1\"`};\
    export GIT_COMMITTER_EMAIL=${GIT_COMMITTER_EMAIL-`git x-tagger-email \"$1\"`};\
';}; f"

이러한 별칭은 단일 태그 이름 및 기타 모든 플래그를 git 태그로 사용할 수 있으며 이름 변경을 지원하도록 쉽게 수정할 수도 있습니다.

용도:

# opens editor to edit existing message
git tag-amend <tag name>

# add a new paragraph to the existing message
git tag-amend <tag name> -m "<new paragraph>"

# replace the message with a new one
git tag-rewrite <tag name> -m "<new message>"

경량 태그 지원

사용하다creatordate,creatorname,그리고.creatoremail tagger...변종들creator... 가기는 사할바가기를 합니다.tagger...만약 그것이 존재하고 그것으로 되돌아가면.committer....

Github tags 페이지에서 "RAMDOM DESCRIPTION"으로 태그의 메시지 번호 54.4를 성공적으로 업데이트한 방법은 다음과 같습니다.

git tag "54.4" "54.4^{}" -f -m "RAMDOM DESCRIPTION"
git push origin main --tags -f

언급URL : https://stackoverflow.com/questions/7813194/how-do-i-edit-an-existing-tag-message-in-git

반응형