Git: "현재 어떤 지점에도 없습니다."변경 사항을 유지하면서 지점으로 돌아갈 수 있는 쉬운 방법이 있습니까?
그래서 저는 저장소에서 몇 가지 작업을 수행했고, 이제 막 작업을 시작하려고 할 때 현재 어떤 지점에도 있지 않다는 것을 깨달았습니다.
서브모듈로 작업할 때 이런 일이 많이 발생하고 해결할 수 있지만, 그 과정이 지루하고 더 쉬운 방법이 있을 거라고 생각해왔습니다.
변경 사항을 유지하면서 지점으로 돌아갈 수 있는 쉬운 방법이 있습니까?
커밋하지 않은 경우:
git stash
git checkout some-branch
git stash pop
커밋했지만 이후 변경 사항이 없는 경우:
git log --oneline -n1 # this will give you the SHA
git checkout some-branch
git merge ${commit-sha}
커밋한 후 추가 작업을 수행한 경우:
git stash
git log --oneline -n1 # this will give you the SHA
git checkout some-branch
git merge ${commit-sha}
git stash pop
이것은 나를 도왔습니다.
git checkout -b newbranch
git checkout master
git merge newbranch
git branch -d newbranch
git checkout master
그 결과는 다음과 같습니다.
Warning: you are leaving 2 commits behind, not connected to
any of your branches:
1e7822f readme
0116b5b returned to clean django
If you want to keep them by creating a new branch, this may be a good time to do so with:
git branch new_branch_name 1e7822f25e376d6a1182bb86a0adf3a774920e1e
자, 해봅시다.
git merge 1e7822f25e376d6a1182bb86a0adf3a774920e1e
여기에 다른 길을 떠나는 것.
git branch newbranch
git checkout master
git merge newbranch
이러한 상황이 발생하는 한 가지 방법은 원격 분기에서 기본 재배치를 수행하는 것입니다.이 경우 새 커밋은 다음과 같이 지정됩니다.HEAD그렇지만master다른 분기를 재조정하기 전의 위치를 가리키는 것이 아닙니다.
이 커밋을 새 커밋으로 만들 수 있습니다.master수행:
git branch -f master HEAD
git checkout master
강제로 업데이트됩니다.master가리키자면HEAD(당신을 속이지 않고)master) 그런 다음 로 전환합니다.master.
또는 기본 분리된 헤드 상태가 아닌 분기를 체크아웃하도록 하위 모듈을 설정할 수 있습니다.
추가할 편집 내용:
한 가지 방법은 하위 모듈을 -b 플래그로 추가할 때 하위 모듈의 특정 분기를 체크아웃하는 것입니다.
git submodule add -b master <remote-repo> <path-to-add-it-to>
또 다른 방법은 서브모듈 디렉토리로 가서 확인하는 것입니다.
git checkout master
저는 최근에 이 문제에 다시 부딪혔습니다.서브모듈을 사용하여 작업한 지 오래되었고 git에 대해 더 많이 알게 된 후, 당신이 커밋하고 싶은 지점을 확인하는 것만으로도 충분하다는 것을 깨달았습니다.Git는 당신이 보관하지 않아도 작업 트리를 보관할 것입니다.
git checkout existing_branch_name
새 지점에서 작업하려면 다음 작업을 수행해야 합니다.
git checkout -b new_branch_name
작업 트리에 충돌이 있으면 체크아웃이 실패하지만, 이는 매우 이례적인 일이며, 발생하면 저장하고, 팝업을 표시하여 충돌을 해결할 수 있습니다.
승인된 답변과 비교하여 이 답변은 실행에 그렇게 오래 걸리지 않는 두 가지 명령의 실행을 저장합니다.따라서 이 답변이 현재 수락된 답변보다 기적적으로 더 많은 찬성표(또는 최소한 근접)를 얻지 않는 한 저는 이 답변을 수락하지 않을 것입니다.
다음 방법이 작동할 수 있습니다.
git rebase HEAD master
git checkout master
이렇게 하면 현재 HEAD 변경 내용이 마스터 위에 기본적으로 적용됩니다.그런 다음 분기를 전환할 수 있습니다.
다른 방법은 지점을 먼저 확인하는 것입니다.
git checkout master
그런 다음 Git는 분리된 커밋의 SHA1을 표시해야 합니다. 그런 다음 체리픽을 선택할 수 있습니다. 예를 들어,
git cherry-pick YOURSHA1
또는 최신 버전을 병합할 수도 있습니다.
git merge YOURSHA1
을 모두 다음을합니다.git reflog.
저는 제가 2012년에 아기에게 누군가가 그들이 지점에 있지 않다는 것을 깨닫지 못하고 헌신할 것 같지 않다고 말한 것을 알고 있습니다.이것은 방금 저에게 일어난 일이기 때문에 제가 잘못했다는 것을 인정해야 한다고 생각합니다만, 저에게 이런 일이 일어나기까지 2016년까지 걸린 것을 고려하면, 사실 가능성이 낮다고 주장할 수 있습니다.
어쨌든, 새로운 지점을 만드는 것은 제 생각에 너무 지나친 것 같습니다.당신이 해야 할 일은 다음과 같습니다.
git checkout some-branch
git merge commit-sha
다른 분기를 체크아웃하기 전에 commit-sha를 복사하지 않은 경우 다음을 실행하여 쉽게 찾을 수 있습니다.
git reflog
가장 좋은 방법은 변경한 파일을 별도의 폴더에 복사한 다음 현재 컴퓨터에 있는 리포지토리 폴더를 삭제한 다음 기본 리포지토리를 복제하고 파일을 다시 넣는 것입니다.
언급URL : https://stackoverflow.com/questions/4735556/git-not-currently-on-any-branch-is-there-an-easy-way-to-get-back-on-a-branch
'programing' 카테고리의 다른 글
| ggplot에서 범례 제목을 변경하는 방법 (0) | 2023.07.16 |
|---|---|
| 폴더의 Git 내역 보기 (0) | 2023.07.16 |
| Git를 사용하여 원격 저장소에 초기 푸시를 수행하려면 어떻게 해야 합니까? (0) | 2023.07.16 |
| 엑셀에서 열 글자 문자열의 마지막 네 글자를 어떻게 추출합니까? (0) | 2023.07.16 |
| 여러 데이터베이스 서버에 대해 구문을 확인할 수 있는 SQL Validator가 있습니까? (0) | 2023.07.16 |