git入门
git笔记会随着时间进行更正
再次更新:2019/10/09 23:02
几个概念
- git的三个区域
- 工作区
- git的初始化目录
- 暂存区
- 从工作区进一步提交的文件所在区域
- 本地仓库
- 从暂存区进一步提交的文件所在区域
- 提交流程一般是:工作区(add)->暂存区(commit)->本地库
- 工作区
命令
-
帮助命令
git help 需要查找的命令
- >git 需要查找的命令 --help
- >man 需要查找的命令
-
初始化本地库
git init
- 生成.git文件夹 存放git仓库配置及其数据
-
配置本地库信息
git config
- 环境参数
- system
- >git config --system
- 配置信息在主机上的任何用户和文件夹下都生效
- global
- >git config --global
- 配置信息在主机上的当前用户和及其所属文件夹下生效
- 不加以上参数,只在初始化本地库的文件夹下生效
- 配置使用者信息
- 用户名
- >git config user.name 用户名
- 邮箱
- >git config user.email 用户邮箱
- 配置以上信息只起到提示作用,与任何平台信息无关,但是一般与使用平台命名一致
-
添加被追踪文件至暂存区
git add 文件名(文件夹名)
- 将该文件(文件夹)从工作区添加到暂存区,并进行追踪
- >git add .
- 将工作区的所有文件(文件夹)添加到暂存区,并进行追踪
- 删除和移动(重命名)操作不可以被git add
追踪到,只能通过git rm
和git mv
来提交到暂存区
-
提交被追踪文件至本地库
git commit 文件名(文件夹名)
- 将该文件(文件夹)从暂存区添加到本地库,并生成新的记录
- 参数
- > -m
- 不用打开编辑器,直接在参数后添加提交描述
- > -a
- 若该文件曾被提交过,再次对其操作后,可直接使用该参数从工作区提交到本地库
-
删除文件(文件夹)
git rm 文件名(文件夹名)
- 删除工作区的文件名(文件夹名),且提交到暂存区
- 参数
- --cached 文件名(文件夹名)
- 删除暂存区文件名(文件夹名)的操作
已知:已提交文件test 需求:现在将文件test从本地库中删除 方法1: git rm test git commit -m "delete test" 方法2: rm test.txt git commit -a "delete test" 方法1和方法2得到结果一致
-
移动文件(文件夹)
git mv 文件名1(文件夹名1) 文件名2(文件夹名2)
- 移除工作区文件名1(文件夹名1),生成文件名2(文件夹名2),且提交到暂存区
已知:已提交文件test1 需求:现在将文件test1更名为test2 方法1: git mv test1 test2 git commit -m "rename test1->test2" 方法2: mv test1 test2 git rm test1 git commit -m "rename test1->test2" 方法3: mv test1 test2 rm test.txt git commit -a "rename test1->test2"
-
检查文件(文件夹)状态
- 文件(文件夹)状态
- 新增
- 修改
-删除
-重命名 - 未被提交
- 未存入暂存区
git status
- 对工作区和暂存区文件(文件夹)的状态进行检查显示
- 参数
- > -s(--short)
- 简化检查结果显示
- 文件(文件夹)状态
-
检查文件操作详细信息
git diff
- 不加参数,查看工作目录和暂存区之间的操作差异
- 参数
- > --cached(--staged)
- 查看暂存区和本地库之间的操作差异
-
查看提交历史记录
git log
- 显示所有提交记录
- >git log HEAD指针位置
- 显示指定提交历史记录
- 参数
- -p
- 查看提交历史记录的详细信息
- --stat
- 查看提交历史记录的简化信息
- -数字n
- 查看前n条提交历史记录的信息
- --oneline
- 将每条提交历史记录以行显示,记录简化的hash值
- --pretty=oneline
- 将每条提交历史记录以行显示,记录完整的hash值
- --pretty=fomat:"放以下参数和其他字符组成的字符串"
- 自定义提交历史记录的显示方式
- 参数
- %s
- 提交时写的描述
- %an
- 做出文件(文件夹)操作的作者名称
- %ae
- 做出文件(文件夹)操作的作者邮箱
- %ad
- 作者做出文件(文件夹)操作的时间
- %ar
- 作者做出文件(文件夹)操作距今的时间
- %cn
- 提交者的名称
- %ce
- 提交者的邮箱
- %cd
- 提交者提交的时间
- %cr
- 提交者提交距今的时间
- > 例如:git log --pretty=format:"提交者:%cn,距今时间:%cr,提交描述:%s"
- --graph
- 树状显示提交历史记录
-
对远程库克隆
git clone https地址(ssh地址)
- 初始化本地库且拉取远程库的所有历史版本
- 将最新的提交历史记录对应的工作区文件(文件夹)复制到现在的工作区
- 添加远程仓库地址别名,与原仓库的别名一致,可以直接操作并提交
-
.gitignore 文件
- 设置提交时忽略的文件或文件夹
- 文件内容设置
- 以#开头的行和空行会被忽略
- 利用正则匹配文件(文件夹)
- 参数
-
*
- 匹配0或任意个字符
-
?
- 匹配一个任意字符
- []
- 匹配括号里其中一个字符
- !
- 匹配取反的文件(文件夹)
-
- 参数
-
远程仓库
git remote
- 查看本地远程库别名
- -v
- 查看详细的远程库详细信息
- >git remote add 远程库别名 对应的url(ssh)
- 新建本地远程库别名
- >git remote show 远程库名
- 查看远程分支信息
- >git remote rename 旧的本地远程库别名 新的本地远程库别名
- 重命名本地远程库别名
- >git remote rm 需删除的本地远程库别名
- 删除本地远程库别名
-
推送分支
git push 远程分支的别名 被推送分支名(标签名):推送到的远程分支名(标签名)
- 将本地库文件(文件夹)推送到远程分支
- 填写分支名
- 在远程仓库创建远程分支
- 填写标签名
- 在远程仓库创建标签
- 删除远程分支
- >git push 远程分支的别名 --delete 远程分支名(标签名)
- >git push 远程分支的别名 :远程分支名
- 创建远程分支
- 创建前提是:需要创建的远程分支在本地已存在
- >git push 远程分支的别名 新建远程分支名:新建远程分支名
-
拉取远程分支到本地
git fetch 远程分支名(标签名)
- 拉取指定远程分支(标签)到本地远程分支
-
合并分支
git merge 本地分支名
- 将指定本地分支名合并到当前分支
- >git merge 合并到的本地分支名 被合并的本地分支名
- 将两个本地分支合并
- 合并冲突
- 两个分支若对相同文件的相同位置做了操作,会出现合并冲突
- 解决合并冲突
1. 将出现冲突的文件进行更正
2.git add
3.git commit -m "description"
-
拉取远程库
git pull 远程分支别名 被拉去的远程分支名(标签名):合并的本地分支名(标签名)
- 是fetch和merge两个操作的合并,将远程分支拉取到本地合并到指定分支上
-
标签
- 种类
- 轻量级标签
- 含附注标签
- 打标签
-
轻量级标签
git tag 标签名
- 为当前所处的提交打上轻量级标签,一个提交可以有多个标签
- 含附注标签
- >git tag -a "标签名" -m "description"
- 为当前所处的提交打上含附注标签,一个提交可以有多个标签
- 查看标签
- >git tag
- 查看所有标签
- 参数
- -l 标签名(可正则)
- 查询指定标签
- a "标签名"
- 指定标签名
- m "description"
- 定义标签描述
- 删除标签
- >git tag -d 标签名
- 给历史提交记录打标签
- >git tag -a "标签名" -m "description"某个历史记录的HEAD指针位置
- 推送标签到远程分支
- 推送指定的标签
- >git push 远程分支别名 被推送的标签名
- 推送全部标签
- >git push 远程分支别名 --tags
- 切换标签
- >git checkout 标签名
- 切换分支到标签所处分支,处于游离状态不能修改
- >git checkout -b 新建本地分支名 标签名
或
git branch 新建本地分支名 标签名
- >git checkout 该本地分支名
- 重命名标签
- >git tag -d 原来的标签名
- 删除原来的标签
- >git tag -a "新的标签名" -m "description"
- 创建新的标签
-
- 种类
-
操作本地分支
- 查看分支
git branch
- 查看分支名和当前所属分支
- 参数
- -v
- 查看分支和当前所属分支的具体信息
- -a
- 查看包含远程分支的全部分支信息
- --merged
- 查看已与当前分支合并的所有分支
- --no-merged
- 查看未与当前分支合并的所有分支
- 创建分支
- >git branch 新本地分支名
- 创建文件(文件夹)为当前分支的新本地分支
- >git branch 新本地分支名 被复制的本地分支名
- 创建指定复制的本地分支名
- 删除分支
- >git branch -d 本地分支名
- 删除已经被合并过的分支
- >git branch -D 本地分支名
- 删除已经未合并过的分支
- 查看分支
-
切换本地分支
git checkout 本地分支名
- 切换到指定分支
- 注意切换到指定标签或本地远程分支的本地分支处于游离状态,不能操作
- >git checkout -b 本地分支名
- 创建新本地分支并跳转到该分支
- >git checkout -b 本地分支名(标签名) 被复制的本地分支名(标签名)
- 创建新分支且赋予指定分支内容并跳转到该分支
-
命令别名
git config alias.命令的别名 "命令名"
- 设置git命令别名,上面的命令都不包含git
,运行命令时必须带上git
- >git config alias.命令的别名 "!非git命令名"
- 设置非git命令别名,运行命令时必须带上git
-
撤销操作
git commit --amend
- 上一次提交作废,重新提交,将本次提交记录代替上一次的记录
- >git reset HEAD 文件名
- 重置暂存区指定文件的操作为最新提交记录的操作,用来撤销暂存区的失误文件(文件夹)操作
- >git checkout -- 文件名(文件夹)
- 重置工作区文件的操作为暂存区的操作,用来将暂存区文件操作覆盖原来对工作区的失误操作
-
版本重置
git reset HEAD指针位置
- 暂存区和本地库版本重置到所指定位置
- 参数
- -soft
- 重置本地库
- -mixed(默认)
- 重置本地库和暂存区
- -hard
- 重置工作区,暂存区和本地库
- 历史记录改变
- 彻底回退,使用git log
无法查看重置位置之后的历史记录
-
版本回退
git revert HEAD指针位置
- 反向回溯,每次进行新的提交,不同于reset
,revert
历史记录只新增
-
变基
git rebase 以该本地分支为基的分支
- 以指定分支为基,合并当前分支
- >git rebase 以该本地分支为基的分支 被合并的分支
- 以指定分支为基合并指定分支
- 与merge
操作区别
-merge
是将两指定分支合并,建立新提交生成新的提交记录
-rebase
是将多余变更记录进行记录,在基分支上进行重演,生成新的提交记录
- 一般两者得到结果一致,但使用方法不同
补充1:若大家觉得我写得还行,可以去我的github里star一下,为了以后找工作做准备,无论是否点赞,谢谢大家看完本文