本文介绍git版本控制工具
基本概念
1.三种状态 已提交 已修改 已暂存 2.三个工作区 Git仓库 Git用来保存版本数据的地方 工作目录 编辑项目的地方 暂存区域 保存需要提交的文件信息
安装
我们使用git命令来操作git,需要安装git软件 下载地址 http://git-scm.com/download/win 或者下载github,功能更强大 http://windows.github.com
配置命令
打开git命令窗口,配置用户名和邮箱 git config --global user.name "yourname" git config --global user.email 2640199637@qq.com 查看配置的信息 git config --list git config user.name
基础
1.创建仓库 使用 git init 初始化git仓库 在你的项目目录中添加一个文件demo.js 输入 git add demo.js 添加文件 然后 git status 查看工作区状态 最后 git commit -m '我是注释' 提交文件到git仓库中 再次 git status 查看工作区状态 // 如果你要从已经存在的git项目copy下来,类似于svn的checkout git clone https://github.com/libgit2/libgit2 copy下来的项目就在libgit2目录下面 git clone https://github.com/libgit2/libgit2 mylibgit 给项目指定自己的名字 2.提交更新文件 使用git status 查看工作区文件的状态 modified 表示文件修改了 Untracked files 表示有文件没有受git管理,也就是新增的文件 上面这些情况可以使用git add filename 的形式添加文件到git中,这条命令是万能的 再次运行 git status Changes to be committed 表示文件已经被提交到暂存区了 使用git status信息比较多,可以使用git status -s 或者 git status --short命令 A 表示暂存区中有文件 M 表示文件被修改了 ?? 表示文件新增,没有受git管理 3.忽略文件 开发项目中像node_modules这类的文件无需受到git管理,可以忽略这些类似的文件 首先在项目根目录中创建.gitignore文件 下面是我在git中写的关于gitignore所有知识 # 这时gitignore的注释 # git使用标准的glob模式匹配,类似于正则表达式 # 使用 / 开头,防止递归搜索,也就是唯一指定 # 使用 / 结尾,表示指定目录,忽略目录所需 # 要忽略指定模式以外的文件和目录,取反即可,使用 ! # 什么是glob模式 # glob模式是简化的正则表达式 # *号表示匹配0或者多个字符 # [abc]中括号表示匹配任意一个括号内部的字符,[0-9] # ?号表示只匹配任意一个字符 # **号表示匹配任意多个中间目录,"a/**/c",这个" a/*/c "表示任意一个目录 .gitignore node_modules/ 使用cat命令可以输出文件内容 cat .gitignore 4.查看具体的文件做了哪些修改 当你的文件中做了修改但是还没有add,可以通过 git diff 命令比较文件和暂存区中的文件做了哪些具体的修改 当你的文件中做了修改但是已经add了,可以通过 git diff --staged 命令比较暂存区中的文件和git仓库中的文件做了哪些具体的修改 神器: 使用 git difftool --tool-help 查看你的系统支持哪些图形化工具 使用 git difftool 命令可以对你的文件做图形化展示对比,需要安装一个图形化插件,git会有提示,告诉你是否安装 进入 vimdiff 之后,可以查看具体的变化,使用 ctrl + z 退出界面 5.代码提交 使用 git commit -m '提交说明' 提交暂存区的文件 git commit -a -m '提交说明' 这种提交不需要经过add 6.删除文件 删除文件的操作可以使用add操作直接完成,也可以使用如下方法 1.清除文件,工作区和git仓库都删掉 git rm '你删除的文件名' 这样就将删除的文件做了标记,然后再commit代码,就ok了 注意如果在删除之前,已经把文件add到暂存区了但是没有commit,这时就要用git rm -f '你删除的文件名' 强制删除文件,这时一种保护机制 2.清除文件,工作区保留,git仓库干掉 git rm --cached '你的文件名称' 这样就可以把暂存区中的文件删除,然后提交即可 3.清除文件夹 git rm -r demo/ 直接删除demo文件夹下面所有的文件和文件夹 git rm命令后面可以跟其他的glob模式命令 7.文件改名 git mv demo.txt rename.txt 这句命令搞定 8.查看提交历史 git log 命令可以查看git仓库中所有的提交版本信息 git log -p -2 显示最近两次提交的内容差异 git log -stat 查看每次提交的简要统计信息 --pretty用来展示不同的提交历史的格式,有如下子选项 git log --pretty=online 每次提交历史放在一行展示 git log --pretty=short 缩略信息 git log --pretty=full 比较全的信息 git log --pretty=fuller 很全的信息 format可以用来指定自定义的信息展示格式 git log --pretty=format:"%h - %an, %ar : %s" 后面的配置选项有很多,感兴趣自己去查吧 另外oneline和format可以再结合--graph,展示分支,合并的信息 git log --pretty=oneline --graph 还有一部分没有介绍,是关于限制信息输出的内容,可能用处不大 9.撤销操作 1.修改版本注释信息或者添加提交文件 git仓库中的每一个版本都是一个系统的项目,如果你有的文件忘记提交了,又不想重新发布一个版本的话,可以使用 git commit --amend '注释' 这样的方式来合并已提交的版本 2.如果你的文件你提交到暂存区了,现在想让他回到工作区中 使用 git add * 可以将工作区中所有的文件提交到暂存区中 使用 git reset HEAD '你的文件名' 这条命令,回到工作区的状态 3.如果你修改的文件你不想要了,你想回到最开始的状态 使用 git checkout -- '你的文件名' 这条命令,相当于从git仓库的最新版本中copy出文件 10.远程仓库的使用 如果你的项目是从远程第三方服务器上pull下来的那么可以直接使用 remote 命令,查看当前的连接仓库的名称,使用 git remote -v 可以查看更为详细的信息,这里的第三方服务器我用的码云 一般的工作流程 使用 git clone 命令克隆远程仓库,然后使用 git pull 命令,可以从远程仓库上抓取最新的数据合并到本地当前分支,使用 git push 命令,可以将你自己的代码推送到远程服务器上 git clone url git remote // 默认你的仓库名称是origin git pull origin master git push origin master 删除远程仓库,使用 git remote rm origin 重命名远程仓库,使用 git remote rename pb paul 将pb换成paul // 到这里,你已经可以完整的使用git开发项目了,如果想继续深入,可以接着往下学
git分支
git分支其实很简单,git分支其实和master是一回事,打个简单的比方,git仓库是历史的长河,master就是现在的你,而分支是另外一个你,你现在处于master上面,你正在这个历史中生活了10年,但是你的分支没有变化,你没有去动它,它就不变,还是10年之前的时间点,如果你切换到分支上面,就相当于时间倒流了10年,如果你在这个分支上生活了20年,那么此时你再切换到master上面,你又相当于时光倒流10年,明白了吧,这就是分支,注意上面讲到的一个历史长河,也就是说不管分支多少永远都指的是一个git仓库 创建分支的命令 git branch testing 创建一个名为testing的分支 查看当前的分支状态 git log --oneline --decorate 分支切换 git checkout testing 查看分支之前的编辑修改信息 git log --oneline --decorate --graph --all 创建分支和切换到分支上面的命令简写 git checkout -b testing ---------------- 下面我来介绍git分支合并和冲突的解决 1.如果创建分支之后,主分支没有做任何修改 这种情况下,合并分支非常简单 首先切回到主分支上 git checkout master 然后 git merge testing 这样 git当前主分支的时间点和testing分支一样了 现在testing分支已经没用了可以直接删除,git branch -d testing 2.如果分支创建之后,分支做了修改,主分支被其他人做了修改,这时合并方法如下 这种情况下操作和上面是一样的 git checkout master git merge testing git brach -d testing 但是你要知道,git默默的将分支和主分支的最新的代码合并了,并且这个合并可能出现冲突 如果出现冲突了,git合并操作会暂停,等待你解决冲突,使用git status可以查看哪些文件有冲突,手动找到这些文件,然后做出修改,将修改后的文件使用 git add 的命令暂存起来,就可以告诉git冲突已经解决,然后再操作上面命令即可,关于冲突解决还有图形化工具,在这里不再赘述 ---------------- 下面介绍git的分支管理工具 使用 git branch 命令可以查看所有的分支,和当前是哪个分支 使用 git branch -v 可以查看每一个分支的最后一次提交 使用 git branch --merged 可以查看已经合并但是没有删除的分支 使用 git branch -d testing 可以删除已经合并的分支 使用 git branch --no-merged 可以查看没有合并的分支 使用 git branch -D testing 可以强制删除没有合并的分支
使用公钥
ssh-keygen -t rsa生成私钥和公钥,公钥用来放在第三方git库中 放好了之后,自己和别人都可以对代码进行修改和下载,使用git地址,并且免去了验证