Git是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理,也是[Linus Torvalds](https://baike.baidu.com/item/Linus Torvalds/9336769)为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。
可以前往Git官网(https://git-scm.com)安装对应系统的Git
安装成功后进入终端(Terminal),键入git --version
会显示出对应的git版本信息
Git本地的三个工作区域,工作空间(Working Space)、暂存区(Stage/Index)、本地仓库(Repository/Git Repository)。若再加上远程仓库(Remote Directory),大致关系如上图所示
暂存区和本地仓库存储内容都在仓库目录下的.git
隐藏文件夹下
git config --list
查看当前git配置
git本地仓库配置默认存储在用户目录\.gitconfig
文件下
git系统用户配置默认存储在Git安装目录\etc\gitconfig
下
可以采用以下方式进行用户的名称以及邮箱配置
git config [--global] user.name [用户名称] git config [--global] user.email [用户邮箱] git config -l # 查看配置 git config --[global/system] --list
每次git进行提交时都会使用该信息
创建新项目
创建项目的目录(即对应的文件夹,最好不要包括中文)
进入目录后,输入git init
克隆已有项目
git clone [url]
该url可以从任意远程仓库中获取,如下图为Github与Gitee中获取仓库链接的地方
git add
使它的状态变为Stagedgit rm
使其重新变为Untracked(如果此时add,不会使其变为Staged)git checkout
用本地库的文件代替工作区文件(可以看作修改的一种撤销操作)使其状态变为Unmodify,也可以使用git add
使其状态变为Stagedgit commit
将暂存区内容提交到本地库中,使得文件变为Unmodify,或者使用git reset HEAD [文件名称]
让暂存区内容回滚(相当于从未add过了),使得该文件变为Modify建立.gitignore
文件,使得一些文件不被纳入版本控制范围(例如使用git add .
命令时)、
文件规则
#
为注释符!
代表例外规则,指该文件符合已指定规则,但不想被忽略(即优先级高于指定规则)/
放在最前面,表示忽略指定路径下的文件/
放在最后面,表示忽略该目录下的子目录内的文件HEAD
往往指向当前所在分支中的最后一次commit
,Head^^^...
代表过去前的第X个版本,X等同于^的数量
git checkout [文件1] [文件2]... # 恢复暂存区文件到工作区 git checkout [commithash] [文件1]... # 将指定commit的文件恢复到工作区 git reset --hard # 同时重置HEAD,暂存区与工作区 git reset --mixed # 同时重置HEAD,暂存区(默认) git reset --soft # 只重置HEAD git diff # 查看暂存区与工作区的不同 git diff --cached # 查看暂存区与HEAD的不同 git diff HEAD # 查看工作区与HEAD的不同 git diff [commithash] # 将工作区内容与某次commit进行比较
如果名称\(a\)既是某个分支名,又是某个文件名,需要使用--
来说明这是一个文件路径
git add [文件1] [文件2] ... # 向暂存区中添加指定文件 git add [目录1] [目录2] ... # 向暂存区中添加指定目录 git add . # 向暂存区添加当前目录下所有文件 git rm [文件1] [文件2] ... # 向暂存区中添加指定文件 git rm --force # 强制删除 git rm --cached # 删除暂存区中的文件,但不对工作区改动 git mv [Source] [Destination] # 移动文件 git status # 查看暂存区状态
git commit -m [备注信息] # 提交暂存区到本地仓库 git commit -a # 可以把未进行add命令的修改一并提交到本地库 git commit # 可以用编辑器对此次提交进行更细致的备注
<type>(<scope>): <subject> // 空行 <body> // 空行 <footer>
type一般包括
git branch [新分支名] # 创建新分支 git branch -v # 显示本地所有分支 git branch -r # 显示远程所有分支 git branch -a # 显示本地远程所有分支 git branch -d [分支名] # 删除指定分支 D为强制删除 git checkout [分支名] # 切换到指定分支 git checkout -b [新分支名] # 创建并切换到新分支 git merge [分支名] # 合并指定分支到当前分支
分支切换时,对应的工作区和暂存区也会被切换
可以参考博客(https://blog.csdn.net/qq_27905183/article/details/78575247)
git clone [远程库地址] # 将远程库克隆到本地目录下 git fetch [远程库地址] # 获取远程库所有改动 git pull [远程地址别名] [本地分支名] # 等同于fetch+merge git remote -v # 显示远程地址别名 git remote add [远程地址别名] [远程地址] # 添加远程地址 git push [远程地址别名] [本地分支名] # 上传本地分支到远程仓库 git push --force # 强制推送 git push -all [远程地址别名] # 将本地所有分支推送到远程仓库
其实在从远程分支分出来的分支都是跟踪分支(track),当对该分支进行 push 和 pull 时,如果该分支和远程分支同名,git会知道推送到远程哪个分支,从哪个远程分支同步到本地分支。每次克隆一个仓库时,本地都会新建一个master
分支来track 远程的origin/master
。如果不同名,我们需要人为指定 git push origin branch_name
Gitee类似,且为中文这里就不详细介绍了
是一个开源且免费的远程仓库,可以托管代码,便于实现项目的团队开发
网址:https://github.com/
点击New repository
创建自己的远程仓库
在Repository name
中可以设置自己的远程仓库名称,Description
中添加对于仓库的描述,Public/Private
决定了仓库内容是否被公开(Private的仓库不可以设为静态网页供他人访问)
常常还会✔上Add a README file
为自己的仓库建立一个介绍文档,让访问者更加迅速、便捷地了解到项目内容
这步可以实现免密码登录,当本机与远程仓库进行文件传输时,远端服务器会用已存储的公钥进行检测,如果有匹配的私钥则可以免密传输
默认密钥生成在本地用户目录\.ssh
下
其中私钥为id_rsa
,公钥为id_rsa.pub
ssh-keygen -t rsa # 生成本机ssh密钥
之后一路点击回车即可
下图是Github与Gitee中添加SSH公钥的面板(添加id_rsa.pub
中内容)