Development Tip

브랜치가없는 태그에 대한 Git 커밋

yourdevel 2020. 12. 30. 19:46
반응형

브랜치가없는 태그에 대한 Git 커밋


브랜치를 만들지 않고 소스 코드의 태그가 지정된 버전을 확인하면 Git은 내가 브랜치와 전혀 관련이 없음을 나타냅니다. 그래도 변경하고 확인하게되어 기쁩니다. 그 변화는 어디로 갑니까? 다시 '마스터'로 전환하면 사라지고 (마스터에 있던 항목으로 덮어 쓰여짐) 다시 찾을 수없는 것 같습니다. 무엇을 제공합니까? Git이 본질적으로 익명의 브랜치에 대해 변경 사항을 커밋 할 수있게 해준다면 확실히 다시 가져올 수 있습니까?


커밋이 브랜치에 없기 때문에 SHA1을 사용하여 특정 커밋을 체크 아웃하지 않는 한 작업 디렉토리에서 볼 수 없습니다. reflog리포지토리에서 체크 아웃 한 변경 사항을 추적 하는 항목 살펴보면 커밋을 찾을 수 있습니다 . 태그가 XXX있으면 다음과 같은 내용이 표시됩니다.

$ git reflog
7a30fd7... HEAD@{0}: checkout: moving from master to XXX
ddf751d... HEAD@{1}: checkout: moving from 96c3b0300ccf16b64efc260c21c85ba9030f2e3a to master
96c3b03... HEAD@{2}: commit:  example commit on tag XXX, not on any branch
7a30fd7... HEAD@{3}: checkout: moving from master to XXX

이는 checkout작업 디렉토리에서 커밋을 확인하기 위해 필요한 SHA1을 알려줍니다 .

$ git checkout 96c3b03
Note: moving to "96c3b03" which isn't a local branch
If you want to create a new branch from this checkout, you may do so
(now or later) by using -b with the checkout command again. Example:
  git checkout -b <new_branch_name>
HEAD is now at 96c3b03... example commit on tag XXX, not on any branch
$ git checkout -b newbranch
$ git branch                #lists all branches
    feature1
    master
  * newbranch

git 이 특정 커밋의checkout 모든 프로젝트 파일 을 내 파일 시스템 (작업 디렉토리)에 배치 한다는 사실을 깨닫기 전까지는이 모든 것이 처음에는 약간 이상해 보였습니다 . 실제로 작업 디렉터리는 로컬 Git 저장소에서 브라우저 역할을합니다. 따라서 변경 사항은 저장소에서 덮어 쓰지 않았으며 마스터를 체크 아웃했을 때 작업 디렉토리에 표시되지 않습니다.


예, 그들은 리플 로그에있을 것입니다.

다음과 같이 언제든지 브랜치의 이름을 지정할 수 있습니다.

git checkout -b my-branch-name

또는 SHA1 (위와 같이 git reflog 사용)을 찾아서 새 분기없이 커밋을 마스터로 다시 병합 한 다음 다음을 수행 할 수 있습니다.

git checkout master
git merge SHA1

두 번째 질문에 답하려면 git reset --hard yourtagname을 사용합니다.

무슨 일이 일어날 지에 관해서는 본질적으로 태그 이름에서 분기를 분기하고 동일한 분기에 머물 렀습니다. 이전 포크에있는 커밋은 여전히 ​​남아 있습니다 ...보기가 어렵습니다. 이전 포크를 찾기 위해 reflog를 사용해야 할 수도 있습니다.

참조 URL : https://stackoverflow.com/questions/366093/git-commit-against-tag-with-no-branch

반응형