프로젝트를 분기하고 몇 가지 수정 사항을 적용하고 수락된 pull 요청을 만들었습니다. 며칠 후 다른 기여자가 또 다른 변경 사항을 적용했습니다. 따라서 내 포크에는 해당 변경 사항이 포함되어 있지 않습니다.
변경 사항을 내 포크로 가져오려면 어떻게 해야 합니까? 기여할 추가 변경 사항이 있는 경우 포크를 삭제하고 다시 생성해야 합니까? 아니면 업데이트 버튼이 있나요?
질문자 :Lea Hayes
프로젝트를 분기하고 몇 가지 수정 사항을 적용하고 수락된 pull 요청을 만들었습니다. 며칠 후 다른 기여자가 또 다른 변경 사항을 적용했습니다. 따라서 내 포크에는 해당 변경 사항이 포함되어 있지 않습니다.
변경 사항을 내 포크로 가져오려면 어떻게 해야 합니까? 기여할 추가 변경 사항이 있는 경우 포크를 삭제하고 다시 생성해야 합니까? 아니면 업데이트 버튼이 있나요?
답변자 : Mark Longair
분기된 리포지토리의 로컬 클론에서 원본 GitHub 리포지토리를 "원격"으로 추가할 수 있습니다. ("Remotes"는 저장소의 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 merge upstream/master
바꿔야 합니다. 그러나 가능한 한 깨끗한 추가 pull 요청을 하려면 리베이스하는 것이 더 나을 것입니다.
upstream/master
로 리베이스한 경우 GitHub에서 분기된 자체 저장소로 푸시하기 위해 푸시를 강제해야 할 수 있습니다. 당신은 그것을 할 것입니다:
git push -f origin master
rebase한 후에 처음으로 -f
를 사용해야 합니다.
답변자 : lobzik
2014년 5월부터 GitHub에서 직접 포크를 업데이트할 수 있습니다. 이것은 2017년 9월 현재까지 작동 하지만 커밋 기록이 더러워집니다.
Update from original
).이제 세 가지 옵션이 있지만 각각은 덜 깨끗한 커밋 기록으로 이어집니다.
This branch is X commits ahead, Y commits behind <original fork>
.예, GitHub 웹 UI를 사용하여 리포지토리를 업스트림으로 업데이트할 수 있지만 그렇게 하면 커밋 기록이 더럽혀집니다. 대신 명령줄을 사용하세요. 쉽습니다.
답변자 : jumpnett
다음은 포크 동기화에 대한 GitHub의 공식 문서입니다.
포크 동기화
설정
동기화하기 전에 업스트림 저장소를 가리키는 리모컨을 추가해야 합니다. 원래 포크할 때 이 작업을 수행했을 수 있습니다.
팁: 포크를 동기화하면 저장소의 로컬 복사본만 업데이트됩니다. GitHub의 저장소를 업데이트하지 않습니다.
$ git remote -v # List the current remotes origin https://github.com/user/repo.git (fetch) origin https://github.com/user/repo.git (push) $ git remote add upstream https://github.com/otheruser/repo.git # Set a new remote $ git remote -v # Verify new remote origin https://github.com/user/repo.git (fetch) origin https://github.com/user/repo.git (push) upstream https://github.com/otheruser/repo.git (fetch) upstream https://github.com/otheruser/repo.git (push)
동기화 중
저장소를 업스트림과 동기화하는 데 필요한 두 가지 단계가 있습니다. 먼저 원격에서 가져와야 하고 원하는 분기를 로컬 분기에 병합해야 합니다.
가져오기
원격 저장소에서 가져오면 분기와 해당 커밋이 가져옵니다. 이들은 특수 분기 아래의 로컬 저장소에 저장됩니다.
$ git fetch upstream # Grab the upstream remote's branches remote: Counting objects: 75, done. remote: Compressing objects: 100% (53/53), done. remote: Total 62 (delta 27), reused 44 (delta 9) Unpacking objects: 100% (62/62), done. From https://github.com/otheruser/repo * [new branch] master -> upstream/master
이제 업스트림의 마스터 브랜치가 로컬 브랜치인 upstream/master에 저장되었습니다.
$ git branch -va # List all local and remote-tracking branches * master a422352 My local commit remotes/origin/HEAD -> origin/master remotes/origin/master a422352 My local commit remotes/upstream/master 5fdff0f Some upstream commit
병합
이제 업스트림 리포지토리를 가져왔으므로 변경 사항을 로컬 브랜치에 병합하려고 합니다. 이렇게 하면 로컬 변경 사항을 잃지 않고 해당 분기를 업스트림과 동기화할 수 있습니다.
$ git checkout master # Check out our local master branch Switched to branch 'master' $ git merge upstream/master # Merge upstream's master into our own Updating a422352..5fdff0f Fast-forward README | 9 ------- README.md | 7 ++++++ 2 files changed, 7 insertions(+), 9 deletions(-) delete mode 100644 README create mode 100644 README.md
로컬 브랜치에 고유한 커밋이 없으면 git은 대신 "빨리 감기"를 수행합니다.
$ git merge upstream/master Updating 34e91da..16c56ad Fast-forward README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
팁: GitHub에서 리포지토리를 업데이트하려면 여기의 지침을 따르세요.
답변자 : Sahar Rabinoviz
많은 답변이 결국 상위 리포지토리 보다 한 커밋 앞서 포크를 이동합니다. 이 답변은 발견 단계 요약여기에 동일하게 포크를 이동합니다 부모 커밋을.
디렉토리를 로컬 저장소로 변경하십시오.
git checkout master
가 아닌 경우 master 브랜치로 전환 부모를 원격 저장소로 추가하고 git remote add upstream <repo-location>
git fetch upstream
git rebase upstream/master
발행
git status
를 입력하여 병합할 내용을 커밋하는지 확인합니다. git push origin master
발행
이러한 명령에 대한 자세한 내용은3단계를 참조하십시오.
답변자 : Slion
나처럼 master 에 직접 커밋하지 않는 경우 실제로 해야 하는 경우 다음을 수행할 수 있습니다.
포크의 로컬 클론에서 업스트림 리모컨을 만듭니다. 한 번만 수행하면 됩니다.
git remote add upstream https://github.com/whoever/whatever.git
그런 다음 업스트림 리포지토리 마스터 브랜치를 따라잡고 싶을 때마다 다음을 수행해야 합니다.
git checkout master git pull upstream master
마스터 자신에게 아무 것도 저지른 적이 없다고 가정하면 이미 완료되어야 합니다. 이제 로컬 마스터를 원본 원격 GitHub 포크로 푸시할 수 있습니다. 현재 최신 로컬 마스터에서 개발 분기를 리베이스할 수도 있습니다.
초기 업스트림 설정 및 마스터 체크아웃 이후에 다음 명령을 실행하여 마스터를 업스트림과 동기화하기만 하면 됩니다. git pull upstream master .
답변자 : Benny Neugebauer
서문: 포크는 "원본"이고 포크한 저장소는 "업스트림"입니다.
다음과 같은 명령을 사용하여 이미 포크를 컴퓨터에 복제했다고 가정해 보겠습니다.
git clone git@github.com:your_name/project_name.git cd project_name
이것이 주어지면 다음 순서로 계속해야 합니다.
복제된 저장소("원본")에 "업스트림"을 추가합니다.
git remote add upstream git@github.com:original_author/project_name.git
"업스트림"에서 커밋(및 분기)을 가져옵니다.
git fetch upstream
포크의 "마스터" 분기("원본")로 전환합니다.
git checkout master
"마스터" 브랜치의 변경 사항을 숨깁니다.
git stash
"업스트림"의 "마스터" 브랜치에서 "원본"의 "마스터" 브랜치로 변경 사항을 병합합니다.
git merge upstream/master
병합 충돌이 있는 경우 해결하고 병합을 커밋합니다.
git commit -am "Merged from upstream"
변경 사항을 포크로 푸시
git push
숨긴 변경 사항을 되돌립니다(있는 경우).
git stash pop
완료되었습니다! 축하합니다!
GitHub는 이 주제에 대한 지침도 제공합니다 . 포크 동기화
답변자 : isedwards
2013년 11월부터 GitHub에 로컬 포크를 업스트림과 동기화하도록 매우 간단하고 직관적인 방법을 추가하도록 요청하는 비공식 기능 요청이 있었습니다.
https://github.com/isaacs/github/issues/121
참고: 기능 요청은 비공식적이므로 구현될 이와 같은 기능에 대한 지원을 추가하려면 support@github.com
위의 비공식 기능 요청은 구현되고 있는 관심 금액의 증거로 사용될 수 있습니다.
답변자 : Lucero
이 답변의 날짜를 기준으로 GitHub에는 웹 인터페이스에서 이 기능이 없습니다. support@github.com
에 이에 대한 투표를 추가하도록 요청할 수 있습니다.
그 동안 GitHub 사용자 bardiharborow는 이를 수행하는 도구를 만들었습니다. https://upriver.github.io/
답변자 : Shital Shah
Windows 또는 Mac용 GitHub를 사용하는 경우 이제 한 번의 클릭으로 포크를 업데이트할 수 있는 기능이 있습니다.
답변자 : Gonçalo Peres 龚燿禄
GitHub의 webapp에서 수행하는 방법이 있습니다.
다음 예를 살펴보겠습니다.
시작하려면 업데이트하려는 리포지토리를 엽니다.
하나는 경고를 볼 수 있습니다
이 분기는 GoogleCloudPlatform:master 뒤에 있는 157개의 커밋입니다.
Pull request
와 Compare
두 개의 버튼이 있습니다. Compare
누릅니다.
비교 대상이 없을 수 switching the base
Create pull request
버튼을 눌러 풀 리퀘스트를 생성할 수 있습니다.
제목을 지정하고 "리포지토리 업데이트"라고 말합시다.
그리고 풀 리퀘스트를 생성합니다.
요청이 생성되면 맨 아래로 스크롤하여 Merge pull request
누릅니다.
병합을 확인하면 끝입니다!
답변자 : max630
실제로 브라우저의 업스트림 커밋에서 분기를 생성할 수 있습니다.
https://github.com/<repo>/commits/<hash>
엽니다. 여기서 repo 는 포크이고 hash 는 업스트림 웹 인터페이스에서 찾을 수 있는 커밋의 전체 해시입니다. 예를 들어 https://github.com/max630/linux/commits/0aa0313f9d576affd7747cc3f179feb097d28990 을 열 수 있으며 이는 작성 시점으로 linux
master
를 가리킵니다.그런 다음 해당 분기를 로컬 클론으로 가져올 수 있으며 해당 커밋 위에 편집을 푸시할 때 모든 데이터를 GitHub로 다시 푸시할 필요가 없습니다. 또는 웹 인터페이스를 사용하여 해당 분기에서 무언가를 변경하십시오.
작동 방식(추측입니다. GitHub가 정확히 어떻게 작동하는지 모르겠습니다): 포크는 객체 스토리지를 공유하고 네임스페이스 를 사용하여 사용자의 참조를 분리합니다. 따라서 포크할 때 존재하지 않았더라도 포크를 통해 모든 커밋에 액세스할 수 있습니다.
답변자 : Rafael Z. B. Bravo
다음 한 줄로 분기된 저장소를 업데이트합니다.
git pull https://github.com/forkuser/forkedrepo.git branch
여기에 게시된 다른 솔루션과 같이 프로젝트에 다른 원격 끝점을 추가하지 않으려면 이것을 사용하십시오.
답변자 : Madhu Bhat
GitHub는 이제 버튼 클릭으로 포크를 동기화하는 기능을 도입했습니다 .
포크로 이동하여 Fetch upstream
을 클릭한 다음 Fetch and merge
를 클릭하여 포크를 상위 리포지토리와 직접 동기화합니다.
병합하기 전에 변경 사항을 비교하기 위해 Compare
버튼을 클릭할 수도 있습니다.
참고 : GitHub의 트윗
답변자 : Venkat.R
아래 단계를 따르세요. 나는 그것들을 시도했고 그것은 나를 도왔다.
지점으로 체크아웃
구문: git branch yourDevelopmentBranch
예: git 체크아웃 마스터
최신 코드를 가져오기 위한 풀 소스 저장소 분기
구문: git pull https://github.com/tastejs/awesome-app-ideas 마스터
예: git pull https://github.com/ORIGINAL_OWNER/ORIGINAL_REPO.git BRANCH_NAME
답변자 : Thomas Guyot-Sionnest
이 답변을 보완하기 위해 업스트림 분기에서 복제된 저장소( origin )의 모든 원격 분기를 한 번에 업데이트하는 방법을 찾고 있었습니다. 이것이 내가 한 방법입니다.
이것은 소스 저장소(origin 이 분기된 곳)를 가리키는 업스트림 원격을 이미 구성 git fetch upstream
과 동기화했다고 가정합니다.
그런 다음 다음을 실행합니다.
for branch in $(git ls-remote --heads upstream|sed 's#^.*refs/heads/##'); do git push origin refs/remotes/upstream/$branch:refs/heads/$branch; done
이 명령의 첫 번째 부분은 업스트림 원격 저장소의 모든 헤드를 나열하고 SHA-1 다음에 refs/heads/
분기 이름 접두사를 제거합니다.
그런 다음 이러한 각 분기에 대해 업스트림 원격 추적 분기(로컬 측의 refs/remotes/upstream/<branch>
의 로컬 복사본을 원점 의 원격 분기( 원격 측의 refs/heads/<branch>
).
이러한 분기 동기화 명령 중 하나는 업스트림 분기가 다시 작성되었거나 해당 분기의 커밋을 포크로 푸시한 두 가지 이유 중 하나로 인해 실패할 수 있습니다. 포크의 분기에 아무 것도 커밋하지 않은 첫 번째 경우에는 강제로 푸시하는 것이 안전합니다( -f 스위치 추가, 즉 위 명령에서 git push -f
다른 경우에는 포크 분기가 분기되어 정상이며 커밋이 upstream 으로 다시 병합될 때까지 sync 명령이 작동할 것으로 기대할 수 없습니다.
답변자 : krlmlr
"Pull" 앱 은 자동으로 설정하고 잊어버리는 솔루션입니다. 포크의 기본 분기를 업스트림 저장소와 동기화합니다.
URL을 방문하여 녹색 "설치" 버튼을 클릭하고 자동 동기화를 활성화할 저장소를 선택합니다.
분기는 GitHub에서 직접 시간당 한 번 업데이트되며, 로컬 컴퓨터에서 마스터 분기를 가져와 로컬 복사본이 동기화되었는지 확인해야 합니다.
답변자 : prosti
업스트림을 설정하는 경우. git remote -v
확인하면 충분합니다.
git fetch upstream git checkout master git merge --no-edit upstream/master git push
답변자 : Prateek Chanda
분기된 저장소를 복제했으면 복제가 있는 디렉터리 경로와 Git Bash 터미널의 몇 줄로 이동합니다.
$ cd project-name $ git remote add upstream https://github.com/user-name/project-name.git # Adding the upstream -> the main repo with which you wanna sync $ git remote -v # you will see the upstream here $ git checkout master # see if you are already on master branch $ git fetch upstream
그리고 거기에 가면 좋습니다. 기본 리포지토리에서 업데이트된 모든 변경 사항은 포크 리포지토리로 푸시됩니다.
"fetch" 명령은 프로젝트에서 최신 상태를 유지하는 데 필수 불가결합니다. "git fetch"를 수행할 때만 동료가 원격 서버에 푸시한 변경 사항에 대한 정보를 얻을 수 있습니다.
추가 쿼리를 위해 여기 를 방문할 수 있습니다.
답변자 : alexshr
Android Studio는 이제 GitHub 포크 리포지토리를 사용하는 방법을 배웠습니다(콘솔 명령으로 "업스트림" 원격 리포지토리를 추가할 필요도 없음).
메뉴 열기 VCS → Git
그리고 마지막 두 개의 팝업 메뉴 항목에 주의하십시오.
내 GitHub 포크 리베이스
풀 리퀘스트 생성
그들을 시도하십시오. 첫 번째 것을 사용하여 로컬 저장소를 동기화합니다. 어쨌든 "Rebase my GitHub fork"를 클릭하면 상위 원격 저장소("업스트림")의 분기에 액세스할 수 있으며 쉽게 작업할 수 있습니다.
(저는 "Git 통합" 및 "GitHub" 플러그인과 함께 Android Studio 3.0을 사용합니다.)
답변자 : s0nicYouth
이는 저장소의 크기와 포크 방법에 따라 다릅니다.
꽤 큰 저장소라면 특별한 방법(예: 삭제 기록)으로 관리하기를 원했을 것입니다. 기본적으로 현재 버전과 업스트림 버전 간의 차이점을 확인하고 커밋한 다음 다시 마스터로 선택할 수 있습니다.
이것을 읽어보십시오. 큰 Git 리포지토리를 처리하는 방법과 최신 변경 사항으로 업스트림하는 방법을 설명합니다.
답변자 : Saurabh P Bhandari
처음에 분기된 저장소에는 master
라는 브랜치가 하나 있습니다. 새 기능이나 수정 사항에 대해 작업하는 경우 일반적으로 새 분기 feature
을 만들고 변경합니다.
분기된 리포지토리가 상위 리포지토리와 동기화되도록 하려면 다음과 같이 풀 앱 ( 기능 분기에 pull.yml
)에 대한 구성 파일( pull.yml )을 설정할 수 있습니다.
version: "1" rules: - base: feature upstream: master mergeMethod: merge - base: master upstream: parent_repo:master mergeMethod: hardreset
master
브랜치가 상위 리포지토리와 함께 최신 상태로 유지됩니다. 분기된 저장소 feature
분기를 병합하여 분기된 저장소 master
분기를 통해 업데이트된 상태로 유지합니다. feature
분기가 구성 파일을 포함하는 기본 분기라고 가정합니다.
여기서 두 mergemethods
하나이고, 재생에있다 hardreset
구동력 동기 변화 도와 master
인 상위 REPO 다른 방법과 REPO 갈래의 분기 merge
. feature
master
분기에서 강제 동기화로 인해 수행된 변경 사항을 병합하는 데 사용됩니다. 병합 충돌의 경우 풀 앱을 사용하면 풀 요청 중에 다음 작업 과정을 선택할 수 있습니다.
여기에서 기본 및 고급 구성과 다양한 mergemethods
에 대해 읽을 수 있습니다.
나는 현재 내 갈래의 repo에서이 구성을 사용하고 여기에 있는지 향상 요청하기 위해 여기에 숙박이 업데이트되었습니다.
답변자 : Ilyich
포크가 https://github.com/me/foobar 이고 원본 저장소가 https://github.com/someone/foobar 라고 가정합니다.
방문 https://github.com/me/foobar/compare/master...someone:master
Able to merge
수 있다는 녹색 텍스트가 표시되면 풀 리퀘스트 생성 을 누릅니다.
다음 페이지에서 페이지 하단으로 스크롤하여 Merge pull request 및 Confirm merge 를 클릭합니다.
답변자 : Chetabahana
분기된 저장소를 항상 업데이트하도록 유지하는 데에는 두 가지 주요 사항이 있습니다.
1. 포크 마스터에서 분기를 만들고 거기에서 변경합니다 .
따라서 풀 요청 이 수락되면 제공한 코드가 업스트림으로 업데이트할 때 분기된 리포지토리의 마스터에 라이브이므로 안전하게 분기를 삭제할 수 있습니다. 이것에 의해 당신의 주인은 다른 변화를 하기 위해 새로운 분기를 만들기 위해 항상 깨끗한 상태에 있을 것입니다.
2. 포크 마스터가 자동으로 업데이트 를 수행하도록 예약된 작업 을 생성합니다.
이것은 cron 으로 할 수 있습니다. 다음은 Linux에서 수행하는 경우의 예제 코드입니다.
$ crontab -e
이 코드를 crontab file
에 넣어 시간 단위로 작업을 실행합니다.
0 * * * * sh ~/cron.sh
cron.sh
스크립트 파일과 ssh-agent 와의 자식 상호 작용 을 생성하고 아래와 같이 예상합니다.
#!/bin/sh WORKDIR=/path/to/your/dir REPOSITORY=<name of your repo> MASTER="git@github.com:<username>/$REPOSITORY.git" UPSTREAM=git@github.com:<upstream>/<name of the repo>.git cd $WORKDIR && rm -rf $REPOSITORY eval `ssh-agent` && expect ~/.ssh/agent && ssh-add -l git clone $MASTER && cd $REPOSITORY && git checkout master git remote add upstream $UPSTREAM && git fetch --prune upstream if [ `git rev-list HEAD...upstream/master --count` -eq 0 ] then echo "all the same, do nothing" else echo "update exist, do rebase!" git reset --hard upstream/master git push origin master --force fi cd $WORKDIR && rm -rf $REPOSITORY eval `ssh-agent -k`
분기된 저장소를 확인하십시오. 때때로 항상 다음 알림이 표시됩니다.
이 분기는
<upstream>
:master 에도 있습니다.
답변자 : Do Nhu Vy
이 명령을 사용하십시오(운이 좋은 경우).
git remote -v git pull git fetch upstream git checkout master git merge upstream/master --no-ff git add . git commit -m"Sync with upstream repository." git push -v
답변자 : Tuntable
rm -rf oldrepository git clone ...
더 미묘한 옵션이 있을 수 있지만 내 로컬 저장소가 업스트림과 동일하다는 확신을 가질 수 있는 유일한 방법입니다.
답변자 : Kumar Gaurav
답변자 : Gangula
GitHub Desktop을 사용한다면 6단계(실제로는 5단계)만 있으면 쉽게 할 수 있습니다.
Github Desktop을 열고 저장소를 선택하면
master
/ branch-name
에서 병합을 클릭합니다.예를 들어 아래 GIF를 확인하십시오.
답변자 : metanerd
각각의 업스트림에서 GitHub 포크를 최신 상태로 유지하려면 특히 GitHub용 probot 프로그램이 있습니다. https://probot.github.io/apps/pull/ 이 작업을 수행합니다. 계정에 설치를 허용해야 하며 포크를 최신 상태로 유지합니다.
답변자 : AlexSh
로컬 컴퓨터에서 분기된 저장소를 업데이트하는 방법은 무엇입니까?
먼저 리모컨/마스터를 확인하십시오.
git remote -v
오리진과 업스트림이 있어야 합니다. 예를 들어:
origin https://github.com/your___name/kredis.git (fetch) origin https://github.com/your___name/kredis.git (push) upstream https://github.com/rails/kredis.git (fetch) upstream https://github.com/rails/kredis.git (push)
그 후 메인으로 이동:
git checkout main
업스트림에서 메인으로 병합:
git merge upstream/main
답변자 : David Odhiambo
$ git remote add upstream https://github.com/.... $ git pull upstream main $ git push
출처 : Here
출처 : http:www.stackoverflow.com/questions/7244321/how-do-i-update-or-sync-a-forked-repository-on-github">
참조 — PHP에서 이 기호는 무엇을 의미합니까? (0) | 2021.09.28 |
---|---|
"INNER JOIN"과 "OUTER JOIN"의 차이점은 무엇입니까? (0) | 2021.09.28 |
원격 태그를 삭제하는 방법은 무엇입니까? (0) | 2021.09.28 |
JavaScript에서 문자열의 첫 글자를 어떻게 대문자로 만드나요? (0) | 2021.09.28 |
Bash 쉘 스크립트에 디렉토리가 있는지 어떻게 확인할 수 있습니까? (0) | 2021.09.28 |