git 的使用教程
写在前面
基本的Linus命令
ls/ll查看目录
cat查看内容
touch创建文件
vi编辑
01. 安装及初始化
设置用户名和邮箱, 用户名可能有空格,所以使用 " "
git config --global user.name "Your Name" |
查看用户名和邮箱
git config --global user.name |
设置记住账户密码
git config --global credential.helper store |
Local:一般省略,只对本地仓库有效
--global:全局配置,对所有仓库生效
--system:系统配置,对所有用户生效
02. 新建仓库
//初始化当前目录为一个git仓库
git init |
创建好一个仓库之后,其中必然包含一个
.git文件,如果将这个文件删除,那仓库就会变成一个普通的文件夹!
03. 工作区域
工作区(Working Director)
文件夹
git add添加到暂存区
git rm --cached <file> 将文件取消暂存暂存区(Staging Area/Index)
等待被提交
git ls-files查看暂存区的文件
git commit提交到本地仓库,只会提交暂存区中的文件本地仓库(Local Repository)
04. 文件状态
Untrack(未跟踪):新创建的文件,还没有被git管理起来的状态.
Unstaged(未暂存):修改已有文件.
Unmodified(未修改):已经被git管理起来,但内容没发生变化.
Modified(已修改):修改了文件,但还没有进入暂存区.
Staged(已暂存):已经加入到暂存区.
05. 添加和提交文件
git status查看仓库状态
git add .将当前文件夹添加到暂存区
git add *.c把所有.c文件添加到暂存区
git commit -m "info",这个信息会被记录到仓库里面
git log查看提交记录
–all 显示所有分支
–pretty=oneline 显示一行
–abbrev-commit 简洁
-graph 图形式
git reflog:全部操作记录(提交和回退记录)
06. 回退版本
git reset的默认参数是--mixed
git reset --soft回退到某一个版本,并保留工作区和暂存区的所有修改内容
git reset --hard回退到某一个版本,丢弃工作区和暂存区的所有修改内容
git reset --mixed回退到某一个版本,并保留工作区的修改内容,丢弃暂存区的修改内容
git reset [参数] commit_id,id表示提交时的版本id
git reset HEAD^回退到上一个版本
HEAD是一个指针,指向当前分支的最新节点
07. 查看差异
git diff查看文件在工作区,暂存区以及版本库之间的差异
git diff默认比较的是工作区和暂存区之间的差异内容
git diff HEAD比较工作区和版本库之间的差异内容
git diff --cached比较暂存区和版本库之间的差异内容
git diff id1 id2比较两个特定版本之间的差异内容
git diff HEAD~ HEAD和上一个版本比较差异内容,HEAD^也可以
git diff HEAD~2 HEAD和前两个版本比较差异内容
git diff HEAD~ HEAD <file>只查看file的差异内容
git diff <branch_name> <branch_name>比较分之间的差异内容
08. 删除文件
删除文件一般有两种方法.
-
先在本地工作区中删除文件,然后
git add更新暂存区 -
git rm <file>直接从暂存区和工作区删除
最后记得git add,git commit提交到仓库,否则删除的文件还在版本库中
补充:
git rm --cached <file>把文件从暂存区删除,但保留在当前工作区.
git rm -r *递归删除某个目录下的所有子目录和文件夹
命令行指令rm 用于删除文件、目录, rm = remove
-i 删除前提示, y删除, n不删除
-r 删除一个目录(含所有文件), r = repository
-f 强制执行删除操作, f = force
参数可叠加, 如rm -rf <dir>,直接删除目录
09. 忽略文件
.gitignore应该忽略那些文件呢?
-
系统或软件自动生成的文件
-
编译产生的中间文件或结果文件
-
运行时生成的日志文件,缓存文件,临时文件
-
涉及身份,密码,口令,密钥等敏感信息的文件
从上到下逐行匹配,每一行表示一个忽略模式
10. SSH配置和克隆仓库
HTTPS:push时需要验证用户名和密码
SSH:无需验证用户名和密码,但要配置SSH公钥(推荐)
-
复制仓库SSH链接,在本地
git clone <SSH链接>,会提示:Please make sure you have the correct access rights and the repository exists.请不要担心. -
cd到用户根目录下,再cd .ssh -
使用
ssh-key generate -t rsa -b 4096生成SSH密钥(-t rsa指定协议rsa,-b 4096指定生成大小为4096) -
系统提示需要输入密钥的文件名,若第一次使用,直接按回车就好;若第二次使用(之前已经配置过SSH),最好不要直接回车,否则会覆盖掉之前的id_rsa密钥文件,且操作不可逆.
-
此时.ssh文件下多出来两个文件,
id_rsa是私钥文件,id_rsa.pub就是公钥文件 -
打开公钥文件,复制里面的内容
-
回到github网页,点击头像进入
settings,点击左侧SSH and GPG keys,在右侧点击New SSH key,将公钥粘贴进去,Title任意输入即可 -
最后点击 Add SSH key 就成功地把公钥添加到github上了.
如果你的.ssh文件夹里有多个密钥文件,那还要增加一步配置
创建一个config文件,并把这5行内容添加进去
# github |
意思是,当我们访问github时,指定使用
11. 本地仓库和远程仓库
git是一种分布式的版本控制系统.本地仓库和远程仓库是相互独立的,我们可以在本地仓库中做任何修改,这并不会影响到远程仓库;同样远程仓库的修改也不会影响到我们本地仓库.
我们需要一种机制来同步本地仓库和远程仓库的修改内容
git push:把本地仓库的修改推送到远程仓库
git pull:把远程仓库的修改拉取到本地仓库
12. 关联本地仓库和远程仓库
git remote add <shortname> <url>:为本地仓库添加一个远程仓库
以本人的博客为例:
git remote add origin git@SSH链接
git remote -v:查看当前本地仓库对应的远程仓库的别名和地址
git branch -M main:指定分支的名称为main,一般默认的分支就是main,所以这一步可以省略
git push [-f] -u origin main:将本地的main分支和远程的origin仓库的main分支关联起来,-f强制覆盖—set-upstream表示推送的同时建立连接(绑定)
其实git push -u origin main:main是完整的命令,-u是upstream的缩写,意思是把本地仓库和别名为origin的远程仓库关联起来(如果远端仓库不是空的)
main:main就是把本地仓库的main分支推送给远程仓库的main分支,如果他们的名字相同的话,我们可以省略,只写一个main就可以了.
git push origin master:把本地的master分支推送到远端的origin仓库,master分支不是init就有的,是在第一次commit才有的
git push --set-upstream origin master:master
当有了链接之后就可以直接git push了
git branch -vv可以查看本地本质和远程分支的对应关系
git pull <远程仓库名> <远程分支名>:<本地分支名>
13. 分支使用流程
- [ ] 待补充内容
14. 抓取和拉取
抓取:git fetch [remote name] [branch name]:将远端的分支抓取到本地,但不会合并
合并:git merge origin/master
拉去:git pull:抓取加合并
15. 解决合并冲突
- 待补充
写在最后
git使用起来非常方便,希望小伙伴们天天使用😁