git 学习小结

Git

git是一个分布式版本控制软件,最初由林纳斯·托瓦兹创作,于2005年以GPL发布。最初目的是为更好地管理Linux内核开发而设计。

林纳斯·托瓦兹自嘲地取了这个名字“git”,该词源自英国俚语,意思大约是“混账”。

I'm an egotistical bastard, and I name all my projects after myself. First Linux, now git.

实现原理

git更像一个文件系统,直接在本机上获取数据,不必连线到主机端获取数据。 每个开发者都可有全部开发历史的本地副本,changes从这种本地repository复制给其他开发者。这些changes作为新增的开发分支被导入,可以与本地开发分支合并。

分支是非常轻量级的,一个分支仅是对一个commit的引用。

git是用C语言开发的,以追求最高的性能。git自动完成垃圾回收,也可以用命令git gc --prune直接调用。

git存储每个新创建的object作为一个单独文件。为了压缩存储空间占用, packs操作把很多文件(启发式类似名字的文件往往具有类似内容)使用差分压缩入一个文件中(packfile),并创建一个对应的索引文件,指明object在packfile中的偏移值。新创建的对象仍然作为单独文件存在。repacks操作非常费时间,git会在空闲时间自动做此操作。也可用命令git gc来直接启动repack。packfile与索引文件都用SHA-1作为校验和并作为文件名。git fsck命令做校验和的完整性验证。

Git服务器典型的TCP 监听端口为9418。

库目录

  • hooks:存储钩子的文件夹
  • logs:存储日志的文件夹
  • refs:存储指向各个分支的指针(SHA-1标识)文件
  • objects:存放git对象
  • config:存放各种设置文档
  • HEAD:指向当前所在分支的指针文件路径,一般指向refs下的某文件

基本概念

我们先来理解下Git 工作区、暂存区和版本库概念

  • 工作区 (working directory):就是你在电脑里能看到的目录。
  • 暂存区 (staging index):英文叫stage, 或index。一般存放在 ".git目录下" 下的index文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
  • 版本库 (git diretory[Repository]):工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。

Git 安装

git 支持windows、MAC OS X、Linux/Unix 全平台
windows/Mac 官网下载:https://www.git-scm.com/download/
Ubantu:sudo apt-get install git
CentOS:sudoyum install git
检查是否安装成功:git --version 查看git版本

Git基本命令

  • git init 初始化本地git仓库(执行命令所在的目录下出现 .git 文件)
  • git add
    • git add filename 将文件添加到暂存区
    • git add . 将工作目录下的所有修改的文件添加到暂存区
  • git commit
    • git commit -m 'description' 将暂存区的文件提交到版本库
    • git commit -am 'description' 跳过git add 添加到暂存区命令,直接将工作区所有已跟踪的文件提交
  • git log 显示所有提交操作log
    • git log --oneline 将所有提交信息在一行内显示
    • git log -1 -p -p显示修改内容
    • gik 图形化显示日志信息
    • git log --oneline --grap
  • git status 查看项目文件状态
  • git config
    • git config --global user.name test 添加用户身份象征username
    • git config --global user.email 123456@qq.com添加用户邮箱
    • git config --lsit 查看配置信息
    • ~/.gitconfig 配置文件位置

Git状态

  • git 中文件的4种文件状态
    • Untracked 未被追踪
    • Modified 表示工作区修改了某个文集但是还没有添加到暂存区
    • Staged 表示把工作区修改的文件添加到了暂存区但是还没有提交到版本库
    • Committed 表示数据安全的存储在本地库中

Git撤销操作

  • git commit --amend 撤销上一次提交并将暂存区的文件重新提交
  • git checkout --filename 拉取暂存区的文件并将其替换工作区的文件
  • git reset HEAD filename 拉取最近一次提交的版本库中的这个文件到暂存区,该操作不影响工作区
  • git reset --option 版本号
    • --hard 回退暂存区和工作区到指定版本号
    • --mixed 回退版本库和暂存区到指定版本号
    • --soft 只回退版本库到指定版本

Git 文件删除

  • git rm filename
    • 删除工作区及暂存区中的该文件相当于删除后执行git add
    • git rm --cached filename 在不小心将不需要追踪的文件添加到暂存区,想删除暂存的文件但是不想删除工作区的文件
    • git rm -f filename 当工作区或者暂存区文件修改了(防止修改误删除了)
    • giob模式
      • 星号(*)匹配零个或多个任意字符
      • [abc] 匹配任何一个列在方括号中的字符
      • 问号(?)只匹配一个任意字符
      • [0-9] 、[a-z] 匹配范围
    • git mv oldname newname 相当于
        1. mv oldname newname
        1. git rm oldname
        1. git add newname
  • git 分支的创建、删除、切换、删除
    • git branch 查看分支
    • git branch branchname创建分支
    • git branch -m oldname newname 修改分支名称
    • git checkout [-b] branchname 切换分支
    • git branch -D branchname删除分支

分支的合并

  • 分支的指针 HEAD指针指向当前工作的分支 在切换分支是指向新的分支
  • git diff
    • git diff 比较工作区暂存区文件的差异
    • git diff --staged 比较暂存区版本库的文件差异
    • git diff 版本号 版本号比较分支内的两个版本的差异
    • git diff 分支 分支 比较两个分支的最新提交版本的差异
  • git merge branchname 合并之前需要先切换到master分支,快速合并和冲突合并

存储变更

  • git stash
  • git stash list
  • git stash apply stash@num git stash apply 后面不加名字,则应用最近一次存储信息
  • git stash drop stash@num git stash apply 只是运用存储的信息,并不删除它,drop 命令可以删除它

Github上的仓库

  • 创建github账号
  • 创建仓库
  • clone仓库到本地
  • 本地push到仓库
  • pull代码到本地
  • ignoing files 想忽略不想被追踪的文件,只需要将文件名字添加到.gitignore文件内,Git就会自动忽略这些文件
  • fork and pull request

远程服务器上的仓库

  • git init --bare 创建远端仓库(在服务器或者工程目录以外路径都可以创建的备份仓库)
  • git remote 查看当前配置了哪些远程仓库
  • git remote add name path 要添加一个新的远程仓库,可以指定一个简单的名字
  • git remote rm name 删除远程仓库
  • git remote rename oldname newname 重命名远程仓库名
  • git fetch 从远程仓库下载新分支与数据 ,该命令执行完后需要执行git merge 远程分支到你所在的分支。

Git ssh免密登录

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

推荐阅读更多精彩内容

  • 安装: windows安装git-- msysgit是windows版的git,下载单独的.exe按照默认选项安装...
    alceyp阅读 683评论 0 0
  • Git 基础 基本原理 客户端并不是只提取最新版本的文件快照,而是把代码仓库完整的镜像下来。这样一来,任何一处协同...
    __silhouette阅读 15,860评论 5 147
  • Git常用语法 [TOC] Git简介 描述 ​ Git(读音为/gɪt/。)是一个开源的分布式版本控制系统,...
    君惜丶阅读 3,500评论 0 13
  • Git 命令行学习笔记 Git 基础 基本原理 客户端并不是只提取最新版本的文件快照,而是把代码仓库完整的镜像下来...
    sunnyghx阅读 3,907评论 0 11
  • 不会有,永远不会有那个能陪她一辈子的人。 寂静的夜晚,昏黄的灯光,凉凉的海风,轻柔的水声。小单手扶着栏杆,心里突然...
    回忆里的蒲公英阅读 170评论 0 0