progit笔记:分布式Git
分布式工作流程
集中式工作流
集成管理者工作流
主管与副主管工作流
向一个项目贡献
提交准则
# 检查空白错误
$ git diff --check
# 部分暂存文件,使用暂存区域将你的工作最少拆分为每个问题一个提交,并且为每一个提交附带一个有用的信息
$ git add --patch
私有小型团队
# 日志过滤器,查看未合并的远程(origin/master)提交
$ git log --no-merges issue54..origin/master
私有管理团队
John 与 Jessica 在一个特性(featureA)上,John和Joise标反了。
派生的公开项目
拉取请求
# 此输出可被发送给维护者——它告诉他们工作是从哪个分支开始的、提交的摘要、以及从哪里拉取这些工作
$ git request-pull origin/master myfork
# 变基featureA到origin/master,-f 将服务器上有一个不是它的后代的提交的 featureA 分支替换掉
$ git checkout featureA
$ git rebase origin/master
$ git push -f myfork featureA
# featureB 的改动,从现在的 origin/master 分支开始一个新分支featureBv2
$ git checkout -b featureBv2 origin/master
$ git merge --squash featureB
... change implementation ...
$ git commit
$ git push myfork featureBv2
通过邮件的公开项目
# 生成可以邮寄到列表的 mbox 格式的文件 -M 开关告诉 Git 查找重命名
$ git format-patch -M origin/master
维护项目
应用来自邮件的补丁
使用·git apply
$ git apply /tmp/patch-ruby-client.patch
注意:相对于 patch 来说,它能够接受的模糊匹配更少。 它也能够处理 git diff 格式文件所描述的文件添加、删除和重命名操作;全部应用,否则就全部撤销(apply all or abort all)。
# 检查补丁是否可以顺利应用
$ git apply --check 0001-seeing-if-this-helps-the-gem.patch
使用 git am
git am
是为了读取 mbox 文件而构建的, mbox 是一种用来在单个文本文件中存储一个或多个电子邮件消息的简单纯文本格式
$ git am 0001-limit-log-function.patch
# 继续应用下一个补丁
$ git am --resolved
# -3 使Git 尝试进行三方合并
$ git am -3 0001-seeing-if-this-helps-the-gem.patch
确定引入了哪些东西
# 自己分支contrib,查看贡献者补丁
$ git log contrib --not master
# 该命令仅会显示自当前主题分支与 master 分支的共同祖先起,该分支中的工作
$ git diff master...contrib
变基与拣选工作流
# 将提交 e43a6 拉取到 master 分支
$ git cherry-pick e43a6
准备一次发布
$ git archive master --prefix='project/' | gzip > `git describe master`.tar.gz
制作提交简报
$ git shortlog --no-merges master --not v1.0.1