55.Git备忘笔记

转载请注明原始链接:http://blog.csdn.net/a464057216/article/details/52823207

后续此博客不再更新,欢迎大家搜索关注微信公众号“测开之美”,测试开发工程师技术修炼小站,持续学习持续进步。
在这里插入图片描述

导语

推荐学习网站:

关于Git的教程网上有很多,推荐先学习廖雪峰老师的博客。使用Git一段时间以后再看下Git-tower中的教程,Git客户端的操作应该足够了。笔者作为测试开发工程师,除了日常开发使用Git工具本身以外,还做了一些开发流程上QA的思考,以期能够规范项目的开发,避免因为开发人员的误操作影响线上产品的质量,也推荐大家学习一下git-flow
如下是我的一些备忘笔记,供自己参考之用(可能很多基础命令没有覆盖到)。

命令行

暂存

git stash暂存与分支无关。

分支信息

git branch -va:查看所有分支(本地+远端)详细信息。
git branch -vr:查看远端分支详细信息。
git branch -v:查看本地分支详细信息。
git checkout --track remote/branch:根据远端分支创建本地分支并自动建立关联。
git branch -vva:查看查看所有分支(本地+远端)详细信息(包含关联信息)。

撤销修改

修改本地的上一次提交,不能修改已经push到远端的修改
git commit --amend -m "commit message",可以只修改注释消息,或者将本来应该属于上一次的修改add到stage后,执行git commit --amend修改上一次提交,从log上看会替换上一次提交,就像错误的提交不曾存在或一样。

撤销或删除本地未提交的修改

这里写图片描述

恢复已经提交的修改

git revert commit-hash不会将仓库回滚到相应的commit-hash对应的版本,而是尝试恢复回去(如果有冲突需要解决冲突)然后进行一次新的提交。
git reset --hard commit-hash会真的丢弃中间版本,回滚到对应的版本,所以使用--hard参数时一定要小心。不过,通过git reflog命令能够查到HEAD历史上对应的commit-hash信息,还能恢复回来。

比较差异

git diff命令的习惯用法是git diff old_commit_hash..new_commit_hash(查看不同提交之间的差异)或者git diff branchA..branchB(查看不同分支之间的差异),其余用法如下:
这里写图片描述

撤销合并

合并冲突时,只要没有git commit合并后的修改,就可以使用git merge --abort命令随时撤销这次合并(恢复到git pull以前的状态)。

git rebase

合并冲突时,如果使用git rebase branchB合并分支B到当前分支A,过程如下:
1.首先将分支A的不同提交暂存起来
这里写图片描述

注:上述图片来自git tower

2.将分支B上的提交整合到分支A(re-based):
这里写图片描述

注:上述图片来自git tower

3.最后将分支A上的暂存内容挂到分支B的提交之后:
这里写图片描述

注:上述图片来自git tower

rebase合并之后,分支A的历史记录被改写了,如果提交C3已经发布出去了的话,这样修改是非常危险的。所以git rebase适合的场景是:与同事一起基于develop分支开发,同事先完成任务,将他开发的新功能A的分支rebased到develop分支,我们自己完成新功能B的开发以后,在develop分支将featuer-B功能rebase进来,这样develop分支的version tree看起来就是一条直线。最后本轮开发结束时,应该在master分支上执行git merge develop --no-ff命令合并develop分支的开发,这样可以方便的保留开发合并记录。

子模块

添加子模块

在项目目录的lib目录中,执行如下命令添加子模块:
git submodule add https://github.com/djyde/ToProgress
子模块的内容并不包含在项目中,项目只保存子模块的路径、URL及其检出版本。

添加子模块之后,git status命令可以看到改动已经提交到了stage,然后使用git commit -m message命令提交改动到仓库即可。

clone子模块

clone一个包含子项目的Git项目时,需要使用git clone --recurse-submodules命令在clone的同时初始化所有子模块。如果clone时没有使用--recurse-submodules参数,可以使用git submodule update --init --recursive命令初始化子模块。

指定子模块的版本

切换到子模块的项目目录(/lib/ToProgress),执行git log --oneline --decorate命令查看子模块的版本情况,然后检出一个版本,比如:git checkout 0.1.1,在父项目目录执行git submodule status可以查看子模块信息,然后在父项目执行git commit -a -m message提交修改。

在与同事合作开发项目时,如果其他同事修改了子模块的版本,我们合并冲突后还需要使用git submodule update lib/ToProgress命令更新相应的模块(工作区中模块的内容)。

更新子模块版本

如果要更新子模块到最新版本,需要在其上下文中执行git pull origin master命令拉取其最新代码,然后git checkout master到master分支,回到父目录执行git submodule status可以查看是否更新成功。

删除子模块

删除子模块,需要先执行git submodule deinit module_name指定清除子模块的配置文件,然后使用git rm lib/module_dir删除子模块的内容,最后git commit -a -m message提交更改。

git-flow工具

Mac上使用Oh-my-zsh上安装git-flow,如果在plugin中使能了git-flow以后,命令行补全功能不好使,需要重新安装git客户端:

$ brew uninstall git
$ brew install git --without-completions

然后安装git-flow:$ brew install git-flow
初始化一个git-flow仓库:

$ git init
$ git config user.name mars
$ git config user.email mars@loo.com
$ git flow init

开始一个功能分支开发:$ git flow feature start feature_name
分支功能开发完成以后:$ git flow feature finish feature_name
发布版本:$ git flow release start version_number
完成发布:$ git flow release finish version_number
开始hotfix:$ git flow hotfix start bug_number
结束hotfix:$ git flow hotfix finish bug_number

如果觉得我的文章对您有帮助,欢迎关注我(CSDN:Mars Loo的博客)或者为这篇文章点赞,谢谢!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值