git简介及常用操作说明
学习git之前,我们先学习一个概念:版本控制!
版本控制
什么是版本控制
版本控制(Revision control)是一种在开发过程中用于管理我们对文件、目录或工程等内容的修改历史,方便查看更改历史记录、备份以便恢复以前的版本的软件工程技术。
- 实现跨区域多人协同开发
- 追踪和记载一个或者多个文件的历史记录
- 组织和保护你的源代码和文档
- 统计工作量
- 并行开发、提高开发效率
- 跟踪记录整个软件的开发过程
- 减轻开发人员的负担,节省时间,同时降低人为错误
简单说就是用于管理多个协同开发项目的技术。
没有进行版本控制或者版本控制缺乏正确的流程管理,在软件开发过程中将会引入很多问题,如软件代码的一致性,软件代码的冗余,软件过程的事物性,软件开发过程中的并发性,软件源代码的安全性,以及软件的整合等问题。
常见的版本控制工具
主流的版本控制器有如下这些:
- Git
- SVN
- CVS(Concurrent Versions System)
- VSS(Microsoft Visual SourceSafe)
- TFS(Team Foundation Server)
- Visual Studio Online
版本控制产品非常的多, 影响力最大最广泛的是Git和SVN
常见命令
1、git pull origin 分支名
git pull表示从远程仓库上拉取更新到本地的远程仓库(本地版本库)和本地仓库(工作区)中。当你需要提交代码时,最好先执行下git pull将远程仓库的最新修改更新到本地
2、git push origin 分支名
将本地分支提交到远程。与git pull origin 分支名联合使用,在开发中很常用的两个命令,一般来说,先使用git pull从远程仓库拉取最新修改,然后使用git commit -m "提交说明" 与 git push将本地修改提交到指定分支
3、git commit -m "提交说明"
用于本地开发中,将开发环境中的修改提交到本地git仓库中,一般建议在提交时,加一个提交的说明,表述此次的修改目的。在执行git commit时需要先将本地修改先提交入暂存区,用git add命令,下面将不会重复说明此命令。
4、git fetch
git fetch代表从远程仓库上拉取更新到本地的远程仓库上,如果需要将本地的远程仓库代码更新到本地仓库中,还需要merge命令。
当发现你本地仓库没有远程上的某个分支时,这时候执行下git fetch,远程仓库的分支信息就会被同步了。
5、git merge "分支名"
合并分支,一般在开发中,你有个dev开发分支,然后有个pro发布分支,你在dev上的改动将会合并(git merge)到pro分支上,pro分支进行打包部署,始终保持pro分支是可打包上线部署的。
6、git branch [分支名]
创建分支,如果没指定分支名,就会列出本地的所有分支,此处如果发现本地没有远程库的某个分支,记得使用git fetch命令。
还需要注意,如果你想基于某个分支创建一个新分支,比如基于A创建B,请一定要先checkout到A分支上,然后执行git branch创建B。
7、git checkout -b 分支名
创建本地分支并切换到此目录(或者切换到某分支,此分支已经存在),此命令用来切换分支,如果分支不存在,则会基于当前分支创建一个新分支并切换.
git checkout还有个用处是——覆盖修改,当执行 "git checkout ." 或者 "git checkout --
" 命令时,会用暂存区全部或指定的文件替换工作区的文件。这个操作很危险,会清除工作区中未添加到暂存区的改动。
8、git clone -b [分支名] [项目地址]
将项目拷贝到本地仓库,并指定为某个分支,与git checkout区别是,git clone并不具备创建分支的能力,如果分支不存在,则会报错
9、git status [-s]
查看上次提交后,是否还有修改,加上-s将会提供更简洁的输出。
10、git diff
git diff显示已写入缓存与已修改但尚未写入缓存的改动的区别
以上命令使用频率很高,需要重点掌握,下面是git的一些不常用,但是比较重要的命令
1、git log
查看提交历史,可以通过多种组合参数参看具体提交日志,此命令比较复杂,且通过git bash查看不直观,一般都是通过IDEA等开发工具的可视化窗口来看。以下是一个示例。
# 看Git项目中三周前且在四月十八日之后的所有提交 git log --oneline --before={3.weeks.ago} --after={2010-04-18} --no-merges
2、git stash
将修改暂时先存起来,等需要的时候再拿出来。
3、git rm [-r] [--cached]
git rm为删除命令,默认情况下,会将文件从缓存区和你的硬盘中(工作目录)删除,如果想要在工作目录删除,可以使用--cached参数。
或者当你工作目录中要删的文件已经不再了(可能自己手动删掉了),这时想要把本地仓库或远程仓库的文件也给删了,使用--cached参数,删掉暂存区的文件,然后进行commit与push即可。
4、git reset [版本号]
当我们用git add将修改添加到暂存区了,通过git reset命令可以将你的指定提交到暂存区的文件,进行回退。与git rm的区别在于,回退后此命令会将修改还保留在工作区,git rm就直接删除了。
5、git reset [版本号]
当我们用git add将修改添加到暂
6、git tag
背景:我们有时需要将我们修改的版本进行一个快照,记录下当前的状态,避免我接下来修改代码的内容后,又需要还原成修改前的代码造成的繁琐。
命令:git tag命令将帮助我们将当前分支代码进行了一个快照版本的记录。
扩展:git tag V1.0(创建一个当前分支的名叫V1.0的tag版本)
git tag -a V1.0 -m "第一个版本" (-m可以加上备注信息)
git show V1.0 (查看tag的详细信息,包括tag号等)
git push origin v1.0(将V1.0的tag推送到远程)
git checkout v1.0(切换到某个tag)
git tag -d v1.0(本地删除某个Tag)
git push origin :refs/tags/v1.0(远端删除tag)
git tag 查看所有标签