1. 从自己fork之后的版本库clone
$ git clone -o chucklu https://github.com/chucklu/Hearthstone-Deck-Tracker.git
参数说明:
-o
Instead of using the remote name origin to keep track of the upstream repository, use
2. 再将别人的版本库 git remote add
$ git remote add epix37 https://github.com/Epix37/Hearthstone-Deck-Tracker.git
$ git remote -v
chucklu https://github.com/chucklu/Hearthstone-Deck-Tracker.git (fetch)
chucklu https://github.com/chucklu/Hearthstone-Deck-Tracker.git (push)
epix37 https://github.com/Epix37/Hearthstone-Deck-Tracker.git (fetch)
epix37 https://github.com/Epix37/Hearthstone-Deck-Tracker.git (push)
3. 本地分支和远端分支映射处理
参考: 如何将本地分支和远端分支进行映射
$ git branch
chucklu_master
*master
chucklu_master
分支用来对应自己远端的master
分支master
分支用来对应原作者的master
分支
3.1 切换到master分支
$ git checkout master
首先确保目前处于master分支,上面的git branch就是查看本地分支的命令,master前面的 * 表示当前分支是master分支
3.2 同步原作者的代码
$ git pull
3.3 切换到chucklu_master分支
$ git checkout chucklu_master
3.4 变基或者合并
$ git rebase master
$ git merge master
3.5 推送代码到自己的版本库
$ git push chucklu HEAD:master
或者
$ git push chucklu chucklu_master:master
- 假如自己
fork
版本库之后,已经在某个分支上进行了修改的话。那么rebase
就不适用,需要使用cherry-pick
来处理。 - 为了确保
cherry-pick
之后的代码,确实是自己所期望的,那么只需要对比一次,自己的分支的最后一次提交和原作者的分支的最后一次提交,看看差异,是否是自己额外修改导致的,使用tortoisegit
–>diff with previous version
- 使用
cherry-pick
的注意事项,如果其中有某一个commit
是合并导致的,那么这个commit
就不需要进行cherry-pick
- 另外网上看到的一篇文章,貌似
cherry-pick
不推荐使用: # Why cherry-picking should not be part of a normal git workflow - 如果你仅仅是同步原作者的master分支,而不需要进行合并操作的话,本地仅有一个分支也够用了,需要添加2个remote
扩展:
重新命名远端:
$ git remote rename oldname newname
参考
- Git远程操作详解
- Git 同时与多个远程库互相同步
- Github上fork别人的代码之后,如何保持和原作者同步的更新
- git将本地已经存在的分支和一个指定的远端分支建立映射关系
- 五步git操作搞定Github中fork的项目与原作者同步