git教程--基础命令(一)

前言

image.png

在开始讲解之前,先借用网上的一张图,显示了使用Git 时的文件状态变化周期。
可以看到文件有四个状态

  • untracked(未跟踪的文件,相当于还未纳入版本管理)

  • tracked (已跟踪的文件,这个是我自己加的,在git中文件无非就两种,已跟踪和未跟踪,后三个状态都可纳入到已跟踪的文件这一类)

    • unmodified :文件跟上个版本相比,没有修改过
    • modified:文件修改过,但未加入暂存区(暂存区是git独有的概念,这个也是相较svn一个不同点:
      使用svn时,修改完的文件直接提交到远程仓库.
      git却不同,你确认要提交的文件,要先放入暂存区,然后再从暂存区提交到远程仓库)
    • staged:文件修改过并且已加入到暂存区,等着被提交到远程仓库

常用命令

创建仓库

git init

初始化仓库之后,我们会看工作目录下多了一个文件夹.git,用于保存所有版本记录和配置文件。

查看配置信息

git config --list

有时候会看到相同的名称,因为它们来自不同的配置文件,文件的路径如下

  • /etc/gitconfig:系统级的配置,对所有用户有效,使用--system参数查看系统配置
git config --system --list
  • ~/.gitconfig:全局配置,使用--global 参数查看
git config --global --list
  • .git/config:项目级别的配置,只对当前项目有效
git config --list
配置文件的写法

修改git仓库的用户名和邮箱(修改全局配置)

cd ~
#修改.gitconfig文件,修改后的内容如下
vi .gitconfig

修改之后的内容为

[user]
    name = houhanbin
    email = houhanbin121456@163.com
[color]
    ui = true

使用命令查看我们的配置

git config --global --list

修改git用户信息

git config --global user.name "用户名"
git config --global user.email "用户邮箱"

这两个配置很关键,在提交纪录里会有这两个信息,用于标识上传人的身份,如果你使用github,这两个属性得和你github设置的名户名和邮箱一致,否则github不会记录你上传代码的记录。

检查文件的状态

git status

可能打印的内容有

  • On branch master
    nothing to commit, working directory clean
    说明你当前正在使用master分支,工作目录没有任何文件被修改。
  • Untracked files : 表示该文件还没有被追踪,git不会跟踪这个文件的变化,所以这个文件其实没有被纳入到版本管理中。
  • Changes to be committed:文件已处于暂存区,等待用户提交。
  • Changes not staged for commit:说明已跟踪的文件发生了改变,但是还没有放入暂存区。

跟踪文件

#跟踪所有文件
git add .
#跟踪一个文件(要指定文件的路径)
git add file
#跟踪一个目录(指定一个文件夹,git会递归跟踪这个文件下的所有文件)
git add dir

其实git add 命令有三个作用
1、开始追踪一个文件
2、将文件的快照放入暂存区
3、合并时把有冲突的文件标记为已解决状态

忽略某些文件

在日常开发中,ide有时候会生成一些文件,或者编译时会生成一些临时文件,这些文件其实是不用纳入版本管理中的,我们可以在项目的根目录下,创建一个.gitignore文件,可以使用标准的glob匹配模式。
看一个.gitignore文件的例子

# 此为注释 – 将被 Git 忽略
# 忽略所有 .a 结尾的文件
*.a
# 但 lib.a 除外
!lib.a
# 仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO
/TODO
# 忽略 build/ 目录下的所有文件
build/
# 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt
doc/*.txt
# 忽略 doc/ 目录下所有扩展名为 txt 的文件
doc/**/*.txt

查看文件修改了哪些内容

不带任何参数,查看未加入暂存区的文件修改了哪些内容

git diff file

如果要查看,已经暂存的文件与上个版本的变化,可以使用下面的命令(未加入暂存区的变化不会显示)

git diff --cached file

提交更新

git commit  -m "备注信息,比如这次修改了什么,做一个简短的记录"

只会提交暂存区的内容。
还有一种偷懒的方式,一条命令搞定暂存+提交(只对已跟踪的文件有效)

git commit  -a -m "备注"

版本回退

每次commit之后,都会保存一条提交记录。
使用git log --pretty=oneline产看提交历史记录,我们可以看到每次提交都会产生一个哈希串,作为每次提交的唯一标识,我们暂且把他称为commit_id

提交记录

在git中HEAD代表当前版本,HEAD^代表上一个版本,上上一个版本就是HEAD^^,如果前一百版本不可能写100个^吧,所以git提供一种简写方式HEAD~100
使用git reset 进行版本回退,这条命令有三个参数可选

  • --hard:直接回退到某个版本,会出现文件丢失,慎用!
  • --soft :不会直接丢弃版本间的变更,变更的内容会进入stage(暂存区),通过commit提交
  • --mixed(默认)
#回退到上个版本
git reset --hard HEAD^
#回退到上上个版本
git reset --hard HEAD^^
#回退到指定commit_id的版本
git reset --hard commit_id

查看命令历史

git reflog

删除文件

如果我们想要删除一个文件,不能只是在工作目录中删除,还要把它从已跟踪的文件列表中剔除。
可以使用git rm完成上述的两个操作,从工作目录中删除并且从跟踪文件中剔除

git rm file

提交之后,这个文件就不再纳入到版本管理中。

如果我们想把文件从git仓库中删除,但是这个文件仍保留在当前工作目录中,常见的场景:不小心把一些文件纳入到版本管理中,我们需要取消跟踪并保留这个文件,之后再把这个文件加入到.gitignore文件中,请看下面这个命令。

git rm  --cached file

移动的文件

git并不会跟踪文件的移动,如果想要监听这个文件的移动或者文件名称的变更推荐使用下面的命令

git mv from to
mv from to
git rm from
git add to

上面的两命令是等效的,你可以自己试一下这个命令,成功移动的文件会被标记为renamed状态,

image.png

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

推荐阅读更多精彩内容

  • Git 基础 基本原理 客户端并不是只提取最新版本的文件快照,而是把代码仓库完整的镜像下来。这样一来,任何一处协同...
    __silhouette阅读 15,872评论 5 147
  • Git 命令行学习笔记 Git 基础 基本原理 客户端并不是只提取最新版本的文件快照,而是把代码仓库完整的镜像下来...
    sunnyghx阅读 3,911评论 0 11
  • 1. 安装 Github 查看是否安装git: $ git config --global user.name "...
    Albert_Sun阅读 13,649评论 9 163
  • 现在时刻凌晨零点整,元宵节到了,月亮肯定一脸漠然地俯视着这个色彩斑斓的世界,而我坐在电脑前双手敲着键盘毫无...
    摄影人小刀阅读 237评论 0 0
  • “梦想”和“未来”这两个词,第一直觉,好像它们可以联系在一起,又好像不可以。但我个人认为梦想是可以成就未来的。梦想...
    逸想阅读 172评论 0 0