git基本操作
创建仓库(版本库)
git init
#在当前目录初始化一个git
仓库(repository)
版本库=仓库,在此仓库中的所有内容都会被Git管理,仓库中的所有文件修改、删除、更新都会被纪录下来,在进行任何Git操作之前,都要先切换到Git仓库目录,也就是先要切换到项目的根目录下。
示例:新建文件夹demo,进入文件夹,执行git init
,会提示初始化一个空的git
仓库
查看仓库状态
git status
#检查仓库状态
该命令建议经常使用,它会对当前状态给出很好的命令提示
该命令显示内容包括:
On branch
- 当前所在分支
Untracked files
- 显示新增加还未跟踪(没有在暂存区中)的文件
Changes not staged for commit
- 已修改还未暂存的文件
Changes to be commited
- 已修改等待被提交的文件
并对当前状态给出相应的命令提示
示例:新建文件readme.txt并添加内容,查看当前git仓库的状态,显示内容如下,on branch master,默认就直接在master分支,readme.txt文件还没有被跟踪,并且提示你可以使用git add去跟踪文件
添加文件到仓库
git add file1 file2...
#将要提交的文件的信息添加到索引库中(将修改添加到暂存区),作为下一次提交的内容
git add .
#将文件夹下的所有(需要跟踪的)文件添加到暂存区
注意:对于以暂存文件如果还有修改,需要再次执行git add操作
示例:将readme.txt添加到暂存区,再次查看git status
,显示说有新的文件等待被提交
提交文件到仓库
git commit -m "msg"
#提交暂存区文件到仓库,-m 代表添加提交的说明信息
git commit -a -m "msg"
#添加文件到暂存区并提交,即“git add .” + “git commit”
注意:只有添加到暂存区的文件才能被提交,即必须先执行git add
后执行git commit
示例:做第一次提交操作,提交后显示工作空间是干净的
查看提交日志
git log
#显示当前分支的版本历史,包括提交的id(hash值)、作者、日期和提交附带的说明信息,按 q 键退出
常用选项:
--all
#显示所有分支的版本历史
-p
#会在输出中加入diff内容,显示每次提交的内容差异
-n
#显示最近n次的版本记录
--stat
#仅显示简要的增改行数统计
--pretty
使用其他格式显示历史提交信息,值有oneline、short、full 和fuller
git log --pretty=oneline
#每个commit记录只显示一行信息(不显示作者和日期)
git log --pretty=oneline --abbrev-commit
#显示一行且只显示缩减的commitId
该命令等价于:git log --oneline
对比文件
git diff [file]
#修改前后文件对照,+ 号代表增加的内容,- 号代表删除的内容
不加参数代表查看所有文件的差异比较
示例:上面完成了项目的初始化,然后我们根据产品经理要求开发第一个需求,修改文件readme.txt,新增内容“需求一开发完成”。
查看git status
,显示changes not staged for commit(文件的修改没有保存到暂存区中),并且提示可以通过git add
进行暂存,通过git checkout
恢复文件
对比文件细节
git diff --staged (或者--cached)
#比较已暂存文件和上次提交的快照文件差异
对于与修改文件如果添加到暂存区后,使用git diff
就无法查看差异了,需要使用 --staged
选项
恢复文件
- 对于未暂存的文件可以直接撤销对文件所作出的修改操作
git checkout -- file
#将文件还原到版本库最新状态 - 对于已暂存(git add)未提交(git commit)的文件执行撤销操作
git reset HEAD file
#撤销暂存区的修改操作,此时文件从以暂存状态恢复为以修改状态
git checkout -- file
#撤销文件的修改
示例:此时产品经理告诉我们需求一不需要开发了,我们需要对文件进行恢复。
如果这时候我们已经git add
到了暂存区,恢复过程如下
版本切换
git reset --hard HEAD~n
#从当前版本回退n个版本,如HEAD~1回退到上一个版本,--hard代表强制执行
git reset --hard head
#撤销本地和暂存区的所有变动,回退到head版本
git reset --hard commitId
#还原到指定的版本,commitId代表commit记录的hash值
git reflog
#显示整个本地仓储的commit记录
说明:一旦进行版本回退,那么当前版本(包括)到回退版本之间的commit记录都将不出现在 git log 信息中,可以使用git reflog查看
示例:此时我们又接收到了两个新的需求,然后分别做两次提交,此时一共有3次提交记录。
然后产品经理说第二个需求不需要了,需要回退到需求一完成的版本。
成功回退后,产品经理表示需求二暂时还是需要的,于是我们不得不切换回需求二的版本,此时通过git log
无法查看到需求二版本的记录,需要通过git reflog
获取缩减的hash值,然后进行切换。
删除文件
对于不在使用的文件可以执行删除操作,删除对于git而言实际属于一个修改操作。
git rm file1 file2...
#删除文件,同时还会将这个删除操作记录下来
git rm -r dir
#删除目录
git rm与rm -rf删除文件的区别
使用git rm 删除文件后直接可以commit,而rm只是物理删除,并没有被git记录,需要先git add再commit
示例:产品经理告诉我们项目需要重新做,于是我们需要将仓库进行清空。
删除文件细节
git rm --cached [file]
#停止追踪指定文件,但该文件会保留在工作区
git rm -f [file]
#强制删除文件(已暂存的文件)
git rm [glob模式]
#删除模式匹配的文件
1.对于工作区新建(即版本库没有)的文件可以直接手动删除或者使用rm
命令删除
2.对于版本库已有的文件进行删除可以使用git rm
进行删除,然后执行commit
操作
3.对于已暂存的文件如果需要删除则必须使用 -f
选项进行强制删除
4.当我们需要删除暂存区或分支上的文件, 但本地又需要使用,使用--cached
选项
5.删除后还原文件同修改文件的还原操作一致,对于git rm
需要先git reset
再git checkout
示例:在当前版本库中有css文件夹及css文件,先删除css文件夹下所有.css文件,然后再执行恢复操作,这里css/\*.css
里的反斜杠代表递归匹配。
查看帮助
git help
#打印git命令的概要和最常用的git命令的列表
选项:
-a: 打印所有的可用命令
-g: 打印有用的git指南
git help [command]
#查看命令的帮助
git基本操作总结
# 在当前目录初始化一个git仓库
git init
# 新建一个目录,并将其初始化为git仓库
git init [project-name]
# 查看当前仓库状态
git status
# 添加指定文件到暂存区
git add file1 file2...
# 添加当前目录的所有文件到暂存区
git add .
# 提交暂存区文件到仓库
git commit -m "msg"
# 添加文件到暂存区并提交到仓库
git commit -a -m "msg"
# 显示当前分支的版本历史
git log
# 显示当前分支的简要提交信息
git log --pretty=oneline
# 显示一行且只显示缩减的commit记录的hash值
git log --pretty=oneline --abbrev-commit
# 修改前后文件对照
git diff file
# 将文件还原到版本库最新状态
git checkout -- file
# 将暂存区文件恢复到工作区
git reset HEAD file
# 从当前版本回退n个版本
git reset --hard HEAD~n
# 还原到指定的版本
git reset --hard commitId
# 显示整个本地仓储的commit记录
git reflog
# 删除工作区文件,并且将这次删除放入暂存区
git rm file
# 删除工作区目录
git rm -r dir