这篇博文记录了Git的学习过程中基本的Git操作,留下笔记供日后参考。 博主是一个很有条理、注重开发效率的好男人(此处应有掌声),多年的软件工程学习可以明显感受到团队代码的管理对开发团队的重要性。之前一直在使用svn进行代码管理,svn是一款不可多得的好开源软件,其强大的功能可以说相当给力,不愧是团队协同工作利器。 几年之前,就一直听说github的强大,一时兴起注册了账号:csxiaoyaojianxian,只知道它很好用,却不知道那些开源代码是如何上传并操纵的,同时也缺少使用需求,因此仓库闲置在那里。说来丢人,github上的那些大牛的源代码每次我都是“Download ZIP”搞下来,竟然没用过旁边的clone……直到最近学校组织建立工程实践小组,我想借此感受一把Git的魅力。 在网上找了一些学习资料进行一番学习,发现git和svn有太多的相似之处,并且其依托github这个云仓库,简直不能再赞,学习过后,我在自己宿舍内网穿透的计算机上安装了git,作为团队工作的代码仓库。使用过程中发现,有些简单常用的操作步骤容易遗忘,还是简单以纯文字记录下,以备后查。
一、Ubuntu安装Git
- 查看是否安装了Git
$ git
- 安装
$ sudo apt-get install git
也可以下载源码包
代码语言:javascript复制$ ./config
$ make
$ sudo make install
- 设置
$ git config –global user.name “Your Name”
$ git config –global user.email email@example.com
- 设置Git显示颜色
$ git config –global color.ui true
二、版本库
- 创建版本库 切换到需要创建版本库的目录
$ git init
- 将文件放到Git仓库
$ git add <file>
$ git commit -m “wrote a readme file”
三、版本控制
- 查看当前仓库状态、差异及日志
$ git status
$ git diff <file>
$ git log
$ git log –pretty=oneline
- 版本回退 HEAD表示当前版本(提交ID),上个版本是HEAD^,上上个版本是HEAD^^,上100个版本是HEAD~100。
$ git reset –hard HEAD^
$ git reset –hard 3628164
- 查看命令记录找回提交ID
$ git reflog
- 丢弃修改 丢弃工作区的修改,文件回到最近一次commit或add时状态
$ git checkout — readme.txt
撤销暂存区的修改,重新放回工作区,reset命令既可以回退版本,也可以把暂存区的修改回退到工作区,HEAD表示最新版本
代码语言:javascript复制$ git reset HEAD readme.txt
- 文件删除及恢复 删除文件
$ git rm test.txt
$ git commit -m “remove test.txt”
删错恢复
代码语言:javascript复制$ git checkout — test.txt
四、远程仓库
- 创建SSH Key
$ ssh-keygen -t rsa -C “youremail@example.com”
在用户主目录找到.ssh目录,有id_rsa和id_rsa.pub两个文件 登陆GitHub,Add SSH Key,粘贴id_rsa.pub文件内容
- 本地仓库推送到GitHub仓库 远程库的名字默认是origin,可以修改
$ git remote add origin git@github.com:csxiaoyaojianxian/test.git
把当前分支master推送到远程
代码语言:javascript复制$ git push -u origin master
首次加上-u参数,会把本地master分支和远程master分支关联
代码语言:javascript复制$ git push origin master
- 从远程库克隆
$ git clone git@github.com:csxiaoyaojianxian/test.git
五、分支管理
- 基本分支操作 查看分支
$ git branch
创建分支
代码语言:javascript复制$ git branch <name>
切换分支
代码语言:javascript复制$ git checkout <name>
创建 切换分支
代码语言:javascript复制$ git checkout -b <name>
合并某分支到当前分支
代码语言:javascript复制$ git merge <name>
删除分支
代码语言:javascript复制$ git branch -d <name>
强行删除没有被合并过的分支
代码语言:javascript复制$ git branch -D <name>
- 查看分支合并情况
$ git log –graph –pretty=oneline –abbrev-commit
- 禁用Fast forward
$ git merge –no-ff -m “merge with no-ff” dev
- Bug分支 stash功能可以把当前工作现场入栈,以后恢复
$ git stash
查看stash
代码语言:javascript复制$ git stash list
恢复现场 方法一:
代码语言:javascript复制$ git stash apply
恢复后stash内容并不删除,再删除
代码语言:javascript复制$ git stash drop
方法二:
代码语言:javascript复制$ git stash pop
恢复的同时删除stash内容
代码语言:javascript复制$ git stash pop
恢复指定的stash
代码语言:javascript复制$ git stash apply stash@{0}
- 多人协作 查看远程库信息
$ git remote
$ git remote -v
抓取分支
代码语言:javascript复制$ git clone git@github.com:csxiaoyaojianxian/test.git
推送分支
代码语言:javascript复制$ git push origin master
合并分支解决冲突
代码语言:javascript复制$ git pull
建立本地分支和远程分支的关联
代码语言:javascript复制git branch –set-upstream branch-name origin/branch-name。
六、标签管理
创建标签,默认为HEAD
代码语言:javascript复制$ git tag v1.0
给指定提交ID 创建标签
代码语言:javascript复制$ git tag v0.9 1247721
查看所有标签
代码语言:javascript复制$ git tag
指定标签信息
代码语言:javascript复制$ git tag -a <tagname> -m “inf”
用PGP签名标签
代码语言:javascript复制$ git tag -s <tagname> -m “PGP”
推送一个本地标签
代码语言:javascript复制$ git push origin <tagname>
推送全部未推送过的本地标签
代码语言:javascript复制$ git push origin –tags
删除本地标签
代码语言:javascript复制$ git tag -d <tagname>
删除远程标签
代码语言:javascript复制$ git push origin :refs/tags/<tagname>