힘내 분리 헤드를 수정? 아웃 할 수

저장소에서 일부 작업을 수행 중이며 파일에 로컬 변경이 있음을 알았습니다. 더 이상 원하지 않기 때문에 파일을 삭제하고 새로운 사본을 체크 아웃 할 수 있다고 생각했습니다. 나는 Git과 동등한 것을하고 싶었다.

svn up .

사용 git pull이 작동하지 않는 것 같습니다. 일부 무작위 검색으로 누군가가 추천 한 사이트로 연결되었습니다.

git checkout HEAD^ src/

( src삭제 된 파일이 들어있는 디렉토리입니다).

이제 머리가 분리되어 있음을 알았습니다. 나는 그것이 무엇인지 전혀 모른다. 취소하려면 어떻게해야합니까?



답변

분리 된 헤드는 더 이상 지점에 있지 않다는 것을 의미합니다. 히스토리에서 단일 커밋 (이 경우 HEAD 이전의 커밋, 즉 HEAD ^)을 체크 아웃했습니다.

분리 된 HEAD와 관련된 변경 사항 을 삭제 하려는 경우

예를 들어 지점을 체크 아웃하면됩니다.

git checkout master

다음에 파일을 변경하고 색인에있는 상태로 복원하려면 먼저 파일을 삭제하지 마십시오.

git checkout -- path/to/foo

이것은 foo 파일을 인덱스에있는 상태로 복원합니다.

분리 된 HEAD와 관련된 변경 사항 을 유지하려면

  1. Run- git branch tmp이라고하면 새 지점에 변경 사항이 저장됩니다 tmp.
  2. 운영 git checkout master
  3. 변경 사항을 통합 하려면 지점 에서 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 상태를 종료 ( “수정”)하는 방법 :

  1. 유지하려는 변경 사항을 커밋하십시오. 분리 된 HEAD 상태에서 변경 한 내용을 인계하려면 커밋하십시오. 처럼:

    git commit -a -m "your commit message"
    
  2. 유지하고 싶지 않은 변경 사항은 폐기하십시오. 하드 리셋은 분리 된 HEAD 상태에서 수행 한 커밋되지 않은 변경 사항을 모두 버립니다.

    git reset --hard
    

    (이것이 없으면 3 단계는 실패하고 분리 된 HEAD에서 커밋되지 않은 수정 된 파일에 대해 불평합니다.)

  3. 지점을 확인하십시오. 예를 들어, 이전에 작업 한 브랜치를 확인하여 분리 된 HEAD 상태를 종료하십시오.

    git checkout master
    
  4. 커밋을 인계하십시오. 다른 질문에 대한 내 대답에 표시된 것처럼 체리 따기를 통해 분리 된 HEAD 상태에서 커밋을 인계 할 수 있습니다 .

    git reflog
    git cherry-pick <hash1> <hash2> <hash3> …
    

답변

분리 헤드는 다음을 의미합니다.

  1. 더 이상 지점에 있지 않습니다.
  2. 기록에서 단일 커밋을 체크 아웃했습니다

변경 사항이없는 경우 다음 명령을 적용하여 마스터로 전환 할 수 있습니다

  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 에 자세한 내용이 있습니다.