programing

현재 지점이 아닌 지점에 'git pull'하는 방법은 무엇입니까?

iphone6s 2023. 8. 10. 18:34
반응형

현재 지점이 아닌 지점에 'git pull'하는 방법은 무엇입니까?

실행할 때git pull에서master분기, 일반적으로 다음 지점에서 가져옵니다.origin/master저는 라는 다른 지점에 있습니다.newbranch하지만 나는 명령을 실행해야 합니다.git pull부터origin/master안으로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:master

여기서 origin은 리모컨이며 현재 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가 배포 도구가 아닌 이유입니다.

실제 운영 환경에서 코드를 커밋하지 않기 때문에 실제로 지점을 체크아웃할 필요가 없습니다.간단하게 다음을 수행할 수 있습니다.git fetch원격 참조를 업데이트한 다음git checkout origin/master작업 디렉토리를 현재 가리키는 커밋으로 직접 이동origin/master이것은 당신을 분리된 머리 상태로 만들 것이지만, 다시 말하지만, 당신이 코드를 커밋하지 않기 때문에, 이것은 중요하지 않습니다.

이것은 여러분이 얻을 수 있는 가장 작은 구멍이지만, 제가 말했듯이, 구멍은 여전히 존재합니다.checkout원자가 아닙니다.

다음에 대해 update-ref를 사용할 수 있습니다.

git fetch
git update-ref refs/heads/master origin/master
git checkout master

이렇게 하면 마스터 분기의 로컬 커밋이 모두 삭제됩니다.당신의 경우는 없을 것이기 때문에 괜찮습니다.로컬 커밋이 있는 곳에서 이 작업을 수행하려는 다른 사용자의 경우 병합은 현재 분기에서만 실행할 수 있기 때문에 불가능하다고 생각합니다.

git fetch origin master:master

  • (는 가져오기) "Pulls" ("Pulls")master.
  • 의 변사항있경에 가 있다면,master, 아직추 않것들은지진되,것들▁that▁aren은.origin/master마스터에 병합됩니다.
  • 병합 충돌이 있으면 먼저 해결해야 합니다.

터치하기 싫은 작업 트리가 있으므로 다른 작업 트리를 사용합니다.클론은 저렴합니다. 이를 위해 만들어졌습니다.

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

여기 있는 다른 모든 답들의 문제는 그들이 실제로 당기지 않는다는 것입니다.풀을 설정한 병합 또는 기본 재배치가 필요한 경우 다른 작업 트리와 위 절차가 필요합니다. 그냥 그지않면그냥으렇▁otherwise.git fetch; git checkout -B master origin/master 다거할거.

말비너스의 해결책은 나에게 효과가 있습니다.

$ 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 옵션으로 실행합니다.

감사해요.

언급URL : https://stackoverflow.com/questions/18994609/how-to-git-pull-into-a-branch-that-is-not-the-current-one

반응형