1.认识
git :是一款免费的开源的分布式版本控制系统.
gitLab :免费管理私人和公开的软件项目,使用git作为代码管理工具,是一个web服务。
gitHub: 是最大的git版本库托管商。
2.git 基础
2.1 git的原理:
★ git对待数据的方法 不像以前的版本控制会首先记录一组基本文件,然后记录每个文件随着时间积累下来的差异 而是像一个快照流,即第一次对全部文件制作一个快照,并保存这个快照的索引,以后如果文件修改则重新存储快照,如果文件没有修改,保留一个链接指向之前存储的文件。
2.2 git特色:
★ 直接记录快照,而非差异比较
★ 近乎所有的操作都是本地执行,因为本地磁盘上就保存了项目的完整历史。速度快
★ git每次变动都通过计算校验和,引用校验和的方式来保证项目的完整性,每次操作都难逃git监控
★ git一般只做数据的添加操作,即使操作出错也可以进行数据的恢复,无后顾之忧。
2.3 git的三种状态
★ modified (已修改) :文件已修改,但是还没有保存到本地数据库
★ staged (已暂存) :对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。
★ committed (已提交) :数据已经安全的保存在本地数据库中
2.4 git的三个工作区域
★工作目录 (working directory) : 程序员从git 仓库中拉取出来放在本地磁盘以供使用和修改的内容区域
★暂存区域 (staging area) :暂存区域是一个文件 ,保存了下次将提交的文件列表的信息,一般在git仓库目录中,有时也被称为“索引”。
★git仓库 (.git repository) :Git用来保存项目的元数据和对象数据的地方,克隆仓库时,拷贝的就是git仓库里的数据
2.5 git的工作流程 :
★ 在工作目录中修改文件 →
★ 暂存文件,将文件的 快照放入暂存区域 →
★ 提交更新,找到暂存区域的文件 ,将快照永久性存储到git仓库目录。
3. git命令
3.1 配置环境 git config (.git/config)
★查看配置信息
git config --list //列出所有配置信息 //此时因为还没有.git文件,所有可能没有信息
★设置用户信息
git config --global user.name "xxx"//设置用户名 ,以后的每一次提交都会用该用户名
git config --global user.email xxx@xxx.xx //设置用户邮件//
3.2寻求帮助 help / man
git help add // add 命令帮助 windows,linux均可用,windows会弹出一个网页
git add --help //windows,linux均可用
man git-add //linux可用
3.3 获取Git仓库途径
★将现有项目导入到git (首先要进入到指定目录)
git init //将进行初始化 ,创建了一个 .git的目录文件,文件中包含了一些必须的文件
★从服务器上克隆一个现有仓库 :所有文件都属于已跟踪文件
git clone url //url代表了项目的地址
git clone url name //自定义本地项目的名称
★修改本地仓库名称 (默认仓库名 origin 默认分支master 都没有特殊意义)
git clone -o <new-name>
3.4 工作目录中文件分类
★未跟踪 :一般指那些新创建的文件,还没有纳入到版本控制,上一次快照中没有他们的记录。
★已跟踪 :指那些被纳入了版本控制的文件,在上一次快照中有他们的记录。
3.5 文件生命周期
★查看当前状态
git status [-s/--short]
?? :新添加的未跟踪文件 A:新添加到暂存区中的文件 左M :文件被修改并被放入到暂存区中 右M :文件被修改还未放入暂存区
★举例: 项目中新建一个文件 helloword.txt → git status ,显示为Untracked files → git add [file] →git status ,显示为Changes to be committed,表示此时该文件已暂存,并且保存在暂存区域的快照中;此时你可以选择撤销上次的暂存:git reset HEAD [file] 或者 提交:git commit -m "注释";
git add (files) //多功能命令 ,可以开始跟踪新文件,也可以将已跟踪的文件放到暂存区,还可以用于合并时把有冲突的文件标记为已解决状态等
git commit -m "注释"
git commit -a -m "注释"//功能是跳过 git add这一步(如果是未跟踪的文件不可以跳过),即不用添加到暂存区,直接提交
3.6忽略文件 java 的 gitignore
★创建一个 .gitignore 文件(vim创建/touch),并在其中列出需要忽略的文件类型,文件定义规范
★ 空行/#开头的会被忽略
★可以使用标准的glob模式匹配,即简化了得正则表达式 :* 一个或多个 ? 任意一个 [abc] 其中一个 ** 匹配任意中间目录
★匹配模式可以以 / 开头防止递归 : /TODO 只忽略当前文件夹的 TODO文件,不包括子目录中的TODO文件
★匹配模式可以以 / 结尾指定目录 :/build : 忽略 /build文件夹下的所有文件
★ 末尾加上 ! 表示取反
★需要忽略的文件
.classpath //eclipse
.project //eclipse
*.iml //intellij idea
*.jar
*.war
target/ //编译后的文档
.idea/
.settings/
build/
*.class
3.7 删除已暂存的文件
git rm file//对于已暂存的文件,删除后就不再纳入版本管理,不可以直接使用rm file
git rm -f file //如果已暂存的文件被修改,需要强制删除才能成功
3.8修改文件名 (git mv 其实是移动的意思)
git mv test.txt newTest.txt //将test.txt重新命名为newTest.txt
★ 曾经遇到过java文件首字母大小写修改的问题,刚开始写成小写,经过提交之后,再去修改文件名,还是无效!原来git是不识别大小写的修改的。
可以通过上面的修改方法进行修改,也可以改变配置,如下设置大小写敏感
git config core.ignorecase false //设置大小写敏感
3.9查看提交历史(git log [option])
git log //列出所有的提交记录 author date notation
git log -p -2 //x显示最近两次提交的详细log
git log --pretty=oneline/full/short //等等
3.10撤销操作
★重新提交,覆盖上一次的提交信息 (适用于有些文件没有添加,git add之后再执行此命令,或者提交信息写错,直接运行此命令)
git commit --amend //此时会出现一个编辑器,让你修改之前的提交信息,修改后保存退出即可
★将上一次保存到暂存区域的文件撤销(只会修改暂存区域中的内容,工作目录中的内容不会丢失 ,git status 有提示)
git reset HEAD <file> //将暂存区域中的某个文件内容恢复到初始状态,而工作目录中的文件内容依然是修改过后的
★将已修改但未暂存的文件撤销修改 (git status 有提示)(重点:
任何未暂存或者未提交的内容被覆盖之后不可以恢复)
git checkout --<file> //此时就会恢复到上一次拉取的状态,修改的代码会全部消失,不可恢复,请慎重
3.11远程仓库的使用
★查看远程仓库
git remote //origin :git给你克隆的仓库服务器的默认名字
git remote -v //显示读写远程仓库的简写以及 url
另一种查看方式
git remote show <remote-name>
★添加新的远程仓库
git remote add <shortname> <url>
git remote add myremote http:...//这里都可以自己定义,但是url要确保是正确的
git fetch myremote //从远程上拉取所有代码到本地 ,但是不会自动合并或修改你本地的工作目录,需要手动 pull
git pull //手动合并当前工作目录的代码
★推送到远程仓库
git push [remote-name] [branch-name]
git push origin master //将master 分支合并到服务器 origin (务必记住做这个之前先 pull代码)
★远程仓库的重命名和移除
git remote rename <name-before> <name-after>
git remote rename origin myremote//将远程仓库名origin更名为myremote
git remote rm <remote-name>
git remote rm myremote //移除远程仓库myremote
3.12 打标签 :给历史上某一个提交打上标签,以示重要 :例如发布节点 v1.0
★ 列出已打标签
git tag
git tag -l "v1.0" //只显示与 v1.0相关的标签
★创建标签
★★轻量标签 (lightweight):像一个不会改变的分支,只是一个特定提交的引用
git tag v1.0-lw //创建一个v1.0轻量标签
git show v1.0-lw //显示轻量标签
★★附注标签(annotated):存储在Git数据库中的一个对象,可校验,包含信息丰富
git tag -a <tag-name> -m <anotation>
git tag -a v1.0 -m 'myversion v1.0' //添加一个 v1.0附注标签
git show v1.0 //显示v1.0详细信息,包括提交内容
☆☆ 对过去的提交打标签
git log --pretty=oneline //分行显示提交日志
git tag -a v1.1 <哈希值的部分校验> //此时会出现一个vi文本编辑器,输入tag信息,即备注信息
★共享标签,即将本地创建的标签推送到远程服务器上
git push <remote-name> <tag-name>
git push myremote v1.0 //将v1.0标签推送到远程的myremote服务器上
3.13 Git别名
★举例(这个貌似查出来的并不是最后一次提交,糊涂,但是可以用 git log -p -1也是显示最后一次提交的人的记录)
git config --global alias.last 'log -l HEAD' //将查看最后一次提交的命令等价于git last
git last //查看最后一次提交的人
《以上是git的基础部分的总结,也当作是一次学习》 参看 :git官网文档