git 命令总结

git 是一款优秀的版本管理工具,能够管理我们的代码和文档

1) 概念

在这里插入图片描述

2) 初始化配置命令

#设置用户信息 
git config --global user.name "itcas"
git config --global user.email "hello@itcast.cn"
#查看配置信息
git config --list
git config user.name

#######说明
 这两个命令配置后,我们后续提交代码,显示提交人的信息,就是在这里配置的
 比如 
	张三提交了 a.txt 
	李四提价了 b.txt ,
	同一个仓库(文件夹)下 怎么知道是谁提交的文件? 就需要张三把自己电脑上的 git 参数 设置成 "张三" 李四设置成 "李四"
 	如果李四发现张三提交的资料有问题, 需要找张三沟通,怎么办,  如果张三配置了 user.email , 则李四能找到张三的邮箱,给他(她)发送邮件沟通

3) 初始化仓库

#  本地初始化
git init
# 从远程仓库clone
git clone 远程Git仓库地址 

4) 文件状态

untracked 未跟踪(未被纳入版本控制)(我们新建的文件就是这个状态) 
tracked 已跟踪(被纳入版本控制)
 	 Staged 已暂存状态       (正常被管理,但是还没有提交)
	 Unmodified 未修改状态   (正常被管理,已提交未修改)
	 Modified 已修改状态      (一个已经提交的文件 ,如果被修改了,还没有二次提交)
	

在这里插入图片描述

# 查看状态
git status 
#查看状态 使输出信息更加简洁
git status –s 
# 将未跟踪的文件加入暂存区
git add  <文件名>  
# 将暂存区的文件取消暂存 (取消 add )
git reset  <文件名>  
# git commit 将暂存区的文件修改提交到本地仓库
git commit -m "日志信息"  <文件名>  
# 从本地工作区 删除文件
git rm <文件名>  
# 如果本工作区库误删, 想要回退
git checkout <文件名>  

5)添加忽略

# 所有以.a 结尾的文件讲被忽略(递归)
*.a
# 不管其他规则怎样,强制不忽略  lib.a
!lib.a
# 只忽略 文件 TODO (注意这里是文件)
/TODO
# 忽略 build文件夹下所有内容(递归) 这里是文件夹
build/
# 忽略 doc 目录下以 *.txt 结尾的文件 (不递归)
doc/*.txt
# 忽略 doc 目录下以 *.pdf 结尾的文件 (递归)
doc/**/*.pdf

6) 查看日志

git log 查看日志记录
#空格翻页,q 退出

7) git 远程仓库操作

# 查看远程  列出指定的每一个远程服务器的简写
git remote 
# 查看远程 , 列出 简称和地址
git remote  -v  
# 查看远程仓库详细地址
git remote show  <仓库简称>
# 添加远程仓库
git remote add <shortname> <url>
# 移除远程仓库和本地仓库的关系(只是从本地移除远程仓库的关联关系,并不会真正影响到远程仓库)
git remote rm <shortname> 
# 从远程仓库克隆
git clone <url> 
# 从远程仓库拉取 (拉取到.git 目录,不会合并到工作区,工作区发生变化)
git fetch  <shortname>  <分支名称>
# 手动合并  把某个版本的某个分支合并到当前工作区
git merge <shortname>/<分支名称>
# 从远程仓库拉取 (拉取到.git 目录,合并到工作区,工作区不发生变化)
git pull  <shortname>  <分支名称>
git pull  <shortname>  <分支名称>  --allow-unrelated-histories  #  强制拉取合并

注意:如果当前本地仓库不是从远程仓库克隆,而是本地创建的仓库,并且仓库中存在文件,此时再从远程仓库拉取文件的时候会报错(fatal: refusing to merge unrelated histories ),解决此问题可以在git pull命令后加入参数--allow-unrelated-histories (如上 命令)

# 将本地仓库推送至远程仓库的某个分支
git push [remote-name] [branch-name]
# 

8) 分支

为什么要有分支?
在这里插入图片描述

# 默认 分支名称为 master
# 列出所有本地分支
git branch
# 列出所有远程分支
git branch -r
# 列出所有本地分支和远程分支
git branch -a
# 创建分支
git branch <分支名>
# 切换分支 
git chekout <分支名>
# 删除分支(如果分支已经修改过,则不允许删除)
git branch -d  <分支名>
# 强制删除分支
git branch -D  <分支名>

注意:

分支的删除不允许自杀,比如当前工作区的分支是 b1,则不允许删除 b1 ,必须切换至其他分支才能删除 b1
# 提交分支至远程仓库
git push <仓库简称> <分支名称>	
# 合并分支 将其他分支合并至当前工作区
git merge <分支名称>	
# 删除远程仓库分支
git push origin –d branchName

9) 标签tag

标签可以看作是阶段性旗帜

比如我们 常见软件的版本 1.0 ,2.0 等都可以查看做tag

我们可以对项目中的重大更新做一次标记,比如某个需求上线具有划时代的意义 我们就可以 做一个标记

方便后续 跟踪或者版本回退

# 列出所有tag
git tag
# 查看tag详细信息 
 git show [tagName]
# 新建一个tag
git tag [tagName]
# 提交指定tag
$ git push [仓库简称] [tagName]
# 新建一个分支,指向某个tag
$ git checkout -b [branch] [tag]
# 删除本地tag
$ git tag -d [tag]
# 删除远程tag (注意 空格)
$ git push origin :refs/tags/[tag]

在这里插入图片描述

10) ssh

公钥私钥可以看作古代 的"虎符" , 我们本地电脑又一份,远程服务器有一份, 只要 "虎符" 核对通过 表示身份无误,可以执行提交等操作,无需输入用户名密码

#生成公钥密钥
ssh-keygen –t rsa

Q.E.D.