GitHub에서 분기 된 저장소를 업데이트하거나 동기화하려면 어떻게합니까?
질문
나는 프로젝트를 분리하고, 여러 수정을 적용하고 받아 들여진 풀 요청을 만들었습니다.며칠 후 다른 기여자가 다른 변화가있었습니다.그래서 내 포크에는 그 변화가 포함되어 있지 않습니다.
내 포크로 그 변화를 어떻게 얻을 수 있습니까?Contribute를 추가로 변경할 때 포크를 삭제하고 다시 만들어야합니까?아니면 업데이트 버튼이 있습니까?
답변
포크 리포지토리의 로컬 클론에서 원래의 GitHub 저장소를 "Remote"로 추가 할 수 있습니다.( "원격"은 리포지토리의 URL에 대한 별명과 같습니다. 예를 들어, Origin은 하나의 업스트림 저장소의 모든 분기를 가져올 수 있으며 업스트림 버전에서 계속 작업하기 위해 작업을 다시 제시 할 수 있습니다.다음과 같이 보일 수있는 명령 측면에서
# Add the remote, call it "upstream":
git remote add upstream https://github.com/whoever/whatever.git
# Fetch all the branches of that remote into remote-tracking branches
git fetch upstream
# Make sure that you're on your master branch:
git checkout master
# Rewrite your master branch so that any commits of yours that
# aren't already in upstream/master are replayed on top of that
# other branch:
git rebase upstream/master
마스터 지점의 기록을 다시 작성하지 않으려면 (예를 들어 다른 사람들이 복제했을 수 있으므로) 마지막 명령을 Git 병합 업스트림 / 마스터로 바꿔야합니다.그러나 가능한 한 깨끗한 요청을 추가로 끌어 올리기 위해서는 아마도 리베즈하는 것이 좋습니다.
브랜치를 업스트림 / 마스터에 리포지션 한 경우 GitHub에서 자신의 포크 리포지토리로 밀어 넣으려면 푸시를 강제로 강제로 강제해야 할 수도 있습니다.당신은 다음과 같이 할 것입니다 :
git push -f origin master
리 젝션 후 처음으로 -f를 사용할 필요가 있습니다.
답변
2014 년 5 월부터 GitHub에서 직접 포크를 업데이트 할 수 있습니다.이것은 여전히 2017 년 9 월 현재 작동하지만 더러운 커밋 기록으로 이어질 것입니다.

이제 세 가지 옵션이 있지만 각각은 클린 미만의 커밋 기록으로 이어질 것입니다.
- The default will create an ugly merge commit.
- If you click the dropdown and choose "Squash and merge", all intervening commits will be squashed into one. This is most often something you don't want.
- If you click Rebase and merge, all commits will be made "with" you, the original PRs will link to your PR, and GitHub will display
This branch is X commits ahead, Y commits behind <original fork>
.
그래서 예, 귀하는 GitHub 웹 UI를 사용하여 Repo를 업스트림으로 업데이트 할 수 있지만 그렇게하면 커밋 기록을 확립 할 수 있습니다.대신 명령 줄을 붙이십시오. 쉽습니다.
답변
포크를 동기화하는 데 GitHub의 공식 문서가 있습니다.
포크 동기화 설정 동기화하기 전에 업스트림 저장소를 가리키는 원격을 추가해야합니다. 원래 포크로 갈 때 당신은 이것을했을 것입니다. 팁 : 포크 동기화는 저장소의 로컬 사본 만 업데이트합니다. GitHub에서 저장소를 업데이트하지 않습니다. $ git 원격 -v. # 현재 원격을 나열하십시오 원점 https://github.com/user/repo.git (가져 오기) 원점 https://github.com/user/repo.git (푸시) $ git 원격 업스트림 https://github.com/otheruser/repo.git을 추가하십시오 # 새 원격을 설정하십시오 $ git 원격 -v. # 새 원격 확인 원점 https://github.com/user/repo.git (가져 오기) 원점 https://github.com/user/repo.git (푸시) 업스트림 https://github.com/otheruser/repo.git (가져 오기) 업스트림 https://github.com/otheruser/repo.git (푸시) 동기화 업스트림과 함께 저장소를 동기화하는 데 필요한 두 단계가 필요합니다. 먼저 리모컨에서 가져와야합니다. 그러면 원하는 지점을 로컬 지점에 병합해야합니다. 가져 오기 원격 저장소에서 가져 오는 것은 그 가지와 해당 커밋을 가져올 것입니다. 이들은 특별한 분기 하에서 로컬 저장소에 저장됩니다. $ git을 가져 오십시오 # 업스트림 원격의 가지를 잡아라 원격 : 객체 계산 : 75, 완료. 원격 : 객체 압축 : 100 % (53/53), 완료. 원격 : 총 62 (델타 27), 재사용 44 (델타 9) 짐을 끄는 물건 : 100 % (62/62), 완료. https://github.com/otheruser/repo에서 * [새로운 지점] 마스터 -> 업스트림 / 마스터 우리는 이제 업스트림의 마스터 브랜치가 현지 지점에 저장된 업스트림 / 마스터 $ git 지점 -va. # 모든 로컬 및 원격 추적 지점을 나열합니다 * Master A422352 내 지역의 커밋 Remotes / Origin / Head -> Origin / Master Remotees / Origin / Master A422352 내 지역 commit. Remotes / Upstream / Master 5FDFF0F 일부 상류의 커밋 합병 이제 우리는 업스트림 저장소를 가져 오는 이제 우리는 변경 사항을 로컬 지점에 병합하고자합니다. 이로 인해 현지 변화를 잃지 않고 업스트림과 동기화됩니다. $ git 체크 아웃 주인 # 로컬 마스터 지점을 확인하십시오 Branch 'Master'로 전환 $ git 병합 업스트림 / 마스터 # 업스트림의 주인을 우리 자신에 병합합니다 업데이트 A422352..5FDFF0F. 빨리 감기 Readme | 9 -------- readme.md | 7 ++++++ 2 개의 파일이 변경되었습니다. 7 삽입 (+), 9 삭제 (-) 삭제 모드 100644 Readme. 생성 모드 100644 Readme.md. 로컬 지점에 고유 한 커밋이 없었지 만 Git은 대신 "빨리 감기"를 수행합니다. $ git 병합 업스트림 / 마스터 업데이트 34E91DA..16C56AD. 빨리 감기 readme.md | 5 +++ - 1 파일 변경, 3 개의 삽입 (+), 2 삭제 (-) 팁 : GitHub에서 저장소를 업데이트하려면 여기에서 지침을 따르십시오.
답변
많은 답변이 부모 저장소를 앞당겨주는 포크를 두드리는 것입니다.이 답변은 포크를 부모와 동일한 커밋으로 이동시키는 단계를 요약합니다.
Change directory to your local repository.
- Switch to master branch if you are not
git checkout master
- Switch to master branch if you are not
Add the parent as a remote repository,
git remote add upstream <repo-location>
- Issue
git fetch upstream
Issue
git rebase upstream/master
- At this stage you check that commits what will be merged by typing
git status
- At this stage you check that commits what will be merged by typing
Issue
git push origin master
이 명령에 대한 자세한 내용은 3 단계를 참조하십시오.
답변
나처럼, 당신은 마스터에게 직접 무엇이든 커밋하지 않으면, 당신은 정말로 다음을 수행 할 수 있습니다.
포크의 로컬 클론에서 업스트림 리모컨을 만드십시오.한 번만 할 필요가 있습니다.
git remote add upstream https://github.com/whoever/whatever.git
그런 다음 업스트림 저장소 마스터 지점을 따라 잡으려는 경우가있을 때마다 다음을 수행해야합니다.
git checkout master
git pull upstream master
당신이 마스터 자신에게 아무 것도 헌신하지 않았다고 가정하면 이미 수행해야합니다.이제 로컬 마스터를 원격 원격 GitHub 포크로 밀어 넣을 수 있습니다.현재 최신 로컬 마스터에서 개발 지점을 리베이스 할 수도 있습니다.
초기 업스트림 설정 및 마스터 체크 아웃을 지나서 다음 명령을 실행하여 업스트림으로 마스터를 동기화하려면 다음 명령을 실행합니다.
답변
Foreword : 포크는 "Origin"이고 분리 된 저장소는 "업스트림"입니다.
다음과 같이 명령으로 이미 포크를 컴퓨터로 복제했다고 가정 해 봅시다.
git clone git@github.com:your_name/project_name.git
cd project_name
그렇다면 다음 순서로 계속해야합니다.
Add the "upstream" to your cloned repository ("origin"):
git remote add upstream git@github.com:original_author/project_name.git
Fetch the commits (and branches) from the "upstream":
git fetch upstream
Switch to the "master" branch of your fork ("origin"):
git checkout master
Stash the changes of your "master" branch:
git stash
Merge the changes from the "master" branch of the "upstream" into your the "master" branch of your "origin":
git merge upstream/master
Resolve merge conflicts if any and commit your merge
git commit -am "Merged from upstream"
Push the changes to your fork
git push
Get back your stashed changes (if any)
git stash pop
You're done! Congratulations!
GitHub는 또한이 주제에 대한 지침을 제공합니다 : 포크 동기화
출처:https://stackoverflow.com/questions/7244321/how-do-i-update-or-sync-a-forked-repository-on-github
최근댓글