programing

체크 아웃하지 않고 힘내 풀?

nasanasas 2020. 9. 21. 07:47
반응형

체크 아웃하지 않고 힘내 풀?


나는 작업중 인 브랜치 내에서 git pull 및 기타 명령을 실행하는 데 익숙합니다. 하지만 여러 사람이 작업하는 개발 서버를 설정했기 때문에 작업 할 때 분기를 전환 할 필요가 없습니다. 우리 모두가 사용하는 github 저장소에서 dev 서버의 기존 브랜치를 업데이트하려면 올바른 방법은 무엇입니까? 'git pull github branchname'명령을 실행하면 분기를 현재 분기로 끌어 올 수 있습니까?

내가 찾을 수있는 모든 git 예제는 먼저 'checkout branchname'을 실행 한 다음 풀을 수행하는 것으로 보입니다. 나는 그것을 피하려고 노력하고 있습니다. 내가 말했듯이 이것은 기존 브랜치이며 최신 버전으로 업데이트하고 싶습니다.


나는 똑같은 것을 찾고 있었고 마침내 다른 stackoverflow 게시물에서 나를 위해 일한 답을 찾았습니다 : 체크 아웃을 사용하지 않고 Git 브랜치를 병합, 업데이트 및 가져 오기

원래:

git fetch <remote> <srcBranch>:<destBranch>


나는 현재 기능 변경 사항을 커밋하거나 숨기고, 마스터 브랜치를 체크 아웃하고 , pull명령을 수행하여 원격에서 로컬 master작업 공간으로 모든 것을 가져온 다음 다시 기능 브랜치로 전환하고 A를 수행하여 최신 상태로 유지해야한다는 매우 동일한 문제가 발생 rebase했습니다. 석사.

이 모든 작업을 수행하려면 작업 영역을 기능 분기에 유지하고 모든 전환을 피하십시오.

git fetch origin master:master

git rebase master

그리고 그것은 트릭을 훌륭하게 수행합니다.


사용하다

git fetch

대신. 리포지토리의 원격 참조 및 객체를 업데이트하지만 로컬 분기, HEAD 및 작업 트리는 그대로 둡니다.


에서 지역 지점 팁을 다시 가리 키도록 git fetch하려면 몇 가지 추가 단계가 필요합니다.

보다 구체적으로는 github의의 REPO는 가지가 가정 D, B, C,과 master(이 홀수 지사 이름 세트에 대한 이유는 한 순간에 분명 할 것이다). 당신은 호스트에 devhost있고 origingithub 저장소가있는 저장소에 있습니다. 당신은 할 git fetch모든 것을 객체 및 업데이트를 제공하는, origin/D, origin/B, origin/C,와 origin/master. 여태까지는 그런대로 잘됐다. 그러나 지금 당신은 당신이 뭔가에, 일이하고 싶은 말은 devhost에, 지방 지사 D, B, C, 및 / 또는 master?

나는 (어쨌든 나에게) 다음과 같은 명백한 질문이 있습니다.

  1. 모든 지점 의 팁을 업데이트 하려는 이유무엇 입니까?
  2. 일부 분기 (예 B:)에 원격 (github) 저장소에없는 커밋이있는 경우 어떻게됩니까? 병합, 리베이스 또는 ...?
  3. 일부 브랜치 (예 :)에 C있고 작업 디렉토리 및 / 또는 색인이 수정되었지만 커밋되지 않은 경우 어떻게됩니까?
  4. 원격 저장소에 새 분기가 추가 ( A)되거나 분기가 삭제 ( D) 되면 어떻게 됩니까?

(1)에 대한 답이 " devhost실제로 개발을위한 것이 아니기 때문 이 아니라 단순히 로컬에서 사용 가능한 github 저장소 사본을 보관하는 로컬 미러이므로 모든 실제 개발자가 천천히 읽는 대신 빠르게 읽을 수 있습니다. github "이면"일반 "저장소가 아닌"미러 "가 필요합니다. 작업 디렉토리가 없어야하며 푸시도 허용하지 않아야합니다.이 경우 나머지 질문은 사라집니다.

다른 답이 있으면 (2-4) 문제가됩니다.

어쨌든 다음은 원격 참조를 기반으로 로컬 참조를 업데이트하는 방법 git fetch -p입니다 (예를 들어 실행 한 후 ).

for ref in $(git for-each-ref refs/remotes/origin/ --format '%(refname)'); do
    local=${ref#refs/remotes/origin/}
    ... code here ...
done

... code here ...섹션 내용은 질문에 대한 답변에 따라 다릅니다 (2-4).


편집 : 'git pull'사용 그것은 저장소에서 모든 분기를 가져오고 현재 분기에 대해서만 분기가 로컬 시스템에서 종료되면 최신으로 업데이트합니다. 참고 : git pull은 모든 브랜치를 가져 오지만 현재 브랜치 만 병합하는 fetch + merge와 동일합니다.

참고 URL : https://stackoverflow.com/questions/18857570/git-pull-without-checkout

반응형