태그 보관물: git-checkout

git-checkout

분리 된 헤드에서 커밋으로 수행 할 작업 state) //hacking git commit //hacking git commit (some commit where

자식을 사용하여 이와 같은 것을 만들었습니다.

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