자식 브랜치의 태그를 다른 커밋으로 옮기려면 어떻게해야합니까? 내 v0.1태그가 잘못된 커밋에 붙어 있습니다 (Post-it

마스터 브랜치에서 다음 v0.1과 같은 태그를 만들었습니다 .

git tag -a v0.1

그러나 릴리스 0.1의 마스터로 병합 해야하는 변경 사항이 여전히 있음을 깨달았습니다. 그러나 이제 내 v0.1태그가 잘못된 커밋에 붙어 있습니다 (Post-it Note 유추를 호출하기 위해). 마스터에서 가장 최근의 커밋에 붙어 있기를 원하지만 대신 마스터에서 두 번째로 최근 커밋에 붙어 있습니다.

마스터에서 가장 최근의 커밋으로 어떻게 옮길 수 있습니까?



답변

-f옵션을 사용하여 다음을 수행하십시오 git tag.

-f
--force

    Replace an existing tag with the given name (instead of failing)

어노테이션이없는 태그 대신 어노테이션이있는 태그를 작성하기 위해 -f함께 사용할 수 -a있습니다.

  1. 푸시하기 전에 리모컨의 태그를 삭제하십시오

    git push origin :refs/tags/<tagname>
    
  2. 가장 최근의 커밋을 참조하도록 태그를 교체하십시오.

    git tag -fa <tagname>
    
  3. 태그를 원격 원점으로 미십시오

    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을 사용할 때 몇 가지를 피하려고합니다.

  1. 내부 지식 (예 : 심판 / 태그) 사용 문서화 된 Git 명령 만 사용하려고 시도하고 .git 디렉토리의 내부 내용에 대한 지식이 필요한 것을 사용하지 마십시오. 즉, Git을 Git 개발자가 아닌 Git 사용자로 취급합니다.

  2. 필요하지 않은 경우 힘을 사용합니다.

  3. 지나친 것들. (분기 및 / 또는 많은 태그를 푸시하여 원하는 위치에 하나의 태그를 얻습니다.)

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


답변

다른 방법 :

원격 저장소에서 태그를 이동하십시오 (필요한 경우 HEAD를 다른 것으로 교체하십시오).

$ git push --force origin HEAD:refs/tags/v0.0.1.2

변경 사항을 다시 가져옵니다.

$ git fetch --tags