git 브랜치를 주어진 이전 커밋으로 재설정하고 분리된 HEAD를 수정하는 방법은 무엇입니까?

git 브랜치를 주어진 이전 커밋으로 재설정하고 분리된 HEAD를 수정하는 방법은 무엇입니까?

내 브랜치를 이전 작업 상태(커밋)로 재설정해야 했기 때문에 다음과 같이 했습니다.

git reset --hard c70e611

지금은 이해

HEAD detached at c70e611
nothing to commit, working directory clean

분리된 헤더 메시지를 수정/이해/우회하고 c70e611이 현재 작업 중인 최신 커밋이고 작업 중인 브랜치(마스터 브랜치가 아님)의 HEAD를 나타내도록 푸시하는 방법은 무엇입니까?

답변1

HEAD커밋 트리에서 작업공간의 현재 위치는 git브랜치 detached에 해당하지 않음을 의미합니다. 이 문제를 해결하려면 새 분기를 만들어야 합니다 ( 새 분기에 지정할 이름으로 git checkout -b branch교체 ).branch

재설정 후 커밋을 삭제하려면 마스터 브랜치를 삭제하고 다시 생성하면 됩니다.

git branch -D master
git checkout -b master

다른 곳에 푸시된 리포지토리를 처리하는 경우 문제를 해결하기 위해 더 많은 작업을 수행해야 하며 푸시를 강제로 수행해야 합니다(다른 사용자에게 작업공간을 다시 복제하도록 지시해야 함). 공유 상태가 있는 경우 실제로 되돌리기 커밋을 만들어야 합니다. 아래 커밋에서 시작하는 모든 커밋 git revert으로 시작 하고 되돌리기를 참조하세요 .masterc70e611

답변2

HEAD detached at c70e611

를 실행할 때 git reset --hard그 당시 어떤 브랜치에도 있지 않기 때문입니다. 분리된 헤드가 있고 HEAD분리된 헤드가 명령으로 이동하면서 git reset --hard동시에 작업 트리를 해당 상태로 다시 작성합니다.

특정 분기를 foo로 설정 하려면 c70611다음을 수행하세요.

git checkout foo
git reset --hard c70611

이것이 업스트림으로 푸시하기에 좋은 상태로 간주된다면 foo괜찮습니다 git push <remote-name> foo.

현재 분기인지 확인하지 않고 강제로 foo실행하는 보다 직접적인 방법이 있습니다 . c70611즉, foogit update-ref명령을 사용하여 가리키는 내용을 다시 쓸 수 있습니다.

위의 작업을 수행하기 전에 나는 멈춰서 나도 모르게 어떻게 해리에 빠지고 있는지 확인하려고 노력합니다. 아마도 미완성 리베이스일 수도 있습니다. 첫 번째 단계는 git reflog기억을 되살리는 데 도움이 되는 마지막 몇 가지 항목을 검토하는 것입니다 .

관련 정보