记录下最近遇到的 Git 使用场景,欢迎补充。
事先准备
- 需要fork的项目地址:https://github.com/root/demo
- fork后的项目地址:https://github.com/user/demo
注:假设项目地址是真实的。
场景一:需要添加
数据处理的 API,然后 patch 到dev@email.com
开发过程中我们编写了 docs 和 code 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
如上操作就是场景一的实现,不过这里有几个细节需要注意:
- commit description 不要超过 50 个字符,如果超过了需要一下操作
git add docs
git commit
之后进入一个文本,在注释下面的第一行写标题,然后空一行,之后写详细的 commit description
- 如上示例中,patches 是自动生成的,之后需要编辑 patches 里的第一个描述文件,需要修改主题和描述
- patch 到指定邮箱时,最好先 patch 给自己,检查下,减少错误发生的概率
场景二:继场景一后,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 使用规范,合并多余的
commit,title要详细突出主题,不要轻易关闭PR
以前我常用的 Git 命令列表
- git init
- git add .
- git commit -m "Submit a description"
- git push origin master
被 Git 一顿完虐后,更新如下
- git log
- git reflog
- git reset --hard
commit_id - git rebase -i
commit_id - git rebase --continue
- git commit --amend
- git remote -v
- git remote add
remoteNameremoteAddress - git format-patch
HEAD~n--subject-prefix "common project name and version" - git send-email
patch-toemailAddress - git format-patch
HEAD~n--subject-prefix "common project name and version" --cover-letter -opatches - git send-email patches -to
emailAddress - git submodule
- git submodule init
- git submodule update --remote
注:commit_id 指提交的版本号,remoteName自动远程地址的名称,remoteAddress远程地址,HEAD~n,如果 patch 的话,n == 2的话是patch最近两次的commit,patch生成的 patch 文件,emailAddress收件人邮箱,patches 存放着多个 patch 文件
精彩文章,持续更新,请关注微信公众号:
帅哥美女扫一扫










网友评论