git和svn类似,都是一个版本控制系统
初次使用git前的配置
- git config --global user.name “用户名”
- git config --golbal user.email “邮箱”
-git config --list 查看是否配 置成功
其实git bash是一个模拟linux的一个cmd
- git的工作流程一般是:
- 在工作目录添加、修改文件
- 将需要进行版本管理的文件放入暂存区域
- 将暂存区域的文件提交到git仓库
- 一般存在三种状态:
- 已修改(modified)
- 已暂存(staged)
- 已提交(commited)
初始化一个本地仓库
- $ git init 会产生一个.git文件
首先创建一个名叫repository的空文件夹,打开执行上述命令,会生成.git的隐藏文件夹,这就是版本库,respository就是工作区。
添加文件
-
$ git add 文件名
untracked files指的是未跟踪文件,我们如果在工作区添加了一个文件,但是未提交,如果使用git status就会有这个反馈 -
$ git reset HEAD
将暂存区的文件从暂存区撤回,使它不被add
提交文件
- $ git commit -m “说明语言,版本做了怎样的改动”
查看状态
- $ git status
如果对于一个已经commit的文件,对于这个文件做修改
- 如果重新git add,那还好
- 如果git checkout – 文件名,那么这个文件里的修改会被还原为原来commit的内容
如果对于一个已经add的文件,对于这个文件做修改
- 会有两棵树,一棵树是暂存区,一棵树是工作站,
如果直接commit,则这个修改无效,提交修改前的文件 - 如果先add,则原来修改之前的会被修改的覆盖,最后commit再提交
查看历史提交数据
- $ git log 不可以看到head指向和仓库
- git log --decorate 可以看到head指向,还有仓库有哪些
- git log --decorate --online 其中online是以一行的形式展示的意思
- git log --decorate --online --graph --all 其中all是显示所有分支的意思
git reset
git reset --mixed HEAD~ (无快照关键字,默认mixed)
- 移动HEAD的指向,将其指向上一个快照(修改第三棵树)
- 将HEAD移动后指向的快照回滚到暂存区域(修改第二棵树)
- git reset HEAD~ / git reset HEAD~4(~~~~) :之前第4个版本的快照
git reset --soft HEAD~
- 移动HEAD的指向,将其指向上一个快照(暂存区域(第二棵树)不修改,仅仅修改仓库repository)(比如提交的commit的信息写错了,重新写)
git reset --hard HEAD~
- 移动HEAD的指向,将其指向上一个快照
- 将HEAD移动后指向的快照回滚到暂存区域
- 将暂存区域的文件还原到工作目录
回滚个别/单个文件
git reset 版本快照 文件名/路径
可以往前滚,只需要版本快照的id号
git reset 版本快照 id号(hash值前5位)
查看历史版本号
需要补
版本对比
git diff
新建分支
git branch 分支名
切换分支
- git checkout 分支名 (head指向分支名)
- git checkout -b 分支名 (偷了个懒,创建并切换到分支中)
合并分支
如果当前在master上,git merge feature,将feature合并到master
删除分支
git branch -d(–delete) 分支名
一般单个-表示简称,两个–表示全名
git checkout – 文件名
reset 和checkout区别
- 恢复文件
reset只能将指定文件恢复到暂存区域,但是checkout可以恢复到暂存区域和工作目录,reset hard不可以,后面跟快照名 - 恢复快照