55.Git备忘笔记
来源:互联网 发布:发淘宝链接如何粘贴 编辑:程序博客网 时间:2024/05/29 13:10
- 导语
- 命令行
- 暂存
- 分支信息
- 撤销修改
- 撤销或删除本地未提交的修改
- 恢复已经提交的修改
- 比较差异
- 撤销合并
- git rebase
- 子模块
- 添加子模块
- clone子模块
- 指定子模块的版本
- 更新子模块版本
- 删除子模块
- git-flow工具
- 命令行
转载请注明原始链接:http://blog.csdn.net/a464057216/article/details/52823207
导语
推荐学习网站:
- git-scm
关于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的博客)或者为这篇文章点赞,谢谢!
- 55.Git备忘笔记
- git备忘
- git 备忘
- Git 备忘
- git备忘
- Git备忘
- git 备忘
- 备忘笔记
- 【Git学习】Git命令备忘
- Git 使用备忘
- IOS Git资源 备忘
- Git常用命令备忘
- Git常用命令备忘
- Git常用命令备忘
- Git常用命令备忘
- Git常用命令备忘
- git 使用备忘
- Git常用命令备忘
- linux下使用Makefile编译程序入门介绍
- Python的自带模块——HTMLParser的初步学习
- linux 内核中的开发人员 名单 CREDITS文件
- orcale总结
- screen.width,screen.height
- 55.Git备忘笔记
- java enum(枚举)使用详解 + 总结
- JDBC 事务管理
- android中strings.xml占位符
- UVA 1262编码(第k字典序)
- 数据库 增删改查整理
- 关于group by 两个或以上条件的分析
- Ubuntu虚拟机启动遇到“Starting Virtual Printing daemon done”的问题
- hdu 5928 极角排序+dp