답변:
master가 교체하려는 로컬 지점이고 "origin / master"가 재설정하려는 원격 지점이라고 가정합니다.
git reset --hard origin/master
그러면 로컬 HEAD 분기가 출발지 / 마스터와 동일한 개정으로 업데이트되고이 --hard
변경 사항을 인덱스 및 작업 영역에도 동기화합니다.
git reset
기본적으로 현재 지점을 다시 지정하고 색인을 동기화합니다. --soft
인덱스 업데이트를 건너 뛰고 --hard
작업 영역도 동기화합니다. 내 자신의 경험을 사용하고 --hard
내가 마지막 (단지 인 커밋을 취소 할 때를 제외하고는 대부분의 시간을 git reset HEAD^
)
git fetch origin remote_branch
master
이로 바뀌므로 먼저 교체하려는 지점을 확인하십시오.
세 단계만큼 쉽습니다.
git branch -d local_branch
git fetch origin remote_branch
git checkout -b local_branch origin/remote_branch
git branch -D local_branch
지점이 병합되지 않은 경우 첫 번째 단계에서 수행해야 할 수도 있습니다 .
git branch -D <branch-name>
git fetch <remote> <branch-name>
git checkout -b <branch-name> --track <remote>/<branch-name>
git help branch
말합니다 --track
. When creating a new branch, set up branch.<name>.remote and branch.<name>.merge configuration entries to mark the start-point branch as "upstream" from the new branch. This configuration will tell git to show the relationship between the two branches in git status and git branch -v. Furthermore, it directs git pull without arguments to pull from the upstream when the new branch is checked out.
나는 대답 에서이 명령을 수정했습니다. 요점을 높여 주셔서 감사합니다.
git status
하면 연결된 지점이있는 경우 로컬 지점이 원격 지점보다 앞이나 뒤에 있는지보고합니다. 또한 이미 지점을 추적하도록 설정 한 경우 전체 대신에 git pull
(또는 push
) 수행 할 수 있습니다 . git pull <remote> <branch>
<remote/branch>
원격 브랜치로 모든 것을 교체하십시오. 그러나 로컬 커밋이 같은 커밋에서만 :
git reset --hard origin/some-branch
또는 원격 지점에서 최신 정보 를 얻고 모든 것을 교체하십시오.
git fetch origin some-branch
git reset --hard FETCH_HEAD
또한 필요한 경우 아직 커밋하지 않은 추적되지 않은 파일 및 디렉토리를 지울 수 있습니다.
git clean -fd
git clean
명령은 나를 위해 그것을했다. git reset hard origin/master
추적되지 않은 파일을 지우지 마십시오. 감사!
현재 로컬 브랜치를 원격으로 교체하는 가장 안전하고 완벽한 방법 :
git stash
git merge --abort
git rebase --abort
git branch -M yourBranch replaced_yourBranch
git fetch origin yourBranch:yourBranch
git checkout yourBranch
stash
줄은 커밋되지 않은 변경 사항을 저장합니다. branch
라인은 원래 이름을 확보, 다른 이름으로 지점을 이동합니다. fetch
라인은 원격의 최신 복사본을 검색합니다. 이 checkout
선은 원래 분기를 추적 분기로 다시 만듭니다.
또는 bash 함수로 :
replaceWithRemote() {
yourBranch=${1:-`git rev-parse --abbrev-ref HEAD`}
git stash
git merge --abort
git rebase --abort
git branch -M ${yourBranch} replaced_${yourBranch}_`git rev-parse --short HEAD`
git fetch origin ${yourBranch}:${yourBranch}
git checkout ${yourBranch}
}
현재 분기의 이름이 replace_master_98d258f와 같은 이름으로 바뀝니다.
git stash pop
해당 워크 플로우 에 포함시킬 수 있습니다 . 숨김 파일을 다시 적용하려는 경우
아직 아무도 이것을 언급하지 않은 것에 놀랐습니다. 나는 거의 매일 그것을 사용합니다 :
git reset --hard @{u}
기본적으로 @{u}
현재 지점에서 추적하는 업스트림 지점의 약어입니다. 예를 들어, 이것은 일반적으로와 같습니다 origin/[my-current-branch-name]
. 가지에 구애받지 않기 때문에 좋습니다.
에 있는지 확인 git fetch
원격 브랜치의 최신 복사본을 얻을 첫번째.
더 나은 지식 관점을 전파하기 위해이 답변을 계속 편집하여 여러 가지 방법으로 수행 할 수 있습니다.
1) 하드 리셋
원격 개발 브랜치에서 작업중인 경우 다음과 같이 HEAD를 원격 브랜치의 마지막 커밋으로 재설정 할 수 있습니다.
git reset --hard origin/develop
2) 현재 브랜치를 삭제하고 원격 저장소에서 다시 체크 아웃하십시오.
원격 / 개발 지점과 동기화되는 로컬 리포지토리에서 지점을 개발하고 있다고 생각하면 다음과 같이 할 수 있습니다.
git branch -D develop
git checkout -b develop origin/develop
3) 중단 병합
잘못된 병합 사이에 있고 (잘못 잘못된 분기로 수행됨) 병합이 다음과 같이 최신 지점으로 다시 돌아가는 것을 피하려는 경우 :
git merge --abort
4) 중단 rebase
불량한 리베이스 사이에있는 경우 다음과 같이 리베이스 요청을 중단 할 수 있습니다.
git rebase --abort
선택한 대답은 절대적으로 올바른 그러나 그것은 / 커밋 최신으로 밀어 나를 떠나지 않았다, ...
그래서 나를 위해 :
git reset --hard dev/jobmanager-tools
git pull ( did not work as git was not sure what branch i wanted)
몇 주 동안 업스트림 브랜치를 특정 브랜치로 일시적으로 설정하고 싶다는 것을 알고 있기 때문에 (이전에 전환 / 체크 아웃하고 하드 리셋을 한 것과 동일)
따라서 재설정 후
git branch --set-upstream-to=origin/dev/jobmanager-tools
git pull
git status ( says--> on branch dev/jobmanager-tools
선택한 설명에 제공된대로 git reset 이 좋습니다. 그러나 오늘날 우리는 종종 서브 모듈을 사용합니다 : 리포지토리 내부의 리포지토리. 예를 들어, 프로젝트에서 ZF3 및 jQuery를 사용하는 경우 원래 리포지토리에서 복제 할 수 있습니다. 이 경우 git reset 으로 충분하지 않습니다. 저장소에 정의 된 정확한 버전으로 하위 모듈을 업데이트해야합니다.
git checkout master
git fetch origin master
git reset --hard origin/master
git pull
git submodule foreach git submodule update
git status
각 하위 모듈의 작업 디렉토리로 재귀 적으로 와서 (cd) 다음과 같이 실행됩니다.
git submodule update
그리고 그것은 매우 다릅니다
git checkout master
git pull
하위 모듈은 분기가 아니라 커밋을 가리 키기 때문입니다.
이 경우 하나 이상의 하위 모듈에 대한 일부 분기를 수동으로 체크 아웃하면 실행할 수 있습니다
git submodule foreach git pull
git reset --hard
. 이것은 작은 가치를 추가합니다.
추악하지만 간단한 방법 : 로컬 폴더를 삭제하고 원격 저장소를 다시 복제하십시오.