git
一、git的基本概念
![0](https://img2022.cnblogs.com/blog/1889674/202204/1889674-20220404231725049-1137813141.jpg)
workingspace 工作区:平时存放项目或是代码的地方。
stage/index 暂存区:用于临时存放改动,只是一个文件(存在于版本库),保存即将提交到文件列表信息,简而言之暂存区保存的是映射关系。详细描述
repository 仓库区:安全存放数据的位置,这里有提交的所有版本的数据。(HEAD指向最新放入仓库的版本)
remote 远程仓库:托管代码的服务器,用于项目的远程数据交换。
![0](https://img2022.cnblogs.com/blog/1889674/202204/1889674-20220404231725114-1101603024.jpg)
本地中的 .git 文件夹下为git的版本库,一般不需要随意改动,只通过命令来操作。
二、git工作区文件状态以及设置文件忽略
# 从网络上克隆一个git库
git clone [url]
# 在本地当前目录下初始化一个git库
git init
# 查看文件状态
git status [filename] #查看某个文件状态
git status # 查看所有文件状态
- untracked:未跟踪状态,文件在git项目文件夹中,但并没有加入到git库,不参与版本控制。通过git add将状态变为staged。
- unmodify:文件入库但未修改,即版本库中的文件快照内容与工作区完全一致。如果此时被修改,则状态变为modified,如果使用git rm移出版本库,则成为unstracked状态
- modified:文件已经修改但未进行其他操作。如果使用git add可进入暂存区staged状态,使用git checkout则丢弃修改,返回到unmodify状态。(git checkout从库中取出文件,覆盖当前修改)
- staged:执行git commit则将修改同步到库中,这时库中的文件和工作区的文件又变为一致,文件状态为unmodify状态。执行git reset HEAD filename取消暂存,文件为modified状态。
注:当一个文件直接粘贴到工作区或是刚刚才创建(指git库中没有此文件),git add后直接进入staged状态。
设置文件忽略
将不加入版本控制的文件设置成忽略,在根目录下创建‘.gitignore'文件,以下为添加忽略规则:
- 空行或以#开头的行将被忽略。
- 可以使用linux通配符。
- 如果名称前有(!),表示意外规则,不被忽略。
- 如果名称前有一个路径分隔符(/),表示要忽略的文件在此目录下,而子目录中的文件不忽略。
- 如果名称后有一个路径分隔符(/),表示要忽略的是此目录下该名称的子目录,而非文件。
三、配置用户名和密码
# 生成连接远程(github或是码云等)的密钥
ssh-keygen -t rsa -C "email@example.com"
注:登陆github之后,点击右上角下拉菜单---点击setting---在左侧导航栏点击SSH and GPG keys---点击New SSH keys---title根据情况自己填写,key为复制本地的公钥内容。(windows下公钥保存路径默认为C:\Users\xxx\.ssh)
四、使用git命令管理版本
git add <filename> # 添加文件到缓存区
git add . # 添加所有文件到缓存区
git commit -m <message> # 提交一次变更到本地git仓库
git log #查看变更日志
git reset <filename> # 将某文件从暂存区退回
git reset <commitID> --hard # 将版本变更为指定版本,并且不保留变更
git reset <commitID> --soft # 将版本变更为指定版本,并且保留变更(staged)
git reset <commitID> --mixed # 将版本变更为某个版本,并且保留变更(modified)
注:commitID由git log命令获得的前七位哈希值
git checkout -b <name> <template>
# name:新分支名 template:模板名
git branch # 查看所有分支
git checkout <branchName> # 切换分支
git merge <branchName> # 合并当前分支和指定分支的变更
git push # 将当前分支推送至远端
git push --set-upstream origin <branchName> # 将当前分支推送至远端并设置远端为上流分支
git fetch # 拉取远端仓库分支
git checkout -b <name> origin <template> # 以远端分支为模板创建新分支
git rebase # 将新分支创建之后提交之前,两分支同时发生的改变按照时间顺序排列
参考: