我遇到的 Git 使用场景

作者: x_zhaohu | 来源:发表于2017-08-24 10:28 被阅读58次

    记录下最近遇到的 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  
    

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

    • 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 使用规范,合并多余的 committitle 要详细突出主题,不要轻易关闭 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 remoteName remoteAddress
    • git format-patch HEAD~n --subject-prefix "common project name and version"
    • git send-email patch -to emailAddress
    • git format-patch HEAD~n --subject-prefix "common project name and version" --cover-letter -o patches
    • 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 文件

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

    帅哥美女扫一扫

    相关文章

      网友评论

        本文标题:我遇到的 Git 使用场景

        本文链接:https://www.haomeiwen.com/subject/lsgorxtx.html