一文了解Git常用命令

1.工作流程

四个区域

  • 远程仓库
  • 本地仓库
  • 工作区
  • 暂存区

2.Git使用初体验

2.1配置使用者信息

git config --global user.name  
//配置用户名
git config --global  user.email  
//配置邮箱
git config --global  --list  
//查看配置  

2.2常用命令

git init  
// 在指定文件夹下执行,之后该文件夹会变成一个git仓库  
git status  
// 查看 Git 仓库的状态,主要是查工作区和暂存区有没有文件。  
git add 文件名  
//将文件添加到暂存区中  
git commit 文件名 -m '注释内容'  
//将文件添加到本地仓库中并产生历史版本记录  
git log  
//查看当前分支历史提交记录  

3.Git 基础命令相关操作拓展

3.1 git add 的批处理操作

git add .  
//将修改的文件和新文件,直接提交到暂存区中  
git add -u  
//仅将执行过 git add 后再次修改的文件直接放入暂存区中  
git add -A  
//上面2个命令的集合。  

3.2git log 使用操作详细介绍

git log
//当前分支所有提交历史记录。  
git log --all
//查看所有分支的提交历史记录  
git log --oneline
//查看简洁提交历史记录  
git reflog 
//查看所有分支的所有操作记录 (包括被删除的commit 操作记录)后面会介绍到。  
git log -n2
//查看最近2次提交的历史记录  
git log -p -2
//最近两次提交差异显示  
git log --pretty=oneline
//查看简洁提交历史记录  

3.3文件删除和修改名称操作

git rm 文件名称
//从工作目录中删除该文件并且本地不保留。  
git rm --cached 文件名称
//从版本控制中删除该文件,但在本地保留该文件(相当于将文件从暂存区撤销到工作区中)  
git mv 原来名称 新的名称
//更改文件名并提交到本地仓库 (暂存区和本地仓库文件)本地仓库需要再次执行 **commit** 提交。  

4.帮助命令

4.1Git 帮助命令介绍

git help  
//展示经常使用命令的介绍。  
git help 具体操作命令  
//对具体命令操作的介绍 会打开默认游览器进行查看具体命令介绍。  
git 具体操作命令 -h  
//对具体命令操作的介绍  

5.撤销命令

5.1撤销命令介绍

git chekout --文件名称
//将工作区的文件撤销到缓存区中  
git reset 文件名称 或 git reset HEAD 文件名称
//将暂存区的代码撤销到工作区中。  
git reset --hard 要切换 commit 的记录id 
//丢弃所有历史记录并将更改返回到指定的提交历史上 (慎用)

6.Git 分支(Branch)CRUD

6.1 创建

git branch 分支的名称
//创建新的分支  
git branch 分支名称 commitId
//在指定 commitId 基础上创建分支  
git checkout 分支的名称
//切换分支  
git checkout -b 分支的名称
//创建新的分支并切换到该分支上  
git checkout -b 分支名称 commitId
//在指定 commitId 基础上创建分支并切换到该分支  

6.2 查看

git branch
//查看本地所有的分支  
git branch -a
//查看本地和远程所有的分支。  

6.3 修改

git branch -m 原来的名称 新的名称
//修改分支的名称  
git push origin 分支名称
//将分支推送到远程仓库中。  

6.4 删除

git branch -d 分支名称
//删除本地仓库分支  
git push origin --delete 分支名称
//删除远程仓库分支。  

7. Git 标签(Tag)CRUD

7.1什么是标签

  • 将标签理解成里程碑。
  • 对于开发完的相对比较完善的 Release 版本我们可以创建一个标签

7.2 标签种类的介绍

  • 轻量标签(lightweight)
    • 用于临时的标签
    • 轻量标签仅仅记录了commit 的信息。
  • 附注标签(annotated)
    • 记录的信息更为详细 它包含了创建标签的作者 创建日期 以及标签信息。
    • 一般建议创建附注标签。

7.3 Git 标签操作命令

7.3.1 创建

git tag 标签名称
// 创建轻量标签  
git tag -a 标签名称 -m '标签注释'  
//创建附注标签  
git tag -a commitId
// 指定 commitId 创建标签  

7.3.2 查看

git tag 和 git tag --list | git tag --l
//查看所有的标签。  
git tag -l 'v*.0'
//查看以 v 开头和以 0 结尾的所有的标签  
git show 标签的名称
//查看标签的具体信息  
git ls-remote --tags
//查看远程仓库的标签列表  

7.3.3 修改

git push origin 标签名称
//将标签推送到远程仓库中。  
git push origin --tags
//提交本地所有的标签到远程仓库  

7.3.4 删除

git tag -d 标签名称
//删除该标签  
git push origin :refs/tags/标签名称
//删除远程仓库的标签。  

8. Git 分支合并操作

git merge 分支名称  
//一般我们都是主分支合并从分支比较多。  
git rebase 分支名称  
//主要是用来将主分支合并到从分支的操作中比较常见  

8.1 git rebase 和 git merge 的区别

  • git merge 会生成新的 commit,git rebase 不会生成新的 commit
  • git merge 是按照时间顺序进行合并,而 git rebase 是将 主分支顺序不变,插入到从分支的前端。

使用场景

  • git merge
    一般用于新功能的开发和 bug 修复;
    在主分支上进行使用
  • git rebase
    在从分支上进行使用

注意事项

如果分支已经 Push 到了远程仓库就不要对该分支进行 git rebase 操作
如果已经提交到了远程分支再进行 Push 的时候容易出现冲突,我们可以采用 git push --force,但是最好是永远不要使用这个命令。

9. 历史记录对比

git diff --cached | git diff --stage
//暂存区和最新提交内容比较  
git diff --文件名
//工作区和暂存区内容的比较。  
git diff commitId1 commitId2 --文件名
// 查看不同历史提交文件内容的不同  
git diff 分支1名称 分支2名称
//比较分支1 和分支2 提交文件内容的不同。  

10.Git 远程仓库相关操作

10.1 克隆远程仓库到本地

通过 http 链接克隆
git clone 远程仓库 http 链接地址
通过 ssh 链接远程仓库
  • 1.查看是否有公钥和私钥
 ls -al ~/.ssh  
  • 2.没有则生成密钥
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
  • 3.在 Github上配置我们的公钥内容
  • 4.git clone 克隆ssh url

10.2 远程仓库推送、拉取操作命令

git push
//将本地分支的更新推送到远程仓库中。  
git fetch 
//从远程仓库中获取最新的内容 但是不会执行合并的操作(**git merge**)  
git pull
//从远程仓库中获取最新内容并且合并到本地仓库中,相当于 **git merge** + **git fetch** 的操作  
让本地仓库和远程仓库建立连接
git remote add origin 远程仓库地址
//将本地仓库和远程仓库进行连接。  
git push --set-upstream origin master
//就可以将我们的本地仓库和远程仓库建立链接。  

11. Git 高级操作

11.1 修改最新提交的历史记录

git commit --amend
  • 使用场景
    最新提交的文件内容写错了或者提交注释信息(messge) 想修改
    又不想产生新的的commit去修改它
  • 注意事项
    确保你的commit 没有推送到远程仓库中

11.2 修改历史提交记录

git rebase -i 
// pick改为e  
  • 使用场景
    发现以前的 commit 提交有问题,并想对其进行修改的话
  • 注意事项
    该操作执行的前提是你还没有将你的 commit 推送到远程仓库中

11.3 修改历史注释

git rebase -i  
// pick改为r 

11.4 合并多个 commit

git rebase -i  
// 除了第一个pick,其他改为s  

11.5 把暂存区的工作保存起来

git stash
  • 场景
    * 修改文件,要切换的别的分支去工作但是我们又不想将我们当前分支的工作进行提交
  • 主要操作命令
git stash
//即将我们的工作内容进行保存  
git stash list
//查看我们储藏的列表  
git stash apply 
//将我们的最近储藏取出来但是不会删除该储藏  
git stash pop
//将我们的最近储藏取出来并删除该储藏  
git stash drop 
//将储藏清理掉。  
git stash clear 
//清除所有的储藏  

12. Git 最好不要使用的危险命令

git reset --hard  
//危险之处在于如果添加的工作内容没有执行 commit,执行 git reset —hard,那么这些没有 commit 的工作内容有可能丢失。  
git commit --amend 和 git rebase -i  
//修改操作必须是在你还没有推送远程仓库前去执行
//如果想将你的修改推送只能使用强制推送 git push -f 操作  
git push -f  
//这样会强制将你的历史版本覆盖到远程仓库。当然别人的提交历史也会被覆盖掉。  

13.Git 原理

做技术一定要知其然知其所以然

Git 存储目录结构介绍

hooks 一般用于自动化部署使用
info 该目录用于配置一些不希望被 Git 管控的文件
objects 该目录用于存储所有数据对象内容
refs 该目录用于存储 Git 本地以及远程分支的引用
config 该文件包含项目特有的配置选项,并且该配置仅对该 Git 仓库有效
description 该文件仅供 GitWeb 程序使用
HEAD 该文件表示当前 Git 仓库处于哪个分支 index 该文件保存暂存区信息

Git 是如何存储的
  • Git 是一个内容寻址文件系统
    每次我们进行提交会通过 SHA-1 算法生成一个长度为 40 个字符的校验和(也就是我们的 key)然后根据校验去获取我们文件的内容。
    这种通过唯一标识的 key(也可以理解为内容的地址)去获取我们的内容的操作就是内容寻址
  • 核心部分是一个简单的键值对数据库
    你可以向该数据库插入任意类型的内容,它会返回一个 40 位字符串键,通过该 40 位字符串键可以在任意时刻再次检索(retrieve)该内容。
  • Git 的对象
    blob 是具体的文件对象
    tree 是某个时刻提交目录的内容
    commit 执行一次 commit 就会产生一个 commit 对象
    tag 可以理解成 commit 的别名,一个 tag 对应一个 commit
  • Git引用
    • 什么是 Git 的引用
      可以理解成一个书签
    • Git 引用的三种类型
      HEAD 引用
      用来为我们的本地仓库打上标签使用。
      Tag 引用
      用来为我们的 Git 仓库 tag 标签使用.标签引用不会移动它永远会指向一个 Commit 对象。
      远程引用
      用来为我们的远程仓库打标签使用,远程引用是只读的
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念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

推荐阅读更多精彩内容