Files
rikako-note/Git/git.md
2022-04-08 13:15:24 +08:00

90 lines
5.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Git
* ## Git基本操作
* ### 获得一个git仓库可通过如下方式
* 将并未使用版本控制的本地目录转化为git仓库
* 在本地目录下可以通过git init来将当前目录置于git的版本控制管理之下
* 从远程比如GitHub克隆一个git仓库
```shell
> git init
```
* git clone [dirname] 可以将git项目从远程拷贝到本地
```shell
> git clone $url
```
* ### 记录git仓库的变化
* git仓库中文件的状态
* tracked处于tracked状态的文件是在最后一次提交的快照中存在的文件git仓库知道这些文件的存在。这些文件可以是modified、unmodified、staged
* untracked处于untracked状态的文件在最后一次提交的快照中并不存在该文件而且该文件也并不属于unstaged状态
* git文件状态变化
* 当一个文件处于untracked状态时要将对该文件调用git add状态将其变为tracked状态并且要通过git commit命令将变化提交此时文件会变为unmodified状态
* 可以通过git status来查看当前git仓库中各个文件的状态
```shell
# 查看git仓库的信息
> git status
```
* 跟踪git仓库中文件状态
* git add命令可以将文件从untracked状态变为tracked状态并且能将对文件的修改从unstaged状态变为staged状态
```shell
# 如果参数后跟的是目录名称那么会递归的将目录中所有的文件都标记为staged状态
> git add [文件名/目录名]
```
* 在对文件进行修改之后必须调用git add将修改变为staged状态否则在修改后直接调用git commit提交的仍然是上次调用git add时的文件状态。
* 可以通过为git status添加更多选项来指定输出
```shell
# 为git status指定 -s或者 --short选项会用字母来表示各个文件的状态
# 表示文件为untracked状态
# A 表示被添加到staging area的新文件
# M 表示文件被修改过但是没有被staged
# AM 表示该文件在add之后又被修改过
> git status -s
```
* 如果想要git仓库不跟踪一些文件的文件状态例如日志文件、由系统产生的文件等在调用git status时也不希望该类文件被列出可以通过在目录下指定一个.gitignore文件并且在文件中指明被忽略的文件的模式
```shell
# .gitignore文件语法
# 空行或者以'#'开始的行将会被忽略
# 模式会递归的应用到文件树中的所有文件
# 可以在模式开始之前加上/符号来避免递归
# 可以将模式以/结尾来指定一个目录
# 可以通过!表示明确追踪某个模式的文件(例如,如果确定忽略*.a模式
# 的文件但是只想追踪liba.a文件可以指定模式为
# *.a
# !liba.a
# 可以通过**来匹配嵌套的目录如a/**/b既可以匹配a/b也可以
# 匹配a/x/y/b和a/x/b
$ cat .gitignore
*.[oa]
*~
```
* 查看git仓库中文件变化的具体细节
* 查看仓库中文件变化的具体细节,有如下两类查看:
* 查看已经修改但是并没有被staged的修改
```shell
# 该命令会比较work directory和staging area的内容并且输出具体
# 哪些内容没有被staged
> git diff
```
* 查看仓库中文件已经被staged但是没有被commit的变化
```shell
# 该命令会比较staging area中的内容和上次提交的内容并且输出
# 具体的差异内容
$ git diff --staged
```
* git提交
* 可以通过git commit命令来提交staging area中的内容
```shell
# 通过git commit可以提交已经被staged的修改但是已经修改但是
# 没有被staged的修改并不会被commit
# 可以通过git commit -a来省略git add的过程其会自动对已经traked
# 的文件调用git add操作
$ git commit [ -a ]
```
* 可以通过git rm来将文件从tracked files中移除并且工作目录中的该文件也会被移除
* 如果该文件已经被修改或是已经将修改提交到staging area中则git rm方法必须要指定-f选项强制删除避免错误调用git rm而导致处于staged状态但是并未被提交的修改或者还未被staged的修改丢失需要强制指定-f
* 如果想要将文件从staging area中删除但是不将其从文件系统中删除可以为git rm命令指定--cached选项
```shell
# --cached选项通常用于.gitignore文件中遗漏文件被git add命令提
# 交到staging area的情况此时可以通过git rm --cached命令
# 将提交的文件修改从staging area中移除
```
* git mv可以通过git mv来对文件进行重命名