title: git的使用 date: 2022-04-29 15:38:45 tags: 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 .
.c
git 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 reset
# 将FILENAME文件恢复
git checkout FILENAME
git reset HEAD^
git checkout (捡垃圾)
commit
将暂存区的文件上传到仓库区
-m
参数是一个较为常用的参数,用于将提交信息与命令放在同一行
git commit -m "COMMIT MESSAGE"
通常来说用于描述的commit信息应该记录更新了什么内容等等,一般来说一行足以.如果需要很多文件信息也可以使用
git commit
打开commit信息文本,书写详细内容,使用方式同vim
git log
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保存的并不是文件的变化差异,而是文件不同时刻的快照.
首先与远程仓库建立连接,有两种方式
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使用时最常见的问题,涉及多人合作完成项目,分支的使用|合并