programing

Git에서 로컬 브랜치를 리모트 브랜치로 대체하려면 어떻게 해야 하나요?

easyjava 2023. 4. 14. 22:15
반응형

Git에서 로컬 브랜치를 리모트 브랜치로 대체하려면 어떻게 해야 하나요?

브랜치가 2개 있습니다.

  1. 지역 지사(제가 함께 일하는 지점)
  2. remote branch(공개, 적절한 커밋만 해당)

최근에 동네 지사를 엉망으로 만들어 버렸어요.

로컬 브런치를 리모트 브런치로 완전히 대체하여 현재 리모트 브런치부터 작업을 계속할 수 있도록 하려면 어떻게 해야 합니까?

SO는 이미 검색했고, 로컬로 리모트 지점에 체크아웃을 해도 아무런 영향이 없습니다.

  1. 교환하는 브랜치를 체크 아웃 하고 있는 것을 확인합니다(Zoltahn의 코멘트에서).
  2. 마스터가 교환하는 로컬브런치이고, 「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단계만큼 간단합니다.

  1. 브런치를 합니다.「 」git branch -d local_branch

  2. .「 」git fetch origin remote_branch

  3. 리모트 브런치를 기반으로 로컬브런치를 재구축합니다.

    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

이 방법은 효과가 있었습니다.삭제된 파일도 모두 깨끗하게 표시되었습니다.변경 내용이 손실될 경우 저장해야 합니다.

  1. git fetch origin remote_displays
  2. git reset --hard FETCH_HEAD

보기 흉하지만 간단한 방법: 로컬 폴더를 삭제하고 원격 저장소를 다시 복제합니다.

언급URL : https://stackoverflow.com/questions/9210446/how-to-replace-local-branch-with-remote-branch-entirely-in-git

반응형