로컬 지사를 원격 지사로 덮어 쓰기


153

나는 현지 지사를 완전히 이해하지 못하고 다시 시작하고 싶습니다. 서버의 버전이 정확합니다.

다시 시작하고 싶지 않습니다. 지역 역사를 사용하여 큰 실수를 해결하고 싶습니다. (필요하다면 할 수 있습니다.)

git fetch branchnamegit pull branchname작동하지 않습니다. 내가받은 메시지는 " 최신입니다 "이지만 로컬 버전이 서버 와 일치하지 않습니다.

git pull origin/branchname" 찾을 수 없음 "오류가 발생합니다.


답변:


248

먼저 현재 위치에 새 지점을 만듭니다 (이전의 '스크류 된'기록이 필요한 경우).

git branch fubar-pin

원격 브랜치 목록을 업데이트하고 새로운 커밋을 동기화하십시오.

git fetch --all

그런 다음 분기를 원점 / 분기가 가리키는 지점으로 재설정하십시오.

git reset --hard origin/branch

조심 이 당신의에서 변경 사항을 제거합니다 작업 트리 !


2
+1이지만 git fetch origin재설정하기 전에 알림을 추가하고 싶을 수도 있습니다
Mark Longair

나는 약간의 변경으로 이것을했고 작동하지 않았다 : git fetch --all, git reset --hard SHA1OFANOLDCOMMIT, (다른 것들), git reset --hard origin / branch. 최종 결과는 여전히 오래된 커밋에있었습니다. 따라서이 접근법은 경우에 따라 작동 할 수 있지만 전혀 작동하지 않는다고 생각합니다.
greggles

@greggles : 오류가 있습니까? 마지막 명령 후 HEAD는 원점 / 분기를 가리켜 야합니다.
knittl

1
@Gavin : 아니요.이 상황은 다른 지점에 영향을 미치지 않습니다 origin/branch. 못.
knittl

1
@greggles 나는 이것이 매우 늦다 는 것을 알고 있지만 왜 그런 일이 일어날 지 궁금해하는 다른 사람들을 위해이 접근법은 지점을 체크 아웃 한 경우에만 작동합니다. 분리 된 HEAD 상태 (분기가 아닌 커밋의 HEAD 포인트)에 있었기 때문에 작동하지 않았으며 HEAD가 분기를 가리키는 경우에만이 명령이 작동합니다. git resetHEAD가 지점을 가리키는 동안 수행하면 해당 지점이 따라옵니다.
Michael Dorst

60

로컬 지점을 망칠 때 내가하는 일은 깨진 지점의 이름을 바꾸고 업스트림 지점을 다시 체크 아웃 / 브랜치하는 것입니다.

git branch -m branch branch-old
git fetch remote
git checkout -b branch remote/branch

그런 다음 이전 지점에서 아무것도 원하지 않는 경우 제거하십시오.

git branch -D branch-old

그러나 일반적으로 나는 거기에 무언가가있는 경우를 대비하여 로컬로 오래된 지점을 떠납니다.


4
이것은 가장 좋은 답변처럼 보입니다. 경우에 대비하여 백업 사본을 작성하는 데 도움이되며 로컬 지점이 원격 지점의 정확한 사본이 될 가능성이 높습니다.
greggles

큰 답변, 나에게 유용합니다. 한 Q : 공식 자식 - 체크 아웃 문서는 3 명령을해야한다는 말을 보인다 git checkout -b <branch> --track <remote>/<branch>사용하지 않을 때의 당신이 똑같이 잘 작동 --track?
Starman

1
config var branch.autoSetupMerge(기본값은 true라고 생각)가 --track암시 적이 라고 생각합니다 . 그리고 네, 모든 git 설정에서 YMMV를 --track수행 할 때 명시 적으로 필요하지 않습니다 checkout -b.
Casey Marshall

5

로컬 지점에 삭제하려는 수정 사항이있을 수 있습니다. 이렇게하려면 git reset분기 헤드를 업스트림 리포지토리에서 분기 한 마지막 지점으로 재설정 해야합니다 . git branch -v업스트림 브랜치의 sha1 id를 찾고을 사용 하여 브랜치를 재설정하십시오 git reset SHA1ID. 그런 다음 git checkout디렉토리에 남은 변경 사항을 버릴 수 있습니다 .

참고 : 항상 백업 된 리포지토리에서이 작업을 수행하십시오. 그렇게하면 자신이 제대로 작동하는지 확신 할 수 있습니다. 그렇지 않은 경우 되돌릴 백업이 있습니다.


이것은 아마도 효과가있을 것 같지만 "다른 곳에서 작업의 복사본을 만들고 원격 지점의 새로운 복사본을 만듭니다"라는 접근 방식의 단순성과 신뢰성을 감안할 때 이것이 더 나은 방법을 찾지 못했습니다.
greggles

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.