당신이 실행하면 git pull
온 master
지점, 그것은 일반적으로 가져옵니다 origin/master
. 라는 다른 분기 newbranch
에 있지만 git pull
from origin/master
into 를 수행하는 명령을 실행해야 master
하지만 git checkout
끌어 오기가 완료 될 때까지 선택한 분기를 변경하기 위해 실행할 수 없습니다 . 이를 수행하는 방법이 있습니까?
배경 지식을 제공하기 위해 저장소는 웹 사이트를 저장합니다. newbranch
웹 사이트를로 전환하여 일부를 변경 하고 배포했습니다 newbranch
. 이제 이러한 변경 사항이 업스트림 master
지점 에 병합되었으므로 웹 사이트도 master
지점으로 다시 전환하려고합니다 . 이 시점에서 newbranch
와 origin/master
동일하지만 master
뒤쳐져 origin/master
과 요구를 업데이트 할 수 있습니다. 문제는 제가 전통적인 방식으로하면 다음과 같습니다.
$ git checkout master
# Uh oh, production website has now reverted back to old version in master
$ git pull
# Website is now up to date again
위의 ( git checkout master && git pull
) 와 동일 하지만 프로세스 중에 작업 디렉토리를 이전 버전으로 변경하지 않고 달성해야합니다 .
답변
만지고 싶지 않은 작업 트리가 있으므로 다른 작업 트리를 사용하십시오. 클론은 저렴하며이를 위해 구축되었습니다.
git fetch origin master # nice linear tree
git clone . ../wip -b master # wip's `origin/master` is my `master`
cd ../wip # .
git pull origin origin/master # merge origin's origin/master
git push origin master # job's done, turn it in.
cd ../main
rm -rf ../wip # wip was pushed here, wip's done
git checkout master # payload
여기에있는 다른 모든 답변의 문제는 실제로 당기지 않는다는 것입니다. 풀을 설정 한 병합 또는 리베이스가 필요한 경우 다른 워크 트리와 위의 절차가 필요합니다. 그렇지 않으면 그냥 git fetch; git checkout -B master origin/master
할 것입니다.
답변
간단 함 : 원격 지점에서 현재 체크 아웃되지 않은 지점 마스터로 업데이트 :
git fetch origin master:master
어디에서 기원은 원격이고 당신은 현재 몇 가지 예에서 체크 아웃 된 DEV .
한 번에 지정된 분기 외에 현재 분기를 업데이트하려면 다음을 수행하십시오.
git pull origin master:master
답변
여기에 대한 답변 :
체크 아웃을 사용하지 않고 Git 브랜치를 병합, 업데이트 및 가져 오기
# Merge local branch foo into local branch master,
# without having to checkout master first.
# Here `.` means to use the local repository as the "remote":
git fetch . foo:master
# Merge remote branch origin/foo into local branch foo,
# without having to checkout foo first:
git fetch origin foo:foo
답변
결과적으로 대답은 믿을 수 없을 정도로 간단합니다.
$ git fetch # Update without changing any files
$ git branch -d master # Remove out-of-date 'master' branch
$ git checkout --track origin/master # Create and check out up-to-date 'master' branch
이렇게하면 업데이트 할 수 있습니다 master
때까지로 전환하지 않고 분기 이후 가 업데이트되었습니다.
답변
Git 작업은 원 자성이 아니기 때문에 수정할 수없는 문제에 대해 걱정하고 있습니다. 먼저 마스터로 전환하지 않고 마스터를 업데이트하더라도 작업 디렉토리가 분기 사이의 중간에 항상 구멍이 있습니다 . 이것이 Git이 배포 도구가 아닌 이유 입니다.
프로덕션 환경에서 실제로 코드를 커밋하지 않기 때문에 (희망) 실제로 브랜치를 체크 아웃 할 필요 가 없습니다 . 간단히 a git fetch
를 수행 하여 원격 참조 를 업데이트 한 다음 git checkout origin/master
작업 디렉토리 를 현재에서 가리키는 커밋으로 직접 이동할 수 origin/master
있습니다. 이렇게하면 분리 된 헤드 상태가되지만 코드를 커밋하지 않기 때문에 문제가되지 않습니다.
이것은 여러분이 얻을 수있는 가장 작은 구멍이지만 제가 말했듯이 구멍은 여전히 존재합니다. checkout
원자가 아닙니다.
답변
이를 위해 update-ref를 사용할 수 있습니다.
git fetch
git update-ref refs/heads/master origin/master
git checkout master
이렇게하면 마스터 브랜치의 모든 로컬 커밋이 삭제됩니다. 귀하의 경우에는 아무것도 없을 것이므로 괜찮습니다. 로컬 커밋이있는 곳에서이를 수행하려는 다른 사람들에게는 병합이 현재 브랜치에서만 실행될 수 있기 때문에 가능하지 않다고 생각합니다.
답변
Malvineous의 솔루션이 나를 위해 작동합니다.
$ git fetch # Update without changing any files $ git branch -d master # Remove out-of-date 'master' branch $ git checkout --track origin/master # Create and check out up-to-date 'master' branch
그냥 오류를 줘
warning: not deleting branch 'master' that is not yet merged to
'refs/remotes/origin/master', even though it is merged to HEAD.
error: The branch 'master' is not fully merged.
If you are sure you want to delete it, run 'git branch -D master'.
그래서 나는 -D 옵션으로 실행합니다.
감사