Git 자습으로 인재가 되다--fork 창고 동기화 유지

3339 단어
fork 다른 사람의 프로젝트를 자신의 Repository에 보내고 clone은 로컬로 개발합니다.그리고 다른 사람의 프로젝트도 계속 개발하고 있습니다. 본고는 포크 프로젝트의 새로운 제출을 자신의 창고에 동기화하는 방법을 설명합니다.
핵심 사상은 여러 개의 원격 창고(remote repository)를 이용하는 것이다.
먼저 포크를 실행하고 자신의 창고clone 코드로 내려오세요. 마스터 지점을 예로 들면
$ git branch
 * master

작업 목록이 최신이고 깨끗함을 유지하다
$ git status
On branch master
Your branch is up to date with 'origin/master'.

nothing to commit, working tree clean

다음은 원격 창고를 살펴보자.
$ git remote -v
origin	ssh://git@xxx/YOUR_REPO/my-android.git (fetch)
origin	ssh://git@xxx/YOUR_REPO/my-android.git (push)

여기origin 별명에 대응하는 원격 창고지는 자신의 창고를 가리킨다(자신의 창고에서 clone을 가리키기 때문이다)
다음에 우리는 목표 창고(남의 창고)에 대한 지향을 추가해야 한다.
$ git remote add upstream ssh://git@xxx/UPSTREAM_REPO/my-android.git

그리고 원격 창고 상황을 다시 한 번 볼게요.
$ git remote -v
origin	ssh://git@xxx/YOUR_REPO/my-android.git (fetch)
origin	ssh://git@xxx/YOUR_REPO/my-android.git (push)
upstream	ssh://git@xxx/UPSTREAM_REPO/my-android.git (fetch)
upstream	ssh://git@xxx/UPSTREAM_REPO/my-android.git (push)

원격 창고에 연결되어 있습니다. 소스트리를 사용하여 상태를 직관적으로 보십시오
그림에서 보듯이 내가 포크를 한 후에 상대방의 창고가 여러 번 제출되었다. 이때 내 창고에도 몇 번 제출되었고 리베이스를 통해 동기화를 유지했다.
rebase upstream의 마스터 분기
$ git rebase upstream/master

그 다음은 일반적인rebase의 조작입니다. 충돌이 있으면 어떻게 해결해야 할지 모르겠습니다. 저의 또 다른 "Git자습성재-rebase 완전판"을 참고하세요.
rebase를 완성한 후에 노드가 OK인 것을 보십시오
다음은push를 실행합니다. 원격 창고로 직접push를 이동하면 거부됩니다.
$ git push origin master:master
 ! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'ssh://git@xxx/YOUR_REPO/my-android.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

이때 두 가지 방법이 있다. 하나는 원격 지점을 삭제하고 직접push하는 것이다.다른 하나는 git push -- force를 사용하여 강제 밀어넣기입니다.
여기서 나는 두 번째 강추 방식을 선택했다. 첫 번째 방식은 나의 또 다른'Git자습성재-rebase 완전판'을 참고했다.
$ git push -f origin master:master
Compressing objects: 100% (186/186), done.
Writing objects: 100% (281/281), 66.82 KiB | 11.14 MiB/s, done.
Total 281 (delta 126), reused 184 (delta 41)
remote: Resolving deltas: 100% (126/126), completed with 54 local objects.
To ssh://git@xxx/YOUR_REPO/my-android.git
 + 8aaa796...d298312 master -> master (forced update)

push 성공, 소스트리 위 상태도 OK.
이로써 다른 창고의 최신 제출과 함께 자신의 제출도 보유하게 됐다.
전재 대상:https://juejin.im/post/5c82181af265da2da835a3e5

좋은 웹페이지 즐겨찾기