git基本命令总结

一、基础知识
  1. 文件的三种状态

    1. 已修改

      在工作目录修改Git文件(工作区)

    2. 已暂存

      对已修改的文件执行暂存操作,将文件存入暂存区

    3. 已提交

      将暂存的文件执行提交操作,将文件存入本地版本库

  2. 总分支


    branch1.png
  1. git根据.git文件来识别版本库
二、基础知识
  1. 创建目录文件夹 mkdir xx

  2. 进入目录 cd xx

  3. 查看git所在目录 which git

  4. 创建仓库 git init

    1. 当初始化一个仓库的时候,会自动创建一个默认branch(主分支,master)

    2. 由于在git中,所有的操作都是在某个分支下进行的

  5. 查看当前目录下的内容(看不到隐藏目录) ls

  6. 查看当前目录下的隐藏目录(蓝色是目录/白色是文件) ls -al

  7. git config --global user.name "xx"设置用户名,多次设置会覆盖上一次的设置

  8. git config --global user.email “you@example.com”,设置通信邮箱

  9. 配置文件

    1. git config 直接输 获得所有命令用法:比如:git config user.name(获得用户名)

    2. /etc/gitconfig(几乎不会使用)

      1. 情况:一台主机多个用户同时使用一个账号,争对于操作系统

      2. 命令:git config --system

    3. ~/.gitconfig(常用)

      1. 情况:单个用户创建多个仓库使用同一个账号,争对于单个用户而言

      2. 命令:git config --global

    4. .git/config(常用)

      1. 情况:不同项目不同账号,即使同一个用户,争对于特定项目(仓库)

      2. 命令:git config --local

    5. 以上三种都设置的话,根据优先级倒序递减(4 > 3 > 2)

  10. git add 将已修改的文件纳入到暂存区中

  11. git add . 将工作区的新文件/已修改的文件全部纳入到暂存区中

  12. git commit 将暂存区中的文件纳入到版本库中

    1. 由于Git是对提交文件有强制日志信息的输入,因此单单只有当前这语句,会出现以下界面让开发者进行输入说明信息,用法与编写文本文件是一样的

    若不输入信息,则会被终止提交操作,即该文件无法提交到版本库中
    提交之后(已提交状态):


    1. 普遍用法:git commit -m '说明文字'

      commitFile2.png

      其中会出现对该文件的修改的记录

    2. git commit --amend -m "说明文字" 将上一次的提交说明文字进行修正,覆盖上一次的提交信息

  13. git rm 删除版本库中特定的文件

  14. git help 获取git的帮助信息

  15. git help config/git config --help/mon git-config(此为linux下的查看文档)

  16. git log 查看提交日志文件


    printLog.png

    图中红色部分序列号,是摘要值(commit id),根据文本通过sha1算法所计算出来的摘要值
    如果log有很多,可以有以下的快捷键来进行查看

    1. 空格 往下翻看

    2. q退出当前日志查看

    3. ctrl + f 往下翻看/ctrl + d

    4. git log -n 查看最近的n条日志信息

    5. git log --pretty=oneline将日志信息以摘要值+ 说明文字以行来显示

    6. git log --pretty=format:"%h-%an,%ar-%s" 将日志信息以一定的格式来进行显示,其中h代表摘要值,an代表用户名,ar代表提交时间,s代表说明文字,其他的查看文档进行查阅

    7. git log --graph 以图形化的方式查看log信息

    8. git log --abbrev-commit 将commit id以缩写的形式显示

    9. 以上的显示方式可以进行组合

  17. git diff 文件在不同状态下的差别,比如:暂存区与版本库中文件的差别

  18. git pull 从远程版本库中的文件拉取到本地

  19. git push 将本地版本库中的内容推送到远程

  20. rm -rf /*将操作系统中的文件全部删除,特别小心

  21. rm -rf .gt将当前目录下的.gt文件以及.gt文件下的文件全部删除(逐级删除)(需将隐藏目录进行显示之后才能删除即先进行ls -a操作)(同样适用于删除当前目录下的其他文件)(永久删除)(也可以删除文件夹)

  22. cd .. 回到上层目录

  23. touch xx.txt 创建文件

  24. ctrl + c抛弃当前行 开启新的一行进行输入

  25. ctrl+a 将光标移动到输入行的最开始的位置

  26. ctrl+e 将光标移动到输入行的最末尾的位置

  27. vim xx.txt 对当前文件进行修改,刚敲入时是命令模式,点击【i】切换为插入模式,输入完之后保存按【esc】进入命令模式,输入【:wq】其中【w】为将输入内容写入当前文件,【q】表示退出,【enter】
    若没有此文件,就会进行创建该文件

  28. cat xx.txt查看文件内容


    gitstatusLook.png
  29. git status 查看当前的工作区所处的状态

  30. git reset HEAD xx.txt 将文件从暂存区(stage,index)移除到工作区

  31. git checkout -- xx.txt 相对于暂存区的最后一次提交将已修改的文件丢掉其修改操作,(由于只要放到stage中就会被git管理,而里面的内容就会成为定夺的,而该命令是针对于还没有提交,只是在修改之后临时返回的一种操作)

  32. git checkout commit_id 切换到commit_id提交点,在该提交点上可进行相应的修改(以游离状态),修改之后必须提交(commit)之后,git会保留当前提交的log,并在之后用于可创建新的分支时使用,并可以将该新创建的分支(带有修改后的log信息)进行合并保留,示意图如下:


    branch39.png

    例子:查看当前master下的提交信息


    checkout1.png

    可以看到切换到提交点39f3f8f之后,git提示当前处于游离状态并且HEAD指针指向39f3f8f提交点,可以在当前提交点进行任意的操作并且提交,git会对你本次的提交进行保存,以便于在创建新分支时进行添加使用
    checkout2.png

    在39f3f8f提交点下修改test5.txt文件之后提交,可以看到HEAD指向了后一个提交点,同时目前所处的提交点也切换为当前所指


    checkout4.png

    branch39.png

    切换到master下出现warning信息,提示如果没有保留修改,则会遗留掉之前的修改,而如果要保留修改就要采用新建一个分支保留修改信息
    checkout5.png

    创建新分支保留修改之后发现即从提交点39f3f8f新建的分支
    checkout6.png

    因此如果直接删除,git会提示你没有merge,否则需要git branch -D branch_name的形式进行删除
  33. git rm --cached xx.txt 将已暂存的文件回退到已修改状态,即将文件在暂存区中删除(删除暂存区中的文件)该删除之后的记录也是在暂存区中存放的,唯一不同于git rm的是,该删除不删除工作区中的文件,而git rm会将工作区中的文件一并删除

  34. git rm (git删除)删除本地库中的文件(同时当前目录下该文件也不存在),将被删除的文件记录纳入暂存区中(该文件而已),若想恢复被删除的文件,需要两个动作:

    1. git reset HEAD xx.txt,将待删除的文件从暂存区恢复到工作区,但此时文本内容还没有恢复(同时文件也没有恢复,找不到该文件)

    2. git checkout -- xx.txt 将工作区中的修改丢掉,恢复原来的文本内容以及撤销对该文件的删除操作(直接写这一步骤而没有上一步,是不行的,原因是:该操作争对于放在工作区中的文件,但是如果该文件没有恢复到工作区,是无法执行的)/git restore xx.txt文件也可一样的意义操作
      当执行完删除命令,并将该事件的执行提交git commit -m 'xx'之后,该文件就不能再通过此方式恢复,系统认为该文件是通过思考之后确定需要删除的文件即不后悔的文件

  35. rm xx.txt 通过操作系统命令来删除,将文件xx.txt删除,而此时被删除的文件没有纳入暂存区中,当需提交git commit -m "xx" 当前删除操作的时候,由于不存在于暂存区中,因此此操作无法提交,需要先git add 到暂存区。而对于该文件的恢复操作与git rm xx.txt是一样的

  36. pwd 获取当前所处的目录

  37. shift + a将光标移到文字最后,并将命令模式转换为插入模式(争对修改某一个文件)

  38. git restore xx.txt将文件的修改回溯到原来的状态(已删除的文件无法恢复到原来的状态)(需要先将删除的文件git reset HEAD xx.txt/git restore --staged xx.txt)

  39. echo '文本' > xx.txt 将文本内容覆盖xx文件中 (重定向,默认输入到终端,但是可以改为输入到文件中也是可得)(没有xx.txt就会新创建一个文件)

  40. git ls-files 获取已暂存 + 已提交状态的文件

  41. git mv old.txt new.txt 将old文件名改为new的文件名,由于mv是move即移动的含义,将文件移动到当前文件夹中,也即将原来的文件进行覆盖,完成重命名操作

    mv1.png

    可以看到当前文件被重命名,并且由于文件被修改了,被存放在了暂存区(changes to be committed)

    将暂存区中的文件恢复到工作区
    mv3.png

    可以看到文件出现了一个原来的test1.txt文件成为了被删除文件,并且出现了一个重命名的新的文件,原因:git mv xx.txt操作是删除原来的文件,创建一个新的并且和原来的文件内容一样的文件,所以恢复的时候,恢复的是删除的状态
    mv.png

    继续恢复工作区操作,可以看到恢复成功之后多出来了一个新命名的文件,且内容和原来的文件一样,如果要保持一个文件,需要在恢复过来之后将新建的文件删除git rm test.txt
    git mv和git rm一样,其操作都是交由git来管理,且恢复文件新增加的文件也在暂存区中,也交由git管理

  42. mv 操作系统重命名命令 其操作不会交由git管理


    mv4.png

    执行mv之后可以看到删除了原来的文件test2.txt且新文件test3.txt没有纳入暂存区,也即没有被追踪,如果将新文件加入到暂存区,为修改状态


    mv5.png

    只有将源文件以及新文件都加入暂存区被git管理,其才能与git mv一样识别出其的状态
    mv6.png

    之后的恢复操作和git mv一样,且都会新增一个文

  43. 争对于git add .会将工作区中的新文件/修改文件/删除文件 全部都纳入到暂存区中,由于并不是所有的文件都需要纳入到暂存区中,因此解决的方法为:

    1. 新增.gitignore(忽略文件)隐藏文件

    2. 在.gitignore文件中添加不需要纳入暂存区中的文件

    3. 并将.gitignore文件提交到版本库中

    4. 此后有不需要提交到暂存区的都可以添加到.gitignore文件中,由于每次的修改都是对.gitignore文件的修改,因此每次都要重新add -> commit

    5. 空文件不会被纳入到暂存区中

  44. 在.gitignore文件中可以使用通配符,来更方便的指明要忽略的文件(其中在该文件中写上#xxx #之后的内容都会被注释掉 )


    gitignore.png
    1. /TODO 即忽略项目根目录下的文件/文件夹,若写成/TDDO/即忽略TDDO文件夹下的全部文件(其中空文件夹不会被git识别)
    2. build/ 即在根目录下存在的文件夹,会忽略该文件夹下的内容
    3. doc/xx.txt doc/*.txt 忽略指定的目录下的文件或者以txt结尾的文件
    4. doc/**/xx.txt忽略doc目录下的文件下的文件下的xx.txt文件
  45. mkdir xx && cd xx 创建目录xx并进入目录xx

  46. git commit -am "说明文字" 添加当前目录下所有已修改的文件并提交到暂存区并提交到本地版本库中

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

推荐阅读更多精彩内容

  • 说明:博客原创作者地址传送门 下面是我整理的常用 Git 命令清单。几个专用名词的译名如下。 Workspace:...
    清风乀月阅读 350评论 0 4
  • Git常用命令 请确保已经安装里git客户端 一般配置 git --version//查看git的版本信息git ...
    闲云清烟阅读 267评论 0 0
  • git config git config命令的作用是配置git的相关信息。 配置全局的用户名和邮箱,mac下可通...
    磐璃阅读 347评论 0 0
  • 廖雪峰的官方网站:http://www.liaoxuefeng.com/ 本文是学习廖雪峰的官方网站上git教程g...
    m2fox阅读 290评论 0 0
  • 今天我们要说的Git的命令操作是基于本地Git仓库来进行,那么,到底什么是Git仓库呢? Git仓库可以简单理解成...
    字恋狂阅读 76评论 0 0