자식을 사용하여 이와 같은 것을 만들었습니다.
git clone
git checkout {a rev number tree rev before} (here I started to be in a detached head state)
//hacking
git commit
//hacking
git commit
(some commit where made on origin/master)
git pull (which does complete because there was some error due to the fact that I'm no more on master)
헤드가 분리 된 상태에서도 여전히 커밋 할 수 있다고 말했기 때문에 그렇게했습니다. 그러나 이제 분리 된 헤드 브랜치와 로컬 마스터 브랜치를 병합 한 다음 변경 사항을 원산지 / 마스터로 푸시하고 싶습니다.
그래서 내 질문은 어떻게 마스터 브랜치를 내 실제 상태와 분리 할 수 있습니까?
답변
당신이있는 지점을 만든 다음 master로 전환하고 병합하십시오.
git branch my-temporary-work
git checkout master
git merge my-temporary-work
답변
이런 식으로 할 수 있습니다.
# Create temporary branch for your detached head
git branch tmp
# Go to master
git checkout master
# Merge in commits from previously detached head
git merge tmp
# Delete temporary branch
git branch -d tmp
더 간단한 것
git checkout master
git merge HEAD@{1}
그러나 이것은 실수를하면 분리 된 헤드에서 커밋을 복구하는 것이 조금 더 어려울 수있는 약간의 위험이 있습니다.
답변
이것이 내가 한 일입니다.
기본적으로 detached HEAD
이름이없는 새로운 지점 으로 생각하십시오 . 다른 지점과 마찬가지로이 지점에 커밋 할 수 있습니다. 커밋이 완료되면 원격으로 푸시하려고합니다.
따라서 가장 먼저해야 할 일은 detached HEAD
이름을 지정하는 것입니다. 이 작업을 수행하는 동안 쉽게 좋아할 수 있습니다 detached HEAD
.
git checkout -b some-new-branch
이제 다른 지점처럼 원격으로 푸시 할 수 있습니다.
제 경우에는 또한 detached HEAD
(이제 some-new-branch
) 커밋과 함께이 지점을 마스터하기 위해이 분기를 빨리 진행하고 싶었습니다 . 내가 한 것은
git checkout master
git pull # To make sure my local copy of master is up to date
git checkout some-new-branch
git merge master // This added current state of master to my changes
물론 나중에에 병합했습니다 master
.
그게 다야.
답변
당신은 할 수 있습니다 git merge <commit-number>
또는git cherry-pick <commit> <commit> ...
Ryan Stewart가 제안한 것처럼 현재 HEAD에서 분기를 만들 수도 있습니다.
git branch brand-name
아니면 그냥 태그 :
git tag tag-name
답변
HEAD가 분리 된 경우 명명 된 분기가 업데이트되지 않는다는 점을 제외하고는 커밋이 정상적으로 작동합니다. 커밋 된 변경 사항으로 마스터 분기를 업데이트하려면 임시 분기를 현재 위치 (이 방법으로 분리 된 HEAD에서 커밋 된 모든 변경 사항이 적용됨)를 만든 다음 마스터 분기로 전환하고 임시 분기를 주인.
git branch temp
git checkout master
git merge temp
답변
쉬운 수정은 해당 커밋 및 체크 아웃에 대한 새 분기를 만드는 것 git checkout -b <branch-name> <commit-hash>
입니다.
이러한 방식으로 모든 변경 사항이 해당 분기에 저장됩니다. 남은 커밋에서 마스터 브랜치를 정리해야하는 경우 반드시 실행하십시오 git reset --hard master
.
이를 통해 브랜치를 다시 작성하게되므로 이러한 변경 사항이있는 사람을 방해하지 않도록하십시오. 분리 된 HEAD 상태를 더 잘 설명하려면이 기사를 살펴보십시오 .
답변
아마도 가장 좋은 해결책은 아니지만 (역사를 다시 쓰게 될 것입니다) 그러나 당신도 할 수 있습니다 git reset --hard <hash of detached head commit>
.