2012-10-16 9 views
0

git과 관련하여 도움이 필요합니다. 현재의 "마스터"에는 몇 가지 문제가 있었기 때문에 이전 버전을 체크 아웃했다.체크 아웃을 마스터로 변환하십시오.

$ git checkout <hash> 

"이전"이라고합시다. 그런 다음 "이전"을 편집하여 원하는대로 작동하게했습니다. 그런 다음 나는 "이전"을 git repo로 밀어 넣었다. 물론, 레포에서 "마스터"는 여전히 문제가있는 오래된 "마스터"입니다. 내 컴퓨터에서 "이전"(새 편집 내용 포함)을 "마스터"로 변환 한 다음 repo로 푸시하면됩니다. 어떻게해야합니까? 나는 rebase을 읽고 그 시도를했지만 작동하지 않습니다. "다시베이스 할 수 없습니다 : 변경 사항을 취소했습니다."라는 오류 메시지가 나타납니다.

답변

3

아마도 git checkout <hash>으로 수행 한 작업은 새로운 분리 HEAD를 얻는 것입니다.

선택적으로, 잘못된 마스터의 심판을 유지 (oldmaster를 호출 할) :

git branch oldmaster master 

마스터 참조 삭제 : 현재 작업 지점 (분리 된 HEAD)를 확인

git branch -D master 

을 새로운 마스터 지점.

git checkout -b master 

그런 다음, (아마 필요한 경우 새 파일을 추가 한 후) 변경 사항을 커밋 :

git checkout master 
git reset --hard <hash> 

: 다시 master 브랜치를 걸어

git commit ... 
+0

귀하의 제안은 나에게 가장 논리적으로 보입니다. 나는 그것을 시도하고, 거의 작동하는 것 같다. 유일한 문제는 로컬 마스터가 원격 마스터 뒤에 있다는 것입니다. 그래서, 나는 '강제로 움직일 수 없다'. 나는'git pull'을 먼저 요구받습니다.하지만 그렇게하면 지역 변화가 뒤죽박죽이 될 것입니다. 내가하고 싶은 것은 단지 현재의 로컬 마스터를 나의 원격 마스터로 만드는 것이다. 어떻게해야합니까? – punkish

+0

'+':'git push + master' 명령으로 밀어 넣으십시오. 원격 저장소의 유일한 사용자라면 괜찮을 수 있지만, 다른 누군가가 해당 마스터 브랜치를 당긴 경우 큰 혼란을 야기 할 수 있습니다. – Bruno

+0

감사합니다 ... 당신의 의견을보기 전에 나는 'git push --force'를했는데 그것은 그 트릭을 완료 한 것 같습니다. 네, 저는이 프로젝트에서 유일하게 일하고 있습니다. – punkish

1

"마스터"에 얼마나 멀리 가야할지 모르겠지만 분기 한 지점까지 git revert <hash>까지 줄 수 있습니다. 이것은 역사를 잃지 않고 모든 커밋을 "실행 취소"합니다.

이 게시물이 당신을 도울 수 있습니다 Revert multiple git commits

0

아마도 git checkout master; git status;을 실행하려고하고 실제로 마스터 분기 unstaged 변경이있는 경우를 참조하십시오. 이 경우, 단순히 rebase하기 전에 변경 사항을 저지하거나 숨기십시오. 또한 이전 분기에서 변경 내용을 커밋했는지 확인해야합니다.

0

간단한 방법은 다시 사용하는 것입니다 그런 다음 지사는 몇 가지 커밋을 통해 원본 마스터 뒤에 있습니다. 수정하려면 다음을 수행하십시오.

이것은 현재 위치보다 커밋을 강제로 삭제합니다.

관련 문제