fork 仓库后,源仓库代码更新时,如何将自己的代码和原仓库保持一致
原仓库又称为上游仓库,当我们在 GitHub 或者码云上 fork 出一个仓库后, 原仓库可能会有各种提交以及修改
如果原仓库更新了,此时怎样才能保证我们 fork 出来的仓库和原仓库内容一致呢
1 . 配置上游仓库源
- 给 fork 配置一个 remote
- 主要使用 git remote -v 查看远程状态。
git remote -v # origin https://github.com/xiadmin/test.git (fetch) # origin https://github.com/xiadmin/test.git (push)
- 添加一个将被同步给 fork 远程的上游仓库
git remote add upstream https://github.com/new_xiadmin/test.git
- 再次查看状态确认是否配置成功。
git remote -v origin https://github.com/xiadmin/test.git (fetch) origin https://github.com/xiadmin/test.git (push) upstream https://github.com/base_xiadmin/test.git (fetch) upstream https://github.com/base_xiadmin/test.git (push)
2. 同步上游仓库代码
- 从上游仓库 fetch 分支和提交点,传送到本地,并会被存储在一个本地分支 upstream/master
git fetch upstream
git fetch upstream remote: Enumerating objects: 22, done. remote: Counting objects: 100% (22/22), done. remote: Compressing objects: 100% (13/13), done. remote: Total 14 (delta 9), reused 0 (delta 0), pack-reused 0 Unpacking objects: 100% (14/14), done. From https://github.com/base_xiadmin/test * [new branch] master -> upstream/master
- 切换到本地主分支 (如果当前还是在master分支,可以不切)
git checkout master
git checkout master # Switched to branch 'master'
- 把 upstream/master 分支合并到本地 master 上,这样就完成了同步,并且不会丢掉本地修改的内容。
git rebase upstream/master
git rebase upstream/master
- 这时需要更新到 GitHub 的 fork 上时,正常使用 git push origin master 即可
merge 和 rebase 都是用来合并分支的, 在不产生冲突情况下两者没有什么区别
使用merge
命令合并分支,解决完冲突,执行git add .
和git commit -m'fix conflict'
。这个时候会产生一个commit
使用
rebase
命令合并分支,解决完冲突,执行git add .
和git rebase --continue
,不会产生额外的commit。这样的好处是,干净,分支上不会有无意义的解决分支的commit;坏处,如果合并的分支中存在多个commit,需要重复处理多次冲突。