1.什么是Git?
一种分布式的软件配置管理工具。
2.目录结构
假如现在有一个工程被git管理,它分为三个部分:本地工作区,本地版本库(CMDB)的远程版本库。其中本地版本库有一个暂存区。
本地工作区就是你的工程所对应的本地文件夹
本地版本库是工作区(本地文件夹)下的.git隐藏文件夹。
远程版本库是你的工程在网络上的备份。
3.文件
文件时Git的基本配置项SCI(软件中发生变化的基本单元)
当一个文件被创建或者修改时,它与本地版本库中的相应文件不一样了,此时它处于“已修改”状态。
已修改的文件,可以通过git add命令,添加到暂存区,此时它处于“已暂存”状态。
已暂存的文件,可以通过git commit,把暂存区的文件汇总成一个commit,然后提交到本地版本库,此时它处于“已提交“”状态。
也可以通过git commit -a命令将已修改的文件提交commit。
4.操作
git status可以查看当前工作目录的状态。
显示出来的文件总共有三种状态分别是
1.已添加至暂存区,未提交的(add后未commit的文件)
2.已修改,未暂存的
3.为追踪到的文件
git diff比较暂存区和工作区的文件的差异
git diff HEAD可以查看某个commit中的文件和当前工作区中的文件的差别
想要把本地的提交记录提交到远程,可以执行git push命令。
如果要把远程的提交记录拉回到本地,可以执行git fetch命令。
如果要把远程的工程下载到本地,可以执行git clone命令
如果要把远程工程拉到本地,并且立即和自己的本地版本合并,可以用git pull命令。
要撤销本地工作区到暂存区的更改,可以用git reset<file>
要撤销commit,可以用git reset<commit>
5.分支
使用分支,相当于从现有的版本线上又分出来一条,可以加一些和以前不一样的版本分别管理,还可以合并,非常方便。
一次只能在一个分支上工作,要跳转分支,需要git checkout <branch>
要创建新分支,可以用git checkout -b <branch>
如果两个分支有共同的祖先,在某个时刻可以把这个有共同祖先的分支和自己合并,命令是git merge <branch>
6.总结(github官方的cheatsheet)
________________________________________________________
安装Git
GitHub提供了包含图形界面的桌面客户端,通过客户端可以完成大部分常用的仓库操作,同时可以自动更新Git的命令行版本,以适应新的场景。
GitHub Desktop
https://desktop.github.com/
GitHub的Linux和POSIX版本可以在官方的Git SCM网站上获取。
Git 全平台版
http://git-scm.com
配置工具
对所有本地仓库的用户信息进行配置
$ git config --global user.name "[name]"
对你的commit操作设置关联的用户名
$ git config --global user.email "[email address]"
对你的commit操作设置关联的邮箱地址
创建仓库
创建一个新的仓库或者从一个现有的链接获取仓库
$ git init [project-name]
创建一个本地的仓库,并设置名字
$ git clone [url]
下载一个项目以及它所有的版本历史
更改
检查已有的编辑并执行commit操作
$ git status
列出所有新建或者更改的文件,这些文件需要被commit
$ git diff
展示那些没有暂存文件的差异
$ git add [file]
将文件进行快照处理用于版本控制
$ git diff --staged
展示暂存文件与最新版本之间的不同
$ git reset [file]
将文件移除暂存区,但是保留其内容
$ git commit -m"[descriptive message]"
将文件快照永久地记录在版本历史中
批量更改
命名一系列commit以及合并已完成的工作
$ git branch
列出当前仓库中所有的本地分支
$ git branch [branch-name]
建立一个新分支
$ git checkout [branch-name]
切换到一个特定的分支上并更新工作目录
$ git merge [branch-name]
合并特定分支的历史到当前分支
$ git branch -d [branch-name]
删除特定的分支
重构文件
重定位并移除版本文件
$ git rm [file]
从工作目录中删除文件并暂存此删除
$ git rm --cached [file]
从版本控制中移除文件,并在本地保存文件
$ git mv [file-original] [file-renamed]
改变文件名并准备commit
停止追踪
不包含临时文件和路径
*.log
build/
temp-*
文本文件.gitignore
可以防止一些特定的文件进入到版本控制中
$ git ls-files --others --ignored --exclude-standard
列出所有项目中忽略的文件
保存临时更改
暂存一些未完成的更改
$ git stash
临时存储所有修改的已跟踪文件
$ git stash pop
重新存储所有最近被stash的文件
$ git stash list
列出所有被stash的更改
$ git stash drop
放弃所有最近stash的更改
查阅历史
浏览并检查项目文件的发展
$ git log
列出当前分支的版本历史
$ git log --follow [file]
列出文件的版本历史,包括重命名
$ git diff [first-branch]...[second-branch]
展示两个不同分支之间的差异
$ git show [commit]
输出元数据以及特定commit的内容变化
撤销commit
擦除错误并更改历史
$ git reset [commit]
撤销所有[commit]
后的的commit,在本地保存更改
$ git reset --hard [commit]
放弃所有更改并回到某个特定的commit
同步更改
注册一个远程的链接,交换仓库的版本历史
$ git fetch [remote]
下载远程仓库的所有历史
$ git merge [remote]/[branch]
合并远程分支到当前本地分支
$ git push [remote] [branch]
上传所有本地分支commit到GitHub上
$ git pull
下载书签历史并合并更改