Git에서 로컬 브랜치를 리모트 브랜치로 대체하려면 어떻게 해야 하나요?
브랜치가 2개 있습니다.
- 지역 지사(제가 함께 일하는 지점)
- remote branch(공개, 적절한 커밋만 해당)
최근에 동네 지사를 엉망으로 만들어 버렸어요.
로컬 브런치를 리모트 브런치로 완전히 대체하여 현재 리모트 브런치부터 작업을 계속할 수 있도록 하려면 어떻게 해야 합니까?
SO는 이미 검색했고, 로컬로 리모트 지점에 체크아웃을 해도 아무런 영향이 없습니다.
- 교환하는 브랜치를 체크 아웃 하고 있는 것을 확인합니다(Zoltahn의 코멘트에서).
마스터가 교환하는 로컬브런치이고, 「origin/master」가 리셋 하는 리모트브런치인 것을 전제로 합니다.
git reset --hard origin/master
로컬 master 및 ""와 동일한 리비전이 됩니다.--hard는 이 변경을 인덱스와 워크스페이스에도 동기화합니다.
아직 아무도 이 사실을 언급하지 않은 것이 놀랍습니다. 저는 거의 매일 사용하고 있습니다.
git reset --hard @{u}
으로는 ★★★★★★★★★★★★★★★★★」@{u}는 현재 브런치가 트래킹하고 있는 업스트림브런치의 줄임말입니다.를 들어, 이것은 '아까', '아까보다'와 같습니다.origin/[my-current-branch-name]이치노
★★★★★★★★★★★★★★★★★★★★★★★git fetch리모트 브랜치의 최신 카피를 취득합니다.
사이드 노트:대부분의 셸에서는 명령어는 기술된 대로 동작하지만 PowerShell 또는 csh에서 Git을 사용하는 경우에는 먼저 특수문자를 이스케이프해야 합니다.다만, 양쪽에서 문자열로 동작하는 것도 확인했습니다.예를 들어 다음과 같습니다.
git reset --hard '@{u}'
이 작업은 3단계만큼 간단합니다.
브런치를 합니다.「 」
git branch -d local_branch.「 」
git fetch origin remote_branch리모트 브런치를 기반으로 로컬브런치를 재구축합니다.
git checkout -b local_branch origin/remote_branch
git branch -D <branch-name>
git fetch <remote> <branch-name>
git checkout -b <branch-name> --track <remote>/<branch-name>
모든 것을 리모트브런치로 치환합니다.단, 로컬브런치가 있는 커밋과 같은 커밋에서만 다음 작업을 수행합니다.
git reset --hard origin/some-branch
또는 리모트 브랜치로부터 최신 정보를 입수해, 모든 것을 교환합니다.
git fetch origin some-branch
git reset --hard FETCH_HEAD
한편, 필요에 따라서, 아직 커밋하지 않은 추적되지 않은 파일이나 디렉토리를 삭제할 수 있습니다.
git clean -fd
현재 로컬 브랜치를 리모트로 교체하는 가장 안전하고 완벽한 방법:
git stash
git merge --abort
git rebase --abort
git branch -M yourBranch replaced_yourBranch
git fetch origin yourBranch:yourBranch
git checkout yourBranch
stash 않은 합니다.line은 커밋하지 않은 변경을 저장합니다.branch 이름을합니다.line은 원래 을 해방합니다.fetchline의 .checkout 만듭니다.line은 원래 브런치를트래킹브런치로 만듭니다.
또는 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}
}
현재 브랜치의 이름을 replaced_master_98d258f와 같은 것으로 변경합니다.
다양한 방법으로 할 수 있으며, 더 나은 지식의 관점을 확산시키기 위해 이 답변을 계속 편집할 수 있습니다.
1) 하드 리셋
리모트 개발 브랜치에서 작업하고 있는 경우는, 다음과 같이, 리모트 브랜치의 마지막 커밋으로 HEAD 를 리셋 할 수 있습니다.
git reset --hard origin/develop
2) 현재 브랜치를 삭제하고 리모트 저장소에서 다시 체크아웃합니다.
로컬 repo에서 리모트/개발 브랜치와 동기화하는 브랜치 개발에 임하고 있는 것을 생각하면, 다음과 같이 할 수 있습니다.
git branch -D develop
git checkout -b develop origin/develop
3) 머지의 중단
잘못된 머지(잘못된 브런치) 사이에 있는 경우, 다음과 같이 브런치로 되돌아가기 위해 머지를 회피하는 경우:
git merge --abort
4) 기본 재배치 중단
잘못된 기본 재배치 사이에 있는 경우 다음과 같이 기본 재배치 요청을 중단할 수 있습니다.
git rebase --abort
@가 말한 대로 할 @Laurent @Hugo를 사용할 .git rebase을 사용법저는 자주 쓰는 편이에요.git rebase -i head~N(N은 숫자이며 마지막 N개의 커밋을 조작할 수 있습니다).
선택한 답변은 완전히 맞지만, 최신 커밋/푸시를 남기지 않았습니다.
그래서 나는:
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 fetch -f origin rbranch:lbranch
git checkout을 실행합니다.
로컬 변경을 저장소 변경으로 대체하려면 항상 이 명령을 사용합니다.git 체크아웃 공간 닷.
선택한 설명대로 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
서브패킷은 브런치가 아닌 커밋을 가리키기 때문입니다.
이 경우 1개 이상의 서브모듈에 대해 일부 분기를 수동으로 체크아웃할 때 실행할 수 있습니다.
git submodule foreach git pull
git reset --hard
git clean -fd
이 방법은 효과가 있었습니다.삭제된 파일도 모두 깨끗하게 표시되었습니다.변경 내용이 손실될 경우 저장해야 합니다.
- git fetch origin remote_displays
- git reset --hard FETCH_HEAD
보기 흉하지만 간단한 방법: 로컬 폴더를 삭제하고 원격 저장소를 다시 복제합니다.
언급URL : https://stackoverflow.com/questions/9210446/how-to-replace-local-branch-with-remote-branch-entirely-in-git
'programing' 카테고리의 다른 글
| Bash 셸 스크립트에 문자열이 정의되어 있지 않은지 확인하는 방법 (0) | 2023.04.14 |
|---|---|
| 브라우저 창의 높이를 100%로 구분하는 방법 (0) | 2023.04.14 |
| Windows 서비스가 프로그램 방식으로 재시작하려면 어떻게 해야 합니까? (0) | 2023.04.14 |
| 명령줄에서 .bash_profile을 새로고침하는 방법 (0) | 2023.04.14 |
| python 스크립트를 실행하는 Windows 컴퓨터의 이름을 가져오고 있습니까? (0) | 2023.04.14 |