Git是什么?
版本控制工具:在开发过程中用于管理我们对于文件目录等的修改历史,方便查看历史记录,以便方便查看。
Git与SVN最主要区别
SVN是集中式版本控制工具,版本库是集中放在中央服务器的。工作的时候首先要从中央服务器下载。
Git是分布式版本控制管理系统,没有中央服务器,每个人的电脑就是一台完整的版本库,只需要提交自己修改的了部分。
优点
- 适合分布式开发,强调个体。
- 公共服务器压力和数据量都不会太大。
- 速度快、灵活。
- 任意两个开发者之间可以很容易的解决冲突。
- 离线工作。
Git理论基础
工作区域
- 工作目录-Working Directory
- 暂存区 -Stage
- 资源库-Repository
- 远程Git库-Remote Directory
工作流程
1、在工作目录中添加、修改文件;
2、将需要进行版本管理的文件放入暂存区域;
3、将暂存区域的文件提交到git仓库。
Git操作
要管理项目的根目录执行
创建工作目录与常见指令
获得Git仓库
创建全新仓库
git init //在当前目录下新建一个Git代码库
克隆远程仓库
# 克隆一个项目和它的整个代码历史(版本信息)
$ git clone [url]
GIT文件操作
Git提交的时候主要关心文件的两个版本之间是否有改变,判断文件整体是否改变的方法就是SHA-1算法计算文件的校验和。
文件的四种状态
- Untracked:在文件夹中但是未加到Git库中,不参与版本控制--- git add .
- Unmodify:文件已经入库但是未修改,
- Modified:已修改没有进行其他的操作,git add 进入暂存Staged,git checkout 丢弃修改过
- Staged:暂存,执行git commit将修改同步到库中。
查看文件状态
git status
添加文件与目录
添加文件到暂存区
git add . //全部 [filename]
移除文件与目录
git rm --cached <file>
查看文件修改后的差异
git diff [files]
#比较暂存区的文件与之前已经提交过的文件
git diff --cached
忽略文件
.gitignore
一组规则
提交commit
将暂存区中的文件提交到本地仓库
$ git commit -m [message]
# 提交暂存区的指定文件到仓库区
$ git commit [file1] [file2] ... -m [message]
# 提交工作区自上次commit之后的变化,直接到仓库区,跳过了add,对新文件无效
$ git commit -a
# 提交时显示所有diff信息
$ git commit -v
# 使用一次新的commit,替代上一次提交
# 如果代码没有任何新变化,则用来改写上一次commit的提交信息
$ git commit --amend -m [message]
# 重做上一次commit,并包括指定文件的新变化
$ git commit --amend [file1] [file2] ...
查看提交日志
git log
查看所有分支日志
"git reflog"中会记录这个仓库中所有的分支的所有更新记录,包括已经撤销的更新。
查看文件列表
git ls-files
撤销本地仓库更新
git reset --hard
回滚操作
git resert
Git分支
# 列出所有本地分支
$ git branch
# 列出所有远程分支
$ git branch -r
# 列出所有本地分支和远程分支
$ git branch -a
# 新建一个分支,但依然停留在当前分支
$ git branch [branch-name]
# 新建一个分支,并切换到该分支
$ git checkout -b [branch]
# 新建一个分支,指向指定commit
$ git branch [branch] [commit]
# 新建一个分支,与指定的远程分支建立追踪关系
$ git branch --track [branch] [remote-branch]
# 切换到指定分支,并更新工作区
$ git checkout [branch-name]
# 切换到上一个分支
$ git checkout -
# 建立追踪关系,在现有分支与指定的远程分支之间
$ git branch --set-upstream [branch] [remote-branch]
# 合并指定分支到当前分支
$ git merge [branch]
# 选择一个commit,合并进当前分支
$ git cherry-pick [commit]
# 删除分支
$ git branch -d [branch-name]
# 删除远程分支
$ git push origin --delete [branch-name]
$ git branch -dr [remote/branch]