git 命令详解

git入门

git笔记会随着时间进行更正

再次更新:2019/10/09 23:02

几个概念

  • git的三个区域
    1. 工作区
      • git的初始化目录
    2. 暂存区
      • 从工作区进一步提交的文件所在区域
    3. 本地仓库
      • 从暂存区进一步提交的文件所在区域
    • 提交流程一般是:工作区(add)->暂存区(commit)->本地库

命令

  • 帮助命令

    • git help 需要查找的命令
      - > git 需要查找的命令 --help
      - > man 需要查找的命令

  • 初始化本地库

    • git init
      - 生成.git文件夹 存放git仓库配置及其数据

  • 配置本地库信息

    • git config
      - 环境参数
      - system
      - > git config --system
      - 配置信息在主机上的任何用户和文件夹下都生效
      - global
      - > git config --global
      - 配置信息在主机上的当前用户和及其所属文件夹下生效
      - 不加以上参数,只在初始化本地库的文件夹下生效
      - 配置使用者信息
      - 用户名
      - > git config user.name 用户名
      - 邮箱
      - > git config user.email 用户邮箱
      - 配置以上信息只起到提示作用,与任何平台信息无关,但是一般与使用平台命名一致

  • 添加被追踪文件至暂存区

    • git add 文件名(文件夹名)
      - 将该文件(文件夹)从工作区添加到暂存区,并进行追踪
      - > git add .
      - 将工作区的所有文件(文件夹)添加到暂存区,并进行追踪
      - 删除和移动(重命名)操作不可以被git add追踪到,只能通过git rmgit mv来提交到暂存区

  • 提交被追踪文件至本地库

    • git commit 文件名(文件夹名)
      - 将该文件(文件夹)从暂存区添加到本地库,并生成新的记录
      - 参数
      - > -m
      - 不用打开编辑器,直接在参数后添加提交描述
      - > -a
      - 若该文件曾被提交过,再次对其操作后,可直接使用该参数从工作区提交到本地库

  • 删除文件(文件夹)

    • git rm 文件名(文件夹名)
      - 删除工作区的文件名(文件夹名),且提交到暂存区
      - 参数
      - --cached 文件名(文件夹名)
      - 删除暂存区文件名(文件夹名)的操作

    已知:已提交文件test
    需求:现在将文件test从本地库中删除
    
    方法1:
    git rm test
    git commit -m "delete test"
    
    方法2:
    rm test.txt
    git commit -a "delete test"
    
    方法1和方法2得到结果一致
    
  • 移动文件(文件夹)

    • git mv 文件名1(文件夹名1) 文件名2(文件夹名2)
      - 移除工作区文件名1(文件夹名1),生成文件名2(文件夹名2),且提交到暂存区

    已知:已提交文件test1
    需求:现在将文件test1更名为test2
    
    方法1:
    git mv test1 test2
    git commit -m "rename test1->test2"
    
    方法2:
    mv test1 test2
    git rm test1
    git commit -m "rename test1->test2"
    
    方法3:
    mv test1 test2
    rm test.txt
    git commit -a "rename test1->test2"
    
  • 检查文件(文件夹)状态

    • 文件(文件夹)状态
      • 新增
      • 修改
        -删除
        -重命名
      • 未被提交
      • 未存入暂存区
    • git status
      - 对工作区和暂存区文件(文件夹)的状态进行检查显示
      - 参数
      - > -s(--short)
      - 简化检查结果显示

  • 检查文件操作详细信息

    • git diff
      - 不加参数,查看工作目录和暂存区之间的操作差异
      - 参数
      - > --cached(--staged)
      - 查看暂存区和本地库之间的操作差异

  • 查看提交历史记录

    • git log
      - 显示所有提交记录
      - > git log HEAD指针位置
      - 显示指定提交历史记录
      - 参数
      - -p
      - 查看提交历史记录的详细信息
      - --stat
      - 查看提交历史记录的简化信息
      - -数字n
      - 查看前n条提交历史记录的信息
      - --oneline
      - 将每条提交历史记录以行显示,记录简化的hash值
      - --pretty=oneline
      - 将每条提交历史记录以行显示,记录完整的hash值
      - --pretty=fomat:"放以下参数和其他字符组成的字符串"
      - 自定义提交历史记录的显示方式
      - 参数
      - %s
      - 提交时写的描述
      - %an
      - 做出文件(文件夹)操作的作者名称
      - %ae
      - 做出文件(文件夹)操作的作者邮箱
      - %ad
      - 作者做出文件(文件夹)操作的时间
      - %ar
      - 作者做出文件(文件夹)操作距今的时间
      - %cn
      - 提交者的名称
      - %ce
      - 提交者的邮箱
      - %cd
      - 提交者提交的时间
      - %cr
      - 提交者提交距今的时间
      - > 例如:git log --pretty=format:"提交者:%cn,距今时间:%cr,提交描述:%s"
      - --graph
      - 树状显示提交历史记录

  • 对远程库克隆

    • git clone https地址(ssh地址)
      - 初始化本地库且拉取远程库的所有历史版本
      - 将最新的提交历史记录对应的工作区文件(文件夹)复制到现在的工作区
      - 添加远程仓库地址别名,与原仓库的别名一致,可以直接操作并提交

  • .gitignore 文件

    • 设置提交时忽略的文件或文件夹
    • 文件内容设置
      • 以#开头的行和空行会被忽略
      • 利用正则匹配文件(文件夹)
        • 参数
          • *
            • 匹配0或任意个字符
          • ?
            • 匹配一个任意字符
          • []
            • 匹配括号里其中一个字符
          • !
            • 匹配取反的文件(文件夹)
  • 远程仓库

    • git remote
      - 查看本地远程库别名
      - -v
      - 查看详细的远程库详细信息
      - > git remote add 远程库别名 对应的url(ssh)
      - 新建本地远程库别名
      - > git remote show 远程库名
      - 查看远程分支信息
      - > git remote rename 旧的本地远程库别名 新的本地远程库别名
      - 重命名本地远程库别名
      - > git remote rm 需删除的本地远程库别名
      - 删除本地远程库别名

  • 推送分支

    • git push 远程分支的别名 被推送分支名(标签名):推送到的远程分支名(标签名)
      - 将本地库文件(文件夹)推送到远程分支
      - 填写分支名
      - 在远程仓库创建远程分支
      - 填写标签名
      - 在远程仓库创建标签
      - 删除远程分支
      - > git push 远程分支的别名 --delete 远程分支名(标签名)
      - > git push 远程分支的别名 :远程分支名
      - 创建远程分支
      - 创建前提是:需要创建的远程分支在本地已存在
      - > git push 远程分支的别名 新建远程分支名:新建远程分支名

  • 拉取远程分支到本地

    • git fetch 远程分支名(标签名)
      - 拉取指定远程分支(标签)到本地远程分支

  • 合并分支

    • git merge 本地分支名
      - 将指定本地分支名合并到当前分支
      - > git merge 合并到的本地分支名 被合并的本地分支名
      - 将两个本地分支合并
      - 合并冲突
      - 两个分支若对相同文件的相同位置做了操作,会出现合并冲突
      - 解决合并冲突
      1. 将出现冲突的文件进行更正
      2. git add
      3. git commit -m "description"

  • 拉取远程库

    • git pull 远程分支别名 被拉去的远程分支名(标签名):合并的本地分支名(标签名)
      - 是fetch和merge两个操作的合并,将远程分支拉取到本地合并到指定分支上

  • 标签

    • 种类
      • 轻量级标签
      • 含附注标签
    • 打标签
      • 轻量级标签

        • git tag 标签名
          - 为当前所处的提交打上轻量级标签,一个提交可以有多个标签
          - 含附注标签
          - > git tag -a "标签名" -m "description"
          - 为当前所处的提交打上含附注标签,一个提交可以有多个标签
          - 查看标签
          - > git tag
          - 查看所有标签
          - 参数
          - -l 标签名(可正则)
          - 查询指定标签
          - a "标签名"
          - 指定标签名
          - m "description"
          - 定义标签描述
          - 删除标签
          - > git tag -d 标签名
          - 给历史提交记录打标签
          - > git tag -a "标签名" -m "description"某个历史记录的HEAD指针位置
          - 推送标签到远程分支
          - 推送指定的标签
          - > git push 远程分支别名 被推送的标签名
          - 推送全部标签
          - > git push 远程分支别名 --tags
          - 切换标签
          - > git checkout 标签名
          - 切换分支到标签所处分支,处于游离状态不能修改
          - > git checkout -b 新建本地分支名 标签名

      • git branch 新建本地分支名 标签名
        - > git checkout 该本地分支名
        - 重命名标签
        - > git tag -d 原来的标签名
        - 删除原来的标签
        - > git tag -a "新的标签名" -m "description"
        - 创建新的标签

  • 操作本地分支

    • 查看分支
      • git branch
        - 查看分支名和当前所属分支
        - 参数
        - -v
        - 查看分支和当前所属分支的具体信息
        - -a
        - 查看包含远程分支的全部分支信息
        - --merged
        - 查看已与当前分支合并的所有分支
        - --no-merged
        - 查看未与当前分支合并的所有分支
        - 创建分支
        - > git branch 新本地分支名
        - 创建文件(文件夹)为当前分支的新本地分支
        - > git branch 新本地分支名 被复制的本地分支名
        - 创建指定复制的本地分支名
        - 删除分支
        - > git branch -d 本地分支名
        - 删除已经被合并过的分支
        - > git branch -D 本地分支名
        - 删除已经未合并过的分支

  • 切换本地分支

    • git checkout 本地分支名
      - 切换到指定分支
      - 注意切换到指定标签或本地远程分支的本地分支处于游离状态,不能操作
      - > git checkout -b 本地分支名
      - 创建新本地分支并跳转到该分支
      - > git checkout -b 本地分支名(标签名) 被复制的本地分支名(标签名)
      - 创建新分支且赋予指定分支内容并跳转到该分支

  • 命令别名

    • git config alias.命令的别名 "命令名"
      - 设置git命令别名,上面的命令都不包含git,运行命令时必须带上git
      - > git config alias.命令的别名 "!非git命令名"
      - 设置非git命令别名,运行命令时必须带上git

  • 撤销操作

    • git commit --amend
      - 上一次提交作废,重新提交,将本次提交记录代替上一次的记录
      - > git reset HEAD 文件名
      - 重置暂存区指定文件的操作为最新提交记录的操作,用来撤销暂存区的失误文件(文件夹)操作
      - > git checkout -- 文件名(文件夹)
      - 重置工作区文件的操作为暂存区的操作,用来将暂存区文件操作覆盖原来对工作区的失误操作

  • 版本重置

    • git reset HEAD指针位置
      - 暂存区和本地库版本重置到所指定位置
      - 参数
      - -soft
      - 重置本地库
      - -mixed(默认)
      - 重置本地库和暂存区
      - -hard
      - 重置工作区,暂存区和本地库
      - 历史记录改变
      - 彻底回退,使用git log无法查看重置位置之后的历史记录

  • 版本回退

    • git revert HEAD指针位置
      - 反向回溯,每次进行新的提交,不同于resetrevert历史记录只新增

  • 变基

    • git rebase 以该本地分支为基的分支
      - 以指定分支为基,合并当前分支
      - > git rebase 以该本地分支为基的分支 被合并的分支
      - 以指定分支为基合并指定分支
      - 与merge操作区别
      - merge是将两指定分支合并,建立新提交生成新的提交记录
      - rebase 是将多余变更记录进行记录,在基分支上进行重演,生成新的提交记录
      - 一般两者得到结果一致,但使用方法不同

补充1:若大家觉得我写得还行,可以去我的github里star一下,为了以后找工作做准备,无论是否点赞,谢谢大家看完本文

我的github

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