git 브랜치의 태그를 다른 커밋으로 이동하려면 어떻게해야합니까?
다음 v0.1
과 같이 마스터 브랜치에 태그를 생성했습니다 .
git tag -a v0.1
하지만 릴리스 0.1을 위해 마스터에 병합해야하는 몇 가지 변경 사항이 있다는 것을 깨달았으므로 그렇게했습니다. 그러나 이제 내 v0.1
태그가 잘못된 커밋에 붙어 있습니다 (포스트잇 메모 비유를 호출하기 위해). 나는 그것이 마스터의 가장 최근 커밋에 붙어 있기를 원하지만 대신 마스터의 두 번째 가장 최근 커밋에 붙어 있습니다.
마스터의 가장 최근 커밋으로 어떻게 옮길 수 있습니까?
-f
옵션을 사용하여 다음을 수행하십시오 git tag
.
-f
--force
Replace an existing tag with the given name (instead of failing)
주석이없는 태그 대신 주석이 달린 태그를 강제 생성하기 위해 -f
와 함께 사용하고 싶을 것입니다 -a
.
예
푸시하기 전에 리모컨에서 태그를 삭제하십시오.
git push origin :refs/tags/<tagname>
가장 최근 커밋을 참조하도록 태그 교체
git tag -fa <tagname>
태그를 원격 원점으로 푸시
git push origin master --tags
보다 정확하게는 태그를 강제로 추가 한 다음 --tags 및 -f 옵션을 사용하여 푸시해야합니다.
git tag -f -a <tagname>
git push -f --tags
리모컨이 호출 origin
되고 master
지점에서 작업 중인지 요약하면 다음 과 같습니다.
git tag -d <tagname>
git push origin :refs/tags/<tagname>
git tag <tagname> <commitId>
git push origin <tagname>
- 라인 1은 로컬 환경에서 태그를 제거합니다.
- 2 행은 원격 환경에서 태그를 제거합니다.
- 3 행은 다른 커밋에 태그를 추가합니다.
- 라인 4는 변경 사항을 리모컨으로 푸시합니다.
라인 4를 git push origin --tags
로 교환 하여 로컬 변경 사항의 태그로 모든 변경 사항을 푸시 할 수도 있습니다 .
@ stuart-golodetz, @ greg-hewgill, @eedeep, @ ben-hocking 답변, 답변 아래의 댓글 및 내 답변 아래의 NateS 댓글을 기반으로합니다.
로 삭제 git tag -d <tagname>
한 다음 올바른 커밋에서 다시 만듭니다.
Git을 사용할 때 몇 가지를 피하려고합니다.
내부 지식 사용 (예 : 참조 / 태그) 문서화 된 Git 명령 만 사용하고 .git 디렉토리의 내부 내용에 대한 지식이 필요한 것은 사용하지 않으려 고합니다. (즉, Git을 Git 개발자가 아닌 Git 사용자로 취급합니다.)
필요하지 않을 때 힘을 사용합니다.
과용. (내가 원하는 곳에 하나의 태그를 얻기 위해 분기 및 / 또는 많은 태그를 푸시합니다.)
그래서 여기에 Git 내부에 대한 지식없이 로컬 및 원격으로 태그를 변경하는 비폭력적인 솔루션이 있습니다.
소프트웨어 수정에 궁극적으로 문제가 발생하여 업데이트 / 재 출시해야 할 때 사용합니다.
git tag -d fix123 # delete the old local tag
git push github :fix123 # delete the old remote tag (use for each affected remote)
git tag fix123 790a621265 # create a new local tag
git push github fix123 # push new tag to remote (use for each affected remote)
github
샘플 원격 이름, fix123
샘플 태그 이름 및 790a621265
샘플 커밋입니다.
여기에 내 필요에 맞는이 명령의 다른 형식 만 남겨 두겠습니다. 움직이고 싶은
태그가있었습니다 v0.0.1.2
.
$ git tag -f v0.0.1.2 63eff6a
Updated tag 'v0.0.1.2' (was 8078562)
그리고:
$ git push --tags --force
Alias to move one tag to a different commit.
In your sample, to move commit with hash e2ea1639 do: git tagm v0.1 e2ea1639
.
For pushed tags, use git tagmp v0.1 e2ea1639
.
Both alias keeps you original date and message. If you use git tag -d
you lost your original message.
Save them on your .gitconfig
file
# Return date of tag. (To use in another alias)
tag-date = "!git show $1 | awk '{ if ($1 == \"Date:\") { print substr($0, index($0,$3)) }}' | tail -2 | head -1 #"
# Show tag message
tag-message = "!git show $1 | awk -v capture=0 '{ if(capture) message=message\"\\n\"$0}; BEGIN {message=\"\"}; { if ($1 == \"Date:\" && length(message)==0 ) {capture=1}; if ($1 == \"commit\" ) {capture=0} }; END { print message }' | sed '$ d' | cat -s #"
### Move tag. Use: git tagm <tagname> <newcommit>
tagm = "!GIT_TAG_MESSAGE=$(git tag-message $1) && GIT_COMMITTER_DATE=$(git tag-date $1) && git tag-message $1 && git tag -d $1 && git tag -a $1 $2 -m \"$GIT_TAG_MESSAGE\" #"
### Move pushed tag. Use: git tagmp <tagname> <newcommit>
tagmp = "!git tagm $1 $2 && git push --delete origin $1 && git push origin $1 #"
One other way:
Move tag in remote repo.(Replace HEAD with any other if needed.)
$ git push --force origin HEAD:refs/tags/v0.0.1.2
Fetch changes back.
$ git fetch --tags
If you want to move an annotated tag, changing only the targeted commit but preserving the annotation message and other metadata use:
moveTag() {
local tagName=$1
# Support passing branch/tag names (not just full commit hashes)
local newTarget=$(git rev-parse $2^{commit})
git cat-file -p refs/tags/$tagName |
sed "1 s/^object .*$/object $newTarget/g" |
git hash-object -w --stdin -t tag |
xargs -I {} git update-ref refs/tags/$tagName {}
}
usage: moveTag <tag-to-move> <target>
The above function was developed by referencing teerapap/git-move-annotated-tag.sh.
'development' 카테고리의 다른 글
ls를 사용하여 디렉토리 및 전체 크기 나열 (0) | 2020.09.29 |
---|---|
Java의 데몬 스레드는 무엇입니까? (0) | 2020.09.29 |
본문이 브라우저 높이의 100 %가되도록합니다. (0) | 2020.09.29 |
C #에서 사용되는 yield 키워드는 무엇입니까? (0) | 2020.09.29 |
조인 대 하위 쿼리 (0) | 2020.09.29 |