git基本操作

2018-12-12  本文已影响95人  若兮缘
创建仓库(版本库)

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 选项

恢复文件
  1. 对于未暂存的文件可以直接撤销对文件所作出的修改操作
    git checkout -- file #将文件还原到版本库最新状态
  2. 对于已暂存(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 resetgit 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
上一篇下一篇

猜你喜欢

热点阅读