-
Notifications
You must be signed in to change notification settings - Fork 2
Description
我们使用 Github Flow 来异步协作(暂时无视自动测试推送上线的持续集成部分)
-
首先 fork 主仓库项目
-
之后的 push 到自己的仓库,每个功能一个分支
-
git remote add [name] [address]name 是自定义的远程仓库名,address 是 fork 的仓库地址$ git remote add gogu git@github.com:gogu/cat-stride.github.io.git
-
git remote -v查看自己已设置的远程项目地址$ git remote -v gogu git@github.com:gogu/cat-stride.github.io (fetch) gogu git@github.com:gogu/cat-stride.github.io (push) origin git@github.com:cat-stride/cat-stride.github.io.git (fetch) origin git@github.com:cat-stride/cat-stride.github.io.git (push)
-
git checkout -b [name]创建本地分支,name 是自定义的分支名称,一般是开发中的功能$ git checkout -b update-note
-
切换到已存在的分支用
git checkout [name] -
git push [remote name] [branch name]push 到自己的远程仓库的对应分支
-
-
提交 Pull Request 到主仓库
-
邀请项目成员 review 代码,解决完所有提问并收到两个以上的赞 (approve)可以合并到主分支
关于解决冲突
-
冲突的成因
git 机制中,当你提交本地的 commit 到远程仓库时,会检查本地历史(history commits)和当前远程仓库历史。如果远程仓库历史相同的文件被其他成员修改过了,git 会要求你先手动处理一下本地历史,比如
git pull一下,再重新尝试提交。$ git push origin master To github.com:cat-stride/cat-stride.github.io.git ! [rejected] master -> master (fetch first) error: failed to push some refs to 'git@github.com:cat-stride/cat-stride.github.io.git' hint: Updates were rejected because the remote contains work that you do hint: not have locally. This is usually caused by another repository pushing hint: to the same ref. You may want to first integrate the remote changes hint: (e.g., 'git pull ...') before pushing again. hint: See the 'Note about fast-forwards' in 'git push --help' for details.
git pull背后其实是git fetch后自动进行git merge操作,merge 过程中如果遇到其他成员又和你修改了同一行,git 就会进入一个新的分支,并开始解决冲突流程。试着简单说来:当你和其他成员同时编辑一个文件,你们编辑的「基底」是相同的,其他成员先 push commit 到主仓库,你的「基底」就会和现在真正的「基底」不同步。这时你使用 merge 或者 rebase 操作处理历史 commit,git 会自动判断哪些行(line)的内容是不冲突的并自动合并。然而当同一行被同时修改, git 无法自动判断你在「不正确」的「基底」上更新的内容是否能保证整个系统正常工作,会把问题丢回给你,由你来手动选择正确的内容。
-
解决冲突
造例子比较麻烦... 先看这个 解决冲突 - 廖雪峰 git 教程
git 的相关问题在这个 issure 下解决。