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

恢复文件
  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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容

  • Git 基础 基本原理 客户端并不是只提取最新版本的文件快照,而是把代码仓库完整的镜像下来。这样一来,任何一处协同...
    __silhouette阅读 15,846评论 5 147
  • Git 命令行学习笔记 Git 基础 基本原理 客户端并不是只提取最新版本的文件快照,而是把代码仓库完整的镜像下来...
    sunnyghx阅读 3,897评论 0 11
  • 原创文章&经验总结&从校招到A厂一路阳光一路沧桑 详情请戳www.codercc.com 1. git简介 在实际...
    你听___阅读 1,561评论 0 8
  • 我与男友在家里大吵一架,原因是男友不工作,游手好闲。 平复后我想去散心,叫上了3个闺蜜去登山。 在露营的第四天夜里...
    清纯胖子王帧阅读 250评论 0 0