Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持。
下面是工作中常用的几条 Git 命令,平时开发掌握这几条足矣。
git配置
Git的设置文件为.gitconfig,它可以在用户主目录下(全局配置),也可以在项目目录下(项目配置)。
显示当前的Git配置
1 | $ git config --list |
1 | # 编辑Git配置文件 |
git新建代码库
1、情况一:在远程存在有项目,在本地下载一个项目:
1 | git clone [url] |
2、情况二:在当前目录新建一个Git代码库,一般流程如下:
1 | touch README.md //新建说明文件 |
git提交代码库
1 | git status 查看工作区代码相对于暂存区的差别; |
git分支操作
创建分支:
1 | git branch <branch_name> #创建指定名称的分支 |
查看分支:
1 | git branch #查看所有分支,* 号代表当前工作分支 |
切换分支:
1 | git checkout <branch_name> #切换到指定分支 |
示例:切换到dev分支,然后添加dev.txt文件并进行提交,在dev分支上创建并切换到test分支。
删除分支:
1 | git branch -d <branch_name>.#删除一个干净的分支(即相对当前分支而言该分支没有新的提交记录) |
注意:删除分支前都需要先切换到其他分支才能进行删除操作
示例:在dev分支上删除test分支,test分支相对于dev来说是干净的分支,所以可以直接删除,然后切换到master分支,删除dev分支,此时需要进行强制删除。
分支恢复:
思路:对于已经有提交记录的分支删除后,实际上只是删除指针,commit记录还保留,如果想恢复,需要使用git reflog查找该分支指向的commitId,然后根据commitId创建新的分支
1 | git branch <branch_name> <hash_val> #根据指定commit创建新分支 |
示例:恢复已经删除的dev分支,该分支新增了dev.txt文件
重命名分支:
1 | git branch -m <branch_name> newname |
分支合并:
1 | git merge <branch_name> #将指定分支合并到当前分支 |
如果两个分支没有产生分叉情况,那么会进行快速合并,即fast-forward方式,它并不会产生新的commitId,只是改变了指针的指向,产生分叉合并可能会有冲突情况。
示例:合并pro分支到master分支,此时合并为fast-forward方式
分支合并细节
1 | git merge --no-ff -m "msg" <branch_name> #合并分支时禁用Fast forward模式 |
我们知道如果使用fast-forward方式进行分支合并,只是简单改变了分支指针,而不会产生新的commit记录。
为了保证合并数据的完整性,我们也可以在合并时指定不使用fast-forward方式,使用 –no-ff 选项。这样,在merge时就会生成一个新的commit,从日志上就可以看到分支合并记录了。
git合并代码
我们可能需要将A分支的代码合并到B分支,如何操作呢?
1 | # 首先切到分支B |
git本地回退代码
适用场景:我不小心把不该提交的代码提交到了本地,例如TaskListener这个类改了之后,不能提交,一不小心被我commit到了本地(还没有推送到远程)。
1 | git log |
用于查看我们修改提交的快照记录(commit记录),然后会有个commit修改记录的id编号,该命令显示从最近到最远的提交日志,我们可以看到3次提交记录.
1 | git checkout -b xxx commit-id |
把代码回退到一个新的分支,这样不要影响你的开发分支。或者直接
1 | git reset --hard HEAD^ |
回退到上一个提交的版本,HEAD^^回退到上上个版本。或者
1 | git reset --hard cmmit-id |
回退到指定commit id版本
如果你想回到会退前的版本,可以使用如下命令恢复:
1 | git reflog |
查看你的提交记录,找到你要回去的版本的commit id,指定id号回退回去就行了。如下
1 | git reset --hard 3b52ede |
git本地缓存
当我们在分支上进行代码开发时,有可能会接到突发需求,而当前的代码尚未完成,所以还不能直接提交。为了解决这样的问题,git就提供了分支暂存的机制,可以将开发一半的分支进行保存,在适当的时候进行代码恢复。
git stash save “save message” : 执行存储时,添加备注,方便查找,只有git stash 也要可以的,但查找时不方便识别。
这时候再执行git status,会提示:nothing to commit, working tree clean
然后你就可以切到其他分支做别的事情了。
过后你再回到这个分支,执行:
1 | git stash list #查看stash了哪些存储 |
怎么恢复刚才stash save的东西呢?
1 | git stash apply stash@{0} |
其中, “stash@{0}“是根据备注指定到版本,如果省略不写的话,默认取”stash@{0}”,即最新的一次save
如果觉得stash list记录太多了,想要清除,执行:
1 | git stash clear #删除所有缓存的stash |
其它stash非常用命令:
1 | git stash show #显示做了哪些改动,默认show第一个存储,如果要显示其他存贮,后面加stash@{$num},比如第二个 git stash show stash@{1} |
git的tag功能
git 下打标签其实有2种情况
1 | 轻量级的:它其实是一个独立的分支,或者说是一个不可变的分支.指向特定提交对象的引用 |
所以我们推荐使用第二种标签形式
创建tag
1 | git tag -a V1.2 -m 'release 1.2' |
上面的命令我们成功创建了本地一个版本 V1.2 ,并且添加了附注信息 ‘release 1.2’
指定历史commit迁出到tag, 我们先使用git log找到commitID或者hard
1 | git log --pretty=oneline --abbrev-commit |
查看tag
1 | git tag |
要显示附注信息,我们需要用 show 指令来查看
1 | git show V1.2 |
但是目前这个标签仅仅是提交到了本地git仓库.如何同步到远程代码库
1 | git push origin --tags |
如果刚刚同步上去,你缺发现一个致命bug ,需要重新打版本,现在还为时不晚.
1 | git tag -d V1.2 |
到这一步我们只是删除了本地 V1.2的版本,可是线上V1.2的版本还是存在,如何办?这时我们可以推送的空的同名版本到线下,达到删除线上版本的目标:
1 | git push origin :refs/tags/V1.2 |
如何获取远程版本?
1 | git fetch origin tag V1.2 |
这样我们可以精准拉取指定的某一个版本。
git-bash常用命令概况
1、git-bash命令
1 | ls #llist 查看当前目录下的内容 |
2、安装及测试阶段
1 | git config -l 查看本机配置 |
3、Git仓库管理操作
1 | git init 创建全新的仓库 |