Para sincronizar um repositório que você ‘forkou‘ com seu repositório de origem, primeiro precisamos adicionar ao seu GIT local um caminho que aponte para o repositório original:
Primeiro:
Vamos listar nossos repositórios remotos, vinculados a nossas branches locais.
1 2 3 4 |
$ git remote -v # List the current remotes origin https://github.com/user/repo.git (fetch) origin https://github.com/user/repo.git (push) |
Segundo:
Vamos adicionar um apontamento para o repositório original:
1 2 |
$ git remote add upstream https://github.com/otheruser/repo_original.git # Set a new remote |
Terceiro:
Listando novamente os repositórios remotos:
1 2 3 4 5 6 |
$ 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_original.git (fetch) upstream https://github.com/otheruser/repo_original.git (push) |
Quarto:
(Fetching) Descendo o repositório original para sua máquina:
1 2 3 4 5 6 7 8 |
$ 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_original * [new branch] master -> upstream/master |
Quinto:
Agora nós temos as branches e as tags do repositório original na nossa máquina
1 2 3 4 5 6 |
$ 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 |
Sexto:
Com o código do repositório original na nossa máquina vamos rodar um comando para ver o que será atualizado em nossa branch master antes de fazer o merge.
1 2 3 4 5 6 |
git diff --stat ...upstream/master .file1 | 18 ++++++++++------- file2.rst | 6 +++--- Vagrantfile | 10 ++++++++-- path/path_inside/commands/__init__.py | 7 ------- # continua ... |
Dica: sem o –stat acima você consegue ver todo o código que será atualizado, linha por linha.
Sétimo:
Vamos agora fazer o merge com a master local
1 2 3 4 5 |
$ git merge upstream/master Updating 34e91da..16c56ad Fast-forward README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) |
Feito !!!
Com isso nosso fork está sincronizado com sua origem.
Fontes:
http://digitaldrummerj.me/git-syncing-fork-with-original-repo/
https://stackoverflow.com/questions/7244321/how-do-i-update-a-github-forked-repository
https://gist.github.com/CristinaSolana/1885435