저장소에서 일부 작업을 수행 중이며 파일에 로컬 변경이 있음을 알았습니다. 더 이상 원하지 않기 때문에 파일을 삭제하고 새로운 사본을 체크 아웃 할 수 있다고 생각했습니다. 나는 Git과 동등한 것을하고 싶었다.
svn up .
사용 git pull
이 작동하지 않는 것 같습니다. 일부 무작위 검색으로 누군가가 추천 한 사이트로 연결되었습니다.
git checkout HEAD^ src/
( src
삭제 된 파일이 들어있는 디렉토리입니다).
이제 머리가 분리되어 있음을 알았습니다. 나는 그것이 무엇인지 전혀 모른다. 취소하려면 어떻게해야합니까?
답변
분리 된 헤드는 더 이상 지점에 있지 않다는 것을 의미합니다. 히스토리에서 단일 커밋 (이 경우 HEAD 이전의 커밋, 즉 HEAD ^)을 체크 아웃했습니다.
분리 된 HEAD와 관련된 변경 사항 을 삭제 하려는 경우
예를 들어 지점을 체크 아웃하면됩니다.
git checkout master
다음에 파일을 변경하고 색인에있는 상태로 복원하려면 먼저 파일을 삭제하지 마십시오.
git checkout -- path/to/foo
이것은 foo 파일을 인덱스에있는 상태로 복원합니다.
분리 된 HEAD와 관련된 변경 사항 을 유지하려면
- Run-
git branch tmp
이라고하면 새 지점에 변경 사항이 저장됩니다tmp
. - 운영
git checkout master
- 변경 사항을 통합 하려면 지점 에서
master
실행git merge tmp
하십시오master
. 당신은master
실행 후 지점 에 있어야합니다git checkout master
.
답변
잃고 싶지 않은 파일을 변경했다면 밀어 넣을 수 있습니다. 분리 모드에서 커밋 한 후 나중에 임시 분기로 이동하여 나중에 마스터에 통합 할 수 있습니다.
git commit -m "....."
git branch my-temporary-work
git checkout master
git merge my-temporary-work
에서 추출 :
답변
임시 브랜치를 만들지 않는 솔루션.
이미이 모드에서 무언가를 변경하고 선택적으로 변경 사항을 저장하려는 경우 분리 된 HEAD 상태를 종료 ( “수정”)하는 방법 :
-
유지하려는 변경 사항을 커밋하십시오. 분리 된 HEAD 상태에서 변경 한 내용을 인계하려면 커밋하십시오. 처럼:
git commit -a -m "your commit message"
-
유지하고 싶지 않은 변경 사항은 폐기하십시오. 하드 리셋은 분리 된 HEAD 상태에서 수행 한 커밋되지 않은 변경 사항을 모두 버립니다.
git reset --hard
(이것이 없으면 3 단계는 실패하고 분리 된 HEAD에서 커밋되지 않은 수정 된 파일에 대해 불평합니다.)
-
지점을 확인하십시오. 예를 들어, 이전에 작업 한 브랜치를 확인하여 분리 된 HEAD 상태를 종료하십시오.
git checkout master
-
커밋을 인계하십시오. 다른 질문에 대한 내 대답에 표시된 것처럼 체리 따기를 통해 분리 된 HEAD 상태에서 커밋을 인계 할 수 있습니다 .
git reflog git cherry-pick <hash1> <hash2> <hash3> …
답변
분리 헤드는 다음을 의미합니다.
- 더 이상 지점에 있지 않습니다.
- 기록에서 단일 커밋을 체크 아웃했습니다
변경 사항이없는 경우 다음 명령을 적용하여 마스터로 전환 할 수 있습니다
git checkout master
유지하려는 변경 사항이있는 경우 :
HEAD가 분리 된 경우 명명 된 분기가 업데이트되지 않는다는 점을 제외하고는 정상적인 작업을 커밋합니다. 커밋 된 변경 사항으로 마스터 분기를 업데이트하려면 현재 분기를 임시 분기 (이 방법으로 분리 된 HEAD에서 커밋 된 모든 변경 사항을 갖게 됨)를 만든 다음 마스터 분기로 전환하고 임시 분기를 주인.
git branch temp
git checkout master
git merge temp
답변
내가 분리 된 머리에 있고 이미 약간의 변경을했다는 것을 알게 된 후에 방금 수행 한 작업이 있습니다.
변경 사항을 커밋했습니다.
$ git commit -m "..."
[detached HEAD 1fe56ad] ...
커밋의 해시 (1fe56ad)를 기억했습니다. 그런 다음 내가 있어야했던 지점을 확인했습니다.
$ git checkout master
Switched to branch 'master'
마지막으로 커밋 변경 사항을 지점에 적용했습니다.
$ git cherry-pick 1fe56ad
[master 0b05f1e] ...
나는 이것이 임시 지점을 만드는 것보다 조금 쉽다고 생각합니다.
답변
약간의 변경을 수행 한 후 분리 된 헤드에 있음을 인식 한 경우 stash-> checkout master-> stash pop :
git stash
git checkout master # Fix the detached head state
git stash pop # Or for extra safety use 'stash apply' then later
# after fixing everything do 'stash drop'
아무 일도 일어나지 않은 것처럼 커밋되지 않은 변경 사항과 일반적인 “첨부 된”헤드가 있습니다.
답변
에서 특정 커밋을 체크 아웃하면 헤드 상태 git
가 분리 됩니다. 즉, 작업 복사본에는 더 이상 “마스터”와 같은 명명 된 참조의 상태가 반영되지 않습니다. 리포지토리의 과거 상태를 검사하는 데 유용하지만 실제로 변경 사항을 되돌리려는 경우 원하는 것은 아닙니다.
특정 파일을 변경하고 단순히 파일을 삭제하려는 경우 다음 checkout
과 같은 명령을 사용할 수 있습니다 .
git checkout myfile
커밋되지 않은 변경 사항은 버리고 현재 브랜치 헤드에있는 상태로 파일을 되돌립니다. 이미 커밋 한 변경 사항을 취소하려면 reset
명령 을 사용하십시오 . 예를 들어, 이렇게하면 리포지토리가 이전 커밋 상태로 재설정되어 이후의 모든 변경 사항이 삭제됩니다.
git reset --hard HEAD^
그러나 다른 사람들과 저장소를 공유하는 경우 저장소 저장소 git reset
의 일부가 지워지기 때문에 방해가 될 수 있습니다. 이미 다른 사람과 변경 사항을 공유 한 경우 일반적으로 git revert
“반 커밋”을 생성하는 즉, 해당 변경 사항을 “취소”하는 새로운 커밋을 생성하는 대신 살펴보고자 합니다.
Git Book 에 자세한 내용이 있습니다.