git使用
git 是一个版本控制软件, 许多软件项目都使用 git 进行开发, 如 Linux 内核, OPLC 核心等
git 的远程仓库有许多, 如 GitHub, Gitee. 也可以在家中的 NAS 等服务器上架设 Gitlab, Gitea 等项目作为远程仓库
基础
Git 工作区、暂存区和版本库
- 工作区:电脑内可见的目录,仓库的目录,独立于各个分支
- 暂存区:存放在
.git
目录下的 index 文件(.git/index),英文中称stage或index - 版本库:工作区中的隐藏目录
.git
,存放所有已提交到本地仓库的代码版本 - 版本结构:树结构,每一个节点代表一个代码版本
Git 创建仓库
git init
git init会将当前目录作为 GIt 仓库,并会生成 .git 目录,该目录包含了资源的所有元数据,其他的项目目录保持不变
git init
#当前目录作为Git仓库
git init git-tutorial
#将指定目录**git-tutorial**目录作为Git仓库
git clone
git clone 可以使用不同的协议,包括 ssh,git,https 等
git clone [https/http/git]:[git@]url
git config
git config -e #针对当前仓库的配置
git config -e --global #针对系统上所有的仓库
#提交代码时的用户信息
git config --global user.name ""
git config --global user.email ""
git config 命令实际上是在编辑 ~/.gitconfig
文件
Git 本地操作
从本地提交到本地仓库步骤:
git init #初始化仓库
git add [文件名称] [-A] #添加文件到暂存区, -A将所有变更添加到暂存区
git commit #将暂存区内容添加到本地仓库中
git commit
如果不带参数-m
会启动core.editor
全局变量中的文本编辑器
git status # 查看当前仓库状态,会显示未提交的事项
git log #查看仓库历史
git branch #查看仓库分支
git reflog #查看Head指针移动历史
Head 指针: 可以将 Git 所有的操作都看成在对一颗 n 叉树 进行操作, 且他的物理结构是链式存储
创建仓库
命令 | 说明 |
---|---|
git init | 初始化仓库 |
git clone | 拷贝远程仓库,也就是下载一个项目 |
git init
git init 命令后可接路径,绝对路径/相对路径 均可,但必须为文件夹的路径
git clone
格式:
git clone branch_name <url>
提交&修改
命令 | 说明 |
---|---|
git add | 添加文件到库 |
git status | 查看仓库当前状态,显示可变更的文件 |
git diff | 比较文件的不同,暂存区与工作区内文件的不同 |
git commit | 提交暂存区到本地仓库 |
git restore | 将文件回档 |
git reset | 回退版本 |
git rm | 删除工作区文件 |
git mv | 移动或重命名工作区文件 |
git add
格式:
git add // add 后跟路径,通git init一样,必须为文件夹路径,将该文件夹下的modified文件加入暂存区
git commit
git commit -m " " // ""中跟具体信息
git restore
格式:
git restore [--staged] name //不加--staged:将文件从暂存区恢复到目录;加上则从head所指的分支中恢复
git rm
格式:
git rm [--cached]//不加--cached等同于rm命令,加上可从暂存区移除文件
提交历史
命令 | 说明 |
---|---|
git log | 查看历史提交记录 |
git blame | 以列表形式查看指定文件的历史修改记录 |
远程操作
命令 | 说明 |
---|---|
git remote | 远程仓库操作 |
git fetch | 从远程获取代码库 |
git pull | 下载与远程代码并合并 |
git push | 上传远程代码并合并 |
合并与衍合
命令 | 说明 |
---|---|
git merge | 合并指定分支到当前分支 |
git rebase | 衍合指定分支到当前分支 |