Git学习笔记01--常用Git命令、cmd命令及Git总结性知识

时间:2021-02-02 12:28:04

资源:外国网友制作的 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 删除文件