资源:外国网友制作的 Git Cheat Sheet

  第二次学习廖雪峰老师的Git教程,学习过程中把教程中涉及到的Git命令及总结性知识记录下来方便二次复习。

知识点

  1. 所有的版本控制系统,其实只能跟踪文本文件的改动,比如TXT文本文件、网页、程序代码等等,版本控制系统可以告诉你每次的改动,比如在第5行加了一个单词“hello”,在第8行删了一个单词‘’‘world’。而图片、视频这些二进制文件,虽然也能由版本控制系统管理,但是没办法跟踪文件的变化,只能把二进制文件每次的改变串起来,也就是只知道图片从100KB变成了120KB,但是到底改变了什么,版本控制系统无法知道。

  2. 当Git无法自动合并分支时,就必须首先解决冲突。解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交,合并完成

  3. 通常,合并分支时,如果可能,Git会用 Fast forward 模式,但这种模式下,删除分支后会丢掉分支信息。如果要强制禁用 Fast forward 模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息

  4. 多人协作的模式

    • 首先,可以试图用 git push origin <branch-name> 推送自己的修改

    • 如果推送失败,则因为远程分支比本地更新,需要先用 git pull 试图合并

    • 如果合并有冲突,则解决冲突,并在本地提交

    • 没有冲突或者解决冲突之后,再用 git push origin <branch-name> 推送就能成功

    • 如果 git pull 提示 no tracking information ,则说明本地分支和远程分支的链接没创建,用命令 git branch --set-upstream-to <branch-name> origin/<branch-name>

  5. 在Git工作区的根目录下创建一个特殊的 .gitignore 文件,然后把要忽略的文件名填写进去,Git就会自动忽略这些文件

Git命令

  • git init 把当前目录变成Git可以管理的仓库

    • 注意:Git在当前目录下自动创建 .git 目录,用来跟踪管理版本库,随意更改会破坏Git仓库。

  • git add 文件名 把文件添加到暂存区

    • git add hello.txt

  • git commit -m 本次提交的说明 把暂存区的所有内容提交到当前分支

    • -m 暂存区

    • 本次提交的说明 理论上可以是任何内容,但最好是有意义的内容,方便从历史记录中找到改动记录

    • git commit -m "add new words"

  • git status 查看仓库当前的状态

  • git diff 查看文件修改前后的不同

    • 显示的格式为Unix通用的diff格式

  • git log 显示从最近到最远的提交日志

    • 显示结果中出现的类似 db376e1... 的是经SHA1计算,用十六进制表示的 commit-id(版本号)

    • git log --pretty=oneline 添加参数简化输出信息

    • git log --graph 显示分支合并图

    • 输入 q 退出

  • git reset 版本回退

    • git reset --hard commit-id

      • 版本号可以不写全,写到具有区分度的前几位就可以,如一共有两个版本号a1253f...a135ed... ,则写到前3位就可以

    • git reset --hard HEAD^

      • HEAD 表示当前版本

      • HEAD 后面加几个 ^ 就表示往上几个版本,如 HEAD^ 表示往上一个版本

      • HEAD 后面加 ~数字n 表示往上n个版本,如 HEAD~100 表示往上100个版本

    • 注意:因为在cmd^是转义符号,相当于Linux中的\,当出现在行尾的时候含义是这行还没写完,无视行尾的换行符,下行的内容实际执行的时候理解为直接接在上一行尾,所以^结尾的时候提示More?,就是提示输入下一行的内容,不输入则会报错。解决方法有两个,一是用双引号包裹,强行指定为字符串内容"^",二是输入双倍的^,如^^,前一个转义后一个,代表一个没有特殊含义的字符^本身。

  • git reflog 记录操作过的每一次命令

  • git checkout -- 文件名 把该文件在工作区的修改全部撤销

    • 如果文件自修改后还没有被放到暂存区,那么撤销后就回到和版本库一模一样的状态

    • 如果文件添加到暂存区后,又作了修改,那么撤销后就回到添加到暂存区后的状态

    • 总之,就是让这个文件回到最近一次 git commitgit add 时的状态

    • 命令中的 -- 很重要,没有 -- ,就变成了“切换到另一个分支”的命令

  • git rm 删除文件

    • 如果一个文件已经被提交到版本库,那么永远不用担心误删,但是要小心,只能恢复文件到最新版本,会丢失最近一次提交后修改的内容

    • 注意:从来没有被添加到版本库就被删除的文件,是无法恢复的

  • git remote add origin git@server-name:path/repo-name.git 关联远程仓库

    • 如使用GitHub,server-name 就是github.com, path 就是账户名,repo-name就是仓库名

  • git remote 查看远程仓库信息

    • git remote -v 显示更详细的信息

  • git push 把本地仓库的内容推送到远程仓库,实际上是把当前分支 master 推送到远程仓库

    • 由于新建的远程仓库是空的,第一次推送 master 分支时,加上 -u 参数,Git不但会把本地的 master 分支内容推送到远程仓库新的 master 分支,还会把本地的 master 分支和远程的 master 分支关联起来,在以后的推送或者拉取时就可以简化命令

  • git pull 把远程仓库内容拉取到本地仓库

  • git clone 克隆远程仓库到本地

    • Git支持多种协议,默认的 git:// 使用 ssh 协议,也可以使用 https 等其它协议

    • 使用 ssh,完整命令为 git clone git@github.com:user-name/repo-name.git

    • 使用 https,完整命令为 git clone https://github.com/user-name/repo-name.git

    • 使用 https 速度慢,且每次推送都必须输入口令,但在只开放 http 端口的公司内部就只能使用 https

  • git branch xxx 创建 xxx 分支

  • git branch 列出所有分支,在当前分支前标注 *

  • git branch -d xxx 删除 xxx 分支

  • git branch -D xxx 强行删除还未被合并的 xxx 分支

  • git checkout xxx 切换到 xxx 分支

  • git checkout -b xxx 创建并切换到 xxx分支

  • git switch xxx 切换到 xxx 分支

    • git switch -c xxx 创建并切换到 xxx 分支

  • git merge xxx 合并 xxx 分支到当前分支

  • git merge --no-ff 表示禁用 Fast forword 模式

  • git stash 封存当前工作现场

  • git stash list 查看所有保存的工作现场

  • git stash apply 恢复封存的工作现场

  • git stash drop 恢复工作现场后,删除对应stash内容

  • git stash pop 恢复工作现场的同时,删除对应stash内容

  • git stash apply stash@{数字n} 恢复数字n对应的工作现场

  • git cherry-pick commit-id 复制一个特定的提交到当前分支

    • Git自动给当前分支做了一次提交,注意这次提交的commit不同于复制的提交,只是两者改动相同

  • git tag 查看所有标签

    • 标签不是按时间顺序列出,而是按字母顺序列出

    • 标签总是和某个 commit 挂钩,如果这个 commit 既出现在 master 分支,又出现在 dev 分支,那么在这两个分支上都能看到这个标签

  • git tag xxx 给当前所在分支打上 xxx 标签

    • 标签默认打在最新提交的 commit 上,可以用 git tag xxx commit-id 给指定提交打标签

    • 可以创建带有说明的标签,用 -a 指定标签名,用 -m 指定说明文字,如 git tag -a v1.0 -m "version 0.1 released" commit-id

    • 创建的标签都存储在本地,不会自动推送到远程,所以,打错的标签可以在本地安全删除

  • git tag -d xxx 删除本地 xxx 标签

    • 如果标签已经推送到远程,要删除远程标签需要先本地删除,然后从远程删除,命令格式为 git push origin :refs/tags/v0.9 ,可以登录GitHub查看是否成功删除远程标签

  • git show xxx 查看 xxx 标签的信息

  • git push origin xxxxxx 标签推送到远程

  • git push origin --tags 一次性推送全部尚未推送到远程的本地标签

  • git config --global alias.x xxxx 设置为 xxx 的别名

cmd命令

  • cd 切换目录

  • md 新建文件夹

  • mkdir 新建文件夹

  • dir 查看文件夹

  • rd 删除文件夹

  • type nul> 新建文件

  • type 查看文件内容

  • del 删除文件

Git学习笔记01--常用Git命令、cmd命令及Git总结性知识的更多相关文章

  1. git学习笔记:常用命令总结

    本文根据廖雪峰的博客,记录下自己的学习笔记.主要记录常用的命令,包括仓库初始化.添加文件.提交修改.新建分支.内容暂存.分支管理.标签管理等内容. git是分布式版本控制系统. 首先是安装,从官网下载 ...

  2. Socket 学习笔记 01 常用函数

    常用方法 创建套接字: socket()    绑定本机端口: bind()    建立连接: connect(),accept()    侦听端口: listen()    数据传输: send() ...

  3. Git学习笔记(四)

    一.忽略特殊文件 在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件. 不需要从头写.gitignore文件,GitHub已经为我们 ...

  4. git 学习笔记6--remote & log

    git 学习笔记6--remote & log 创建SSH Keys ssh-keygen -t rsa -C "1050244110@qq.com" 本地关联远程 git ...

  5. 【转帖】Git学习笔记 记录一下

    本文内容参考了廖雪峰老师的博文,并做了适当整理,方便大家查阅. 原帖地址 https://wangfanggang.com/Git/git/ 常用命令 仓库初始化 - git init 1 git i ...

  6. Pro Git 学习笔记

    Pro Git 学习笔记 文档地址:Pro Git原文地址:PRO GIT 学习笔记 git常见命令 1.Git起步 初次运行Git前的配置 用户信息 git config --global user ...

  7. Git学习笔记 (二)

    Git学习笔记(二) 突然发现,学习新知识新技能,都得经常温故使用,这样才能日益精进.最近学习的Git是因为加入了课题组,在学习做一些后台,由于后台开发会牵扯到多人开发,所以学会Git这一代码管理工具 ...

  8. Git学习笔记(10)——搭建Git服务器

    本文主要记录了Git服务器的搭建,以及一些其他的配置,和最后的小总结. Git远程仓库服务器 其实远程仓库和本地仓库没啥不同,远程仓库只是每天24小时开机为大家服务,所以叫做服务器.我们完全可以把自己 ...

  9. Git学习笔记---协作的一般流程

    一般的操作流程 1.pull 王小坤与另一个同事张大炮一起开发一个项目,张大炮昨天修改了数据库读写的api,优化了执行速度,并把read()函数改名成了Read(),下午下班之前把这些代码push到服 ...

  10. GIT学习笔记(1):创建版本库

    GIT学习笔记(1):创建版本库 创建版本库 1.创建合适目录并初始化为仓库 版本库即需要交由Git进行版本控制的目录,其下所有文件的修改.删除,Git都能跟踪还原. 说明:初始化后,当前目录下会多出 ...

随机推荐

  1. LFU的基本原理与实现

    前言:之前有写过一篇关于LRU的文章链接https://www.cnblogs.com/wyq178/p/9976815.html  LRU全称:Least Recently Used:最近最少使用策 ...

  2. ElasticSearch 中文分词插件ik 的使用

    下载 IK 的版本要与 Elasticsearch 的版本一致,因此下载 7.1.0 版本. 安装 1.中文分词插件下载地址:https://github.com/medcl/elasticsearc ...

  3. windows下搭建开发环境

    PHP集成开发环境有很多,如XAMPP.AppServ......只要一键安装就把PHP环境给搭建好了.但这种安装方式不够灵活,软件的自由组合不方便,同时也不利于学习.所以我还是喜欢手工搭建PHP开发 ...

  4. Nmap的一些常用的nse脚本

    转自freebuf.com/  点击跳转 在这篇文章中,我们将研究最著名的渗透工具之一 Nmap 一款标志性的跨平台扫描器.它的原意为Network Mapper(网络映射器),具有相当强大的扫描功能 ...

  5. [Hadoop]浅谈MapReduce原理及执行流程

    MapReduce MapReduce原理非常重要,hive与spark都是基于MR原理 MapReduce采用多进程,方便对每个任务资源控制和调配,但是进程消耗更多的启动时间,因此MR时效性不高.适 ...

  6. Java抽象类、接口、内部类

    抽象类的概念: 1.Java中可以定义没有方法体的方法,还方法的具体实现由子类完成,该方法称为抽象方法,包含抽象方法的类就是抽象类: 2.如,shape类计算周长和面积的方法无法确定,那么就可以将这样 ...

  7. Android 开源库 GitHub 托管

    本文微信公众号「AndroidTraveler」首发. 背景 之前给大家写过一篇文章 Android 上传开源项目到 jcenter 实战踩坑之路,分享了上传开源项目到 jcenter 上面的一些踩坑 ...

  8. 大数据之路day03--java循环的延申与练习(while 、do-while、for)

    在今天,我突然被一个很尴尬的问题问到了,问题是这样的:说一下java循环的应用场景. 我想很多人一下子听到这样的问题不知道怎么回答,大部分人会去想有什么循环格式,特点是什么.这些都是错误的,在往后的面 ...

  9. JQuery弹出菜单时禁止页面(body)滚动

    最近在做手机端的弹出菜单,但是菜单弹出来后滑动手机屏幕的话页面滚动总是会将菜单滑上去,体验非常不好,所以查了一下弹出菜单时禁止页面滚动的方法,整理如下: 方法一:弹出菜单时给body和html添加一个 ...

  10. ASP.NET Core主机地址过滤HostFiltering

    前言 在ASP.Net Core2.X调用的CreateWebHostBuilder和3.X的主要区别在于WebHost的调用,CreateDefaultBuilder被Host替换,另一个区别是对C ...