## 基本知识梳理 > ### 三种状态 * **已修改(modified**):已修改表示修改了文件,但还没保存到数据库中。【工作目录】 * **已暂存(staged)**:已暂存表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。【暂存区域】 * **已提交(committed)**:已提交表示数据已经安全的保存在本地数据库中。【Git 仓库】 ![](https://i.loli.net/2019/03/01/5c78c72423b59.png) 工作目录、暂存区域以及Git 仓库。 > ### 基本流程与用法 ##### 工作流程如下 1. 在工作目录中修改文件。 2. 暂存文件,将文件的快照放入暂存区域。 3. 提交更新,找到暂存区域的文件,将快照永久性存储到 Git 仓库目录。 ##### 基本用法 ![images](https://tinywan-private.oss-cn-beijing.aliyuncs.com/common/git%E5%9F%BA%E6%9C%AC%E7%94%A8%E6%B3%95.png) 上面的四条命令在工作目录、stage 缓存(也叫做索引)和 commit 历史之间复制文件。 * `git add files`把工作目录中的文件加入 stage 缓存 * `git commit`把 stage 缓存生成一次 commit,并加入 commit 历史 * `git reset -- files`撤销最后一次`git add files`,你也可以用`git reset`撤销所有 stage 缓存文件 * `git checkout -- files`把文件从 stage 缓存复制到工作目录,用来丢弃本地修改 > ### 状态码详解 * 未跟踪的文件 ``` On branch master Untracked files: (use "git add <file>..." to include in what will be committed) ``` 1、在状态报告中可以看到新建的 README 文件出现在`Untracked files`下面。 未跟踪的文件意味着 Git 在之前的快照(提交)中没有这些文件;Git 不会自动将之纳入跟踪范围 2、跟踪新文件`git add README` * 已暂存状态 ``` On branch master Changes to be committed: (use "git reset HEAD <file>..." to unstage) ``` 1、只要在`Changes to be committed`这行下面的,说明是已暂存状态。 但是未提交到历史记录中 2、如果此时通过` git commit -m "说明" `提交,那么该文件此时此刻的版本将被留存在历史记录中。 3、提交之后本地仓库则是干净的 * 暂存已修改文件,修改一个已被跟踪的文件 ``` Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory) ``` * 1、出现在`Changes not staged for commit`这行下面,已跟踪文件的内容发生了变化,但还没有放到暂存区。 * 2、要暂存这次更新,需要运行`git add`命令。 > ### 常用命令 1. 从远程分支中创建并切换到本地分支`git checkout -b <branch-name> origin/<branch-name>` 2. 删除本地分支:`git branch -d <local-branchname>` 3. 删除远程分支:`git push origin --delete <remote-branchname>` 4. 重命名本地分支:`git branch -m <new-branch-name>` 5. 查看标签详细信息:`git tag -ln` 6. 推送标签到远程仓库:`git push origin <local-version-number>`,一次性推送所有标签,同步到远程仓库:`git push origin --tags` 7. 删除本地标签:`git tag -d <tag-name>` 8. 删除远程标签: `git push origin :refs/tags/<tag-name>` 9. **放弃工作区的修改**:`git checkout <file-name>`,放弃所有修改:`git checkout .` 10. 恢复删除的文件 ``` git rev-list -n 1 HEAD -- <file_path> #得到 deleting_commit git checkout <deleting_commit>^ -- <file_path> #回到删除文件 deleting_commit 之前的状态 ``` 11. 查看某段代码是谁写的:`git blame <file-name>`。blame 的意思为‘责怪’,你懂的 12. 展示忽略的文件:`git status --ignored`