移动开发Swift&Objective-CGit

我遇到的 Git 使用场景

2017-08-24  本文已影响58人  x_zhaohu

记录下最近遇到的 Git 使用场景,欢迎补充。

事先准备

注:假设项目地址是真实的。

场景一:需要添加数据处理的 API,然后 patch 到 dev@email.com

开发过程中我们编写了 docscode files,那怎么使用 Git 呢?

git add docs
git commit -m "Add docs of data process"
git add .
git commit -m "Add codes of data process"
git  format-patch HEAD~2 --subject-prefix "demo v1" --cover-letter -o patches
git send-email patches -to dev@email.com  

如上操作就是场景一的实现,不过这里有几个细节需要注意:

 git add docs
 git commit
 之后进入一个文本,在注释下面的第一行写标题,然后空一行,之后写详细的 commit description

场景二:继场景一后,patch 后的代码需要修改部分 code files,然后再 patch 到 dev@email.com

修改完代码后,我们是否再重提一个新的 commit 呢?NO, 我们要把修改后的代码追加到 Add codes of data process 中就行,因为修改的是 data process,所以没必要提新的 commit。怎么使用 Git 呢?

git add .
git commit --amend
会进入commit 的描述文件,如果你想添加,在下面添加,不然就保存退出就好啦
git format-patch HEAD~1--subject-prefix "demo v2"
只是会生成一个 patch 文件,假设文件名为:demov2.patch 
git send-email demov2.patch -to dev@email.com

场景三:继场景二后,docs 需要更新,然后提 PR

这个该怎么办呢?docs commit 先于 code files commit, 不能像场景二似的那样操作。难道 reset 到最初嘛?这时 git rebase 就有用武之地啦。具体操作如下:

git rebase -i HEAD~~
之后进入一个文本文件,这时需要 `docs commit` 修改为 `edit` 即可。然后进行文档修改。
git add .
git commit --amend
git rebase --continue
然后将本地分支推送到远程仓库就 ok 啦

需要注意的是,想修改那个 commit, git rebase -i commit_id 指定 commit_id

场景四:继场景三后,code files 需要添加新功能

因为 code files 是最新的 commit 所以我们按照场景二操作就ok.

场景五:继场景四后,在 code files 提交前,被 fork 的仓库更新啦,需要保持一致,方能将提的 pr Merge.

这时,rebase 就起作用啦。具体操作如下:

git remote add upstream https://github.com/root/demo
git fetch upstream
git checkout master
git rebase upstream/master
git push origin master
之后再推送 commit 就 ok.

场景六: 继场景五后,发现项目中含义子模块没有提交到 PR

我一上来我就懵逼啦,子模块的仓库代码我更新啦,这个项目中 Update gitsubmodule 是什么意思呢?看下具体操作吧:

git submodule  // 查看子模块
git submodule init // 初始化子模块
git submodule update --remote // 获取远程最新的子模块

如上操作,将最新的 submodule 加载到本地,.gitmodules 也更新啦(其实更细了版本号),所谓的 Update gitsubmodule 就是添加 .gitmodules

Tips:保持良好的 Git 使用规范,合并多余的 committitle 要详细突出主题,不要轻易关闭 PR

以前我常用的 Git 命令列表

被 Git 一顿完虐后,更新如下

注:commit_id 指提交的版本号,remoteName自动远程地址的名称,remoteAddress远程地址,HEAD~n,如果 patch 的话,n == 2的话是patch最近两次的commit,patch生成的 patch 文件,emailAddress收件人邮箱,patches 存放着多个 patch 文件

精彩文章,持续更新,请关注微信公众号:

帅哥美女扫一扫
上一篇下一篇

猜你喜欢

热点阅读