fork的仓库怎么使用git rebase与git merge同步上游仓库的更新及解决冲突问题的总结¶
约 574 个字 63 行代码 预计阅读时间 4 分钟
如果是fork的仓库需要同步上游仓库的更新¶
rebase 和 merge 都用于把上游代码合并到自己的分支,但方式不同:
- merge(合并) :把两个分支直接合并,保留双方原来的提交历史,并生成一个新的合并提交(merge commit)。优点是历史真实完整,缺点是可能产生较多分叉。
- rebase(变基) :把自己的提交暂时取下来,然后重新应用到上游最新代码之后,相当于把自己的修改“移动”到最新版本基础上。优点是提交历史更加线性、整洁,缺点是会改变提交历史,不适合修改已经共享的公共分支。
先把fork后拉到本地的代码添加上游仓库¶
(给 Git 保存一个地址,名字叫 upstream,这个地址指向原作者仓库。)
使用fetch命令查看上游发生的更新¶
查看上游更新:¶
查看有哪些提交:
切换到自己的 master:¶
使用rebase命令合并上游仓库master分支¶
rebase 时发生冲突¶
例如:
说明:
你的修改:
上游修改:
Git 不知道应该保留谁。
查看冲突文件:¶
输出:
查看冲突内容
打开文件:¶
解释:
到:
之间:
表示当前 rebase 基础代码(上游代码)
到:
之间:
表示你的提交。
手动解决冲突¶
例如:
上游:
你的:
最终决定合并:¶
然后删除:
这些标记。
标记冲突已经解决¶
例如:
或者所有文件:
继续 rebase¶
执行:
如果还有冲突:
重复:
直到完成。
放弃本次 rebase¶
如果发现合并太复杂,不想继续:
恢复到 rebase 前状态
rebase 完成后推送¶
或者强制推送:
总结¶
Lua
1. 获取上游更新
git fetch upstream
2. 切换自己的master
git checkout master
3. 查看上游有哪些更新
git log master..upstream/master
4. rebase同步
git rebase upstream/master
5. 如果冲突
git status
修改冲突文件
git add .
git rebase --continue
如果放弃
git rebase --abort
6. 推送自己的fork
git push origin master --force-with-lease
如果是merge¶
Lua
1. 获取上游更新
git fetch upstream
2. 切换自己的master
git checkout master
3. 查看上游更新
git log master..upstream/master
4. 合并上游master
git merge upstream/master
5. 如果冲突
git status
修改冲突文件
git add .
完成merge提交
git commit (Git 会生成 merge commit。)
如果放弃merge
git merge --abort
6. 推送fork
git push origin master