Git入门详解

Git结构和状态

Git的3层结构

  • working directory——————工作区
  • staging index——————暂存区

  • git directory(Repository)——————版本库

Git中文件的四种状态

  • untracked——————未被追踪
  • Modified——————表示工作区修改了某个文件但是还有没有添加到暂存区

  • Start——————表示把工作区修改的文件添加到了暂存区但是没有提交到版本库

  • Committed——————表示数据被安全地存储到本地仓库中

Git基本命令

  • git init——————初始化git仓库,出现.git文件(将文件夹初始化成git仓库)

  • git add——————将文件从工作区添加到暂存区(对文件进行追踪) ``` git add filename 将文件添加到暂存区

git add . 将工作目录下所有修改的文件添加到暂存区

- `git commit`——————将暂存区的文件添加到版本库

git commit -m 'description' 将暂存区的文件提交到版本库

git commit -am 'description' 跳过git add添加到暂存区的命令,直接将工作区所有以跟踪的文件提交

- `git log`——————查看提交的日志信息

- `git status`——————查看项目文件的状态

- `git config`——————对git进行配置

git config --global user.name xzbk 配置用户名

git config --global user.email 1063175795@qq.com 配置用户邮箱

git config --list 查看git配置信息


## Git撤销操作

- `git commit --amend`——————撤销上一次提交,并将暂存区的文件重新提交

- `git checkout -- filename`——————拉取暂存区的文件并将其替换工作区的文件(如果暂存区没有则去版本库中获)

- `git reset HEAD filename`——————拉取最近一次提交的版本库中的这个文件到暂存区,该操作不影响工作区
- `git reset --option(版本号)`

git reset --head 版本号 将暂存区工作区强行回退到相应版本

git reset --mixed 版本号 将版本库和暂存区回退到相应版本,工作区不受影响

git reset --soft 版本号 将版本库回退到相应版本



## Git文件删除
- `git rm filename`——————删除工作区及暂存区中的该文件,相当于删除文件后执行`git add`

git rm --cached filename 在不小心将不需要追踪的文件添加到暂存区,想删除暂存区的文件但不是删除工作区的文件很有用

git rm -f filename 当工作区或者暂存区文件修改了

glob模式

- `git mv filename`
```相当于:
mv oldname newname

git rm oldname

git add newname

Git分支

git分支的创建、修改、切换、删除

  • git branch——————查看分支口
  • git branch branchname——————创建分支
  • git branch -m oldname newname——————修改分支名称
  • git checkout [-b] branchname——————切换分支[创建并切换分支]
  • git branch -d branchname——————删除分支

分支的合并

  • HEAD——————分支的指针,指针HEAD指向当前工作分支,在切换分支时执行新的分支
  • git diff——————比较差异 ``` git diff 比较工作区与暂存区文件的差异

git diff --staged 比较暂存区与版本库文件的差异

git diff version1 version2 比较分支内两个版本号的差异

git diff branch1 branch2 比较两个分支的差异

- `git merge branchname`——————将branchname分支合并到当前所在分支

### 储存变更
- `git stash`——————暂存文件的修改(切换分支前需要暂存,否则切换失败)
- `git stash list`——————查看暂存列表
- `git stash apply stash@num`——————将暂存拉回(stash@{number}:暂存的名称)
- `git stash drop stash@num`——————删除对应的暂存
- `git stash pop stash@num`——————拉回暂存状态并删除暂存(相当于`apply`和`drop`的结合)

## Git远程仓库
### github上的仓库
- 创建仓库
- `clone`——————克隆仓库到本地(相当于下载整个项目文件夹)
- `push`——————上项目文件传本地仓库
- `pull`——————拉取所有项目文件到本地(公同管理项目,拉取项目文件)
- `ignoring files`
- 流程示例图:
![](/img/Git/github_branch.png)
- 代码示例:

git clone https://github.com/xzbk/projects.git master 下载整个项目到本地

git pull https://github.com/xzbk/projects.git master 将项目文件拉取到本地仓库中

git push https://github.com/xzbk/projects.git master 将项目文件上传到远程仓库中

git remote add github(名称) https://github.com/xzbk/projects.git(仓库地址) 给仓库地址取一个别名

git remote remove github(名称) https://github.com/xzbk/projects.git(仓库地址) 删除远程仓库地址别名

git remote -v 查看自己添加添加的软件仓库及名称

git push(pull) github master 简化后


### 远程服务器上的仓库
- 用`taskmanager`来演示
- `git init --bare`——————
- `git remote add name path`——————
- `git remote rm name`——————
- `git remote rename oldname newname`——————
- `git fetch`——————

### Git ssh免秘钥登录
- `ssh-keygen`——————获取ssh秘钥(公钥,在`c/administrator/.ssh`文件夹中)
- `ssh-copy-id user@host`——————将本机的公钥复制到远程服务器的authorized_keys文件中
- 如果不是自己的服务器可以将本地公钥发送给服务器管理员,添加爱authorized_keys中

## Git的glob匹配模式
- 星号(*)匹配零个或多个任意字符
- [abc]匹配任何一个列在括号中的字符
- 问号(?)只匹配一个人义字符
- [0-9]、[a-z]匹配范围

## Git跳过追踪
- 在项目目录下新建`.gitignore`文件
- 将要忽略的文件配置到`.gitignore`文件中
- 如果被忽略的文件刘改了,会自动提交到暂存区,需使用`git rm --cached filename`来使文件被忽略

例: .gitignore index.html index.* ```

  • 也可以使用glob匹配模式进行配置

Git帮助文档的使用

  • git help——————查看帮助文档
  • git help command——————查看command命令的使用文档
  • 帮助文档官方地址:https://git-scm.com/docs

Git流程图

JSRUN notes