git的使用
由于笔者水平有限,该文档并不是git的教学文档,仅为学习了git的用法之后的总结,希望能通过整理的方式加深印象,如果对git尚不熟悉,可以参考以下文章
Git入门级参考文章
git的使用
git支持linux的部分命令,包括cat,mkdir,touch,vim,rm,cd等等,也有一些常用的命令和提交格式
git不支持完整的正则表达式语法(regex es),它只支持unix fnmatch(filename pattern matching),通常来说在命令行中使用正则语法容易出现误导,如demo.c等习惯性的写法,因此采用unix的匹配写法,具体为:
*匹配任意字符,任意次数
?匹配任意字符,一次
[seq]匹配seq中出现的字符,一次
[!seq]匹配不在seq中出现的字符,一次
如匹配 demo.cpp可使用如下任意一种写法,正则写法如 \w*.\w* 将不被识别
*.cpp | demo.* | demo.???当您使用 Git 和 GitHub 协作处理项目时,例如,如果您在 Windows 计算机上工作,并且您的合作者在 macOS 中进行了更改,则 Git 可能会产生意外的结果.您可以将 Git 配置为自动处理行尾,以便与使用不同操作系统的人员进行有效协作。
git config --global core.autocrlf true关于 add
将文件从工作区
add到暂存区
- 添加所有文件
git add .
- 添加所有
.cgit add *.c
- 添加
FILEPATH文件夹下所有的文件git add FILEPATH/
- 查看添加了哪些文件
git status
关于 rm
有时候添加错误的或未完成需要修改的文件到暂存区,需要从暂存区删除该文件
- 删除方式
注意,这里可以使用
fnmatch匹配文件名,但是如果某一匹配项不在暂存区而在工作区未被加入,则删除失败例如
1.txt在暂存区中,2.txt未加入暂存区,则使用git rm --cached *.txt会删除失败git add不会有这个问题,可以理解为把所有匹配项都加入暂存区,重复的再加一次- 从暂存区删除该文件,物理文件不删除(推荐使用),放入垃圾桶
git rm --cached FILENAME
- 删除暂存区中的文件和物理文件,谨慎使用
git rm --f FILENAME
- 从暂存区删除该文件,物理文件不删除(推荐使用),放入垃圾桶
- 删除已提交的文件夹或文件
git rm -r --cached FOLDER git add . ...
- 误删文件恢复 git rm 需谨慎!!!
- 如果处于未提交状态
# 查看所有修改项 git reset # 将FILENAME文件恢复 git checkout FILENAME
- 如果已经commit,那么会有些麻烦,只能退回上个版本,然后把被删除文件再找回来
git reset HEAD^ git checkout (捡垃圾)
- 如果处于未提交状态
关于 commit
将暂存区的文件上传到仓库区
- 提交
-m参数是一个较为常用的参数,用于将提交信息与命令放在同一行git commit -m "COMMIT MESSAGE"通常来说用于描述的commit信息应该记录更新了什么内容等等,一般来说一行足以.如果需要很多文件信息也可以使用
git commit打开commit信息文本,书写详细内容,使用方式同
vim
- 查看commit日志(Q退出)
git log
- 单行查看commit日志,关键信息
git log --pretty=oneline
- 回退到上一个版本(
--hard本地代码改变.谨慎使用)git reset --hard HEAD^回退到上N个版本
git reset --hard HEAD~N通常来说使用
git reset --hard HEAD^来进行版本回退是因为有人错误的提交了commit,如提交到了不同的分支(branch)或者误修改了某些文件,但这种情况还是相对较少这里提供两种可能会遇到的情况:
比如说你今天打算改一改代码,你可以先把所有文件
git add然后git commit一次,然后开始修改,a.txt b.txt c.txt等文件,修改完之后你发现测试的结果不尽如人意,或者你觉得你的修改太愚蠢了太繁琐了想要重写,这时候就可以使用git reset --hard HEAD来回到最后一次commit的位置,这样你在a/b/c.txt中的所有修改都会撤回(注意会改变本地文件,使用时请注意),就不需要你记住修改了什么文件再一次次ctrl+z回退了.或者如果你改了某几个文件的代码,但是想撤回某一个文件的所有修改,可以使用
git checkout -- FILENAME来撤销修改
- 返回到某一个指定的版本
git reflog # 查看所有commit记录,根据commit内容搜索,找到前面对应的序号 git reset --hard 3f72bae # 同步到某一版本
关于 push
将仓库区的文件上传到GitHub
有时候会出现
Failed to connect to github.com port 443 after xxx ms: Timed out的报错信息或者OpenSSL fail的报错,网上的解决方法很多,有时成功有时不成功,我搜集到的所有解决方法.目前使用SSH可以无压力的上传下载使用git
Git保存的并不是文件的变化差异,而是文件不同时刻的快照.
git add操作是将文件加入暂存区,Git会为每个对象计算校验和(SHA-1哈希算法),保存blob对象的快照
git commit操作会单独计算每一个目录的校验和,使用多个树对象来保存blob对象的校验和,最后再计算树对象的校验和,生成一个提交对象,包含树对象的指针和所有提交信息
- 每次提交都会包含一个指向上次提交对象的指针

首先与远程仓库建立连接,有两种方式
- 直接从URL克隆仓库,默认将
origin设置为该仓库的地址git clone URL
- 将本地文件夹与远程仓库连接,
origin对应远程仓库的地址(需要新建GitHub仓库)git remote add origin git@github.com:luzhixing12345/git-learning.git
可以使用git remote -v查看远程仓库的地址,一个本地仓库可以连接多个远程仓库
默认的分支是master,也就是说我们选择将我们目前commit的本地仓库提交到某一个远程仓库的某一个分支上,我们使用
git push origin master第一次提交的时候可以选择git push -u origin master追踪此分支,这样默认选择以后都提交到origin远程仓库的master分支,之后的提交可以省略参数
git push总结: 一套基本的git/GitHub的文件流如下
- 初次配置
git init git add . git commit -m "upload all the files" git remote add origin git@github.com:luzhixing12345/git-learning.git git push -u origin master
- 之后的所有修改
git add . git commit -m "update git learning and fix docs bugs" git push
以上的命令已经可以满足绝大多数个人的项目开发与维护了,但是往往还有一些其他的问题,比如多人合作编写代码,比如临时修复bug等任务
git设计了很好的分支系统和项目拉取合并的方式,这一部分也十分重要,但并不是必要掌握的
接下来会介绍branch | pull | fetch | merge.这一部分可以说是git使用时最常见的问题,涉及多人合作完成项目,分支的使用|合并
优质网站
- GitHub文件代理加速下载服务 (GitHub 文件/Releases/archive/gist/raw.githubusercontent.com)