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 查看所有标签

相关