文章目录
- 1.本地版本控制
- 1.1 在一个目录下建立仓库`git init`
- 1.1.1 删除仓库
- 1.2 暂存区`git add`
- 1.2.1 保存到暂存区
- 1.2.2 撤销暂存区文件
- 1.3 提交与回退
- 1.3.1 提交到版本库`git commit`
- 1.3.2 回退`git reset`
- 1.4 删除
- 1.4.1 删除未跟踪的文件`git clean`
- 1.4.2 删除已跟踪的文件`git rm`
- 1.5 检查
- 1.5.1 查看当前仓库状态`git status`
- 1.5.2 查看操作日志`git reflog`
- 1.5.3 查看此分支的提交日志`git log`
- 1.6 分支管理`git branch`
- 1.6.1 创建分支
- 1.6.2 切换分支
- 1.6.3 查看分支
- 1.6.4 合并分支(可能出现冲突,如两个分支都修改了同一文件)
- 1.6.5 删除分支
- 1.7 模块管理`git submodule`
- 1.7.1 添加子模块
- 1.7.2 查看子模块
- 1.7.3 拉取子模块
- 1.7.4 从远程更新子模块
- 1.7.5 删除子模块
- 2.远程控制
- 2.1 获取本设备的ssh密钥
- 2.2 与远程库建立或删除连接`git remote`
- 2.2.1 建立连接
- 2.2.2 删除连接
- 2.3 绑定此分支到远程库的某一分支
- 2.4 提交到远程库的某一分支`git push`
- 2.5 标签管理`git tag`
- 2.5.1 打标签
- 2.5.2 删除标签
- 2.5.3 查看某一标签
- 2.5.4 查看所有标签
- 2.5.5 推送标签到远程库
- 2.5.6 删除远程标签
- 2.6 克隆`git clone`
- 2.6.1 克隆默认分支
- 2.6.2 克隆指定分支
- 3.多人协作
- 3.1 版本落后于远程库而推送失败
- 3.2 老版本bug修复流程
1.本地版本控制
1.1 在一个目录下建立仓库git init
1.1.1 删除仓库
1.2 暂存区git add
1.2.1 保存到暂存区
- 保存某个文件的修改到暂存区
- 全部保存到暂存区
1.2.2 撤销暂存区文件
- 撤销某一个暂存区文件
- 撤销所有暂存区文件
1.3 提交与回退
1.3.1 提交到版本库git commit
1.3.2 回退git reset
git reset
有--soft
、--mixed
、--hard
三种参数可选,其中--mixed
是默认方式,不同含义如下:
-
--soft
:只重置HEAD指针的位置 -
--mixed
:重置HEAD指针的位置,并清空git add
命令的暂存区 -
--hard
:重置HEAD指针的位置,清空git add
命令的暂存区,并重置工作空间所有的更改
以下是git reset
的几种用法:
- 回退项目到指定版本
- 回退项目到上一个版本
- 回退单一文件到上个版本
- 回退到上n个版本
1.4 删除
1.4.1 删除未跟踪的文件git clean
1.4.2 删除已跟踪的文件git rm
1.5 检查
1.5.1 查看当前仓库状态git status
1.5.2 查看操作日志git reflog
1.5.3 查看此分支的提交日志git log
- 经过回退后,使用"git log"就看不到回退前的版本号了,但使用"git reflog"就可以查看
1.6 分支管理git branch
1.6.1 创建分支
1.6.2 切换分支
1.6.3 查看分支
1.6.4 合并分支(可能出现冲突,如两个分支都修改了同一文件)
1.6.5 删除分支
1.7 模块管理git submodule
1.7.1 添加子模块
使用此命令后,项目根目录下会自动添加.gitmodules
文件,用来存放子模块的信息;同时,也会自动下载子模块仓库的主分支最新版本并用指定名字的目录去装载,如果未给出指定的名字,则使用子模块仓库的默认名字。
使用子模块的意义在于便捷地引用其他人的库。如果你需要对别人的库进行自己的修改,那么你完全没有必要使用submodule
,因为你没有修改别人库的权限,你可以直接把别人的库克隆下来之后提交。如果你只是想使用而不需要更改,那么推荐你使用submodule
,这样的话,在提交时,主项目不会记录子模块的更改。
1.7.2 查看子模块
1.7.3 拉取子模块
- 在克隆一个项目时直接拉取:
- 在克隆之后再拉取:
这两个命令也可以合并为一个:
如果子模块又嵌套了子模块,则需要添加--recursive
参数
1.7.4 从远程更新子模块
- 法一:直接在子模块目录下拉取
- 法二:项目根目录下执行:
若不给出需要更新的子模块名字,则默认更新所有子模块。
拉取之后,记得提交主项目的更改。
1.7.5 删除子模块
先注销并清楚缓存:
然后检查子模块目录和.git/module
中的子模块条目是否删除:
再检查配置文件中的子模块条目是否删除
最后提交即可,示例如下:
2.远程控制
2.1 获取本设备的ssh密钥
- 密钥在Linux系统中保存于/usr/local/home/.ssh
2.2 与远程库建立或删除连接git remote
2.2.1 建立连接
2.2.2 删除连接
2.3 绑定此分支到远程库的某一分支
2.4 提交到远程库的某一分支git push
- 如果远程库没有对应名字的分支,那么会在远程库自动创建一个同名分支
- 如果不给定<name of local branch>参数,那么会按照git branch --set-upstream-to绑定的关系进行推送。如果未绑定,则推送失败
2.5 标签管理git tag
2.5.1 打标签
2.5.2 删除标签
2.5.3 查看某一标签
2.5.4 查看所有标签
2.5.5 推送标签到远程库
2.5.6 删除远程标签
2.6 克隆git clone
2.6.1 克隆默认分支
2.6.2 克隆指定分支
3.多人协作
3.1 版本落后于远程库而推送失败
- 先用git branch --set-upstream-to 绑定到指定远程分支
- 用git pull指令:抓取所绑定分支的最新版本并尝试merge。若出现冲突要手动解决
- 最后提交并推送即可
3.2 老版本bug修复流程
- 保存此分支的工作现场
- 切换到有bug的分支,从这个有bug的分支创建一个新分支修复bug,然后合并,保存好合并时给出的版本号
- 用这个版本号,对所有存在这个bug的分支做一次相同的提交
- 回到工作现场,查看贮藏列表并恢复