• Git 文件的三种状态:已暂存(staged)、已修改(modified)、已提交(committed),Git 管理项目时文件流转的三个工作区域(Git 工作目录、暂存区域、本地仓库)如下所示:

img

  • 对某个项目采用 Git 进行版本控制——git init

  • 查看当前文件所处的状态——git status

  • 开始对某个文件进行跟踪/将修改后的文件放入暂存区——git add <obj>

  • 从现有仓库克隆——git clone *.git

  • Git 文件变化周期如下所示:

    img

  • .gitignore文件通过正则表达式选择忽略那些以该文件为根目录的所有对应类型的文件,也就是说每一个.gitignore文件控制以其所在目录为根目录的所有文件类型,多个.gitignore文件的规则类似.gitconfig文件——层层覆盖,最低层次的配置覆盖高层次的设置。应当注意的是,如果在高层的.gitignore文件中忽略了低层的.gitignore文件的话,低层的.gitignore文件便会失效。

  • 查看尚未暂存的文件更新了哪些内容,直接使用git diff,不加参数的该命令比较的是工作目录中当前文件和暂存区域快照之间的差异,即修改后还没有暂存起来的变化内容。于此相对的,使用git diff --cached或者git diff --staged来实现暂存区与上次commit之间的差异。

  • 提交暂存区——git commit或者git commit -m来快速填写要提交的内容。当然,每次精心准备暂存区的内容可以精确控制一切快照,但是这样做太麻烦了,如果修改的文件过多,每次都要一个个的git add到暂存区的话,也太过于繁琐了,好在 Git 提供了一个跳过暂存区而直接将所有已经使用git add跟踪过的文件统一暂存起来并提交的方法git commit -a

  • 移除暂存区中的某个文件——git rm --cached <file>,应当注意到的是要连带工作区中的原始文件一起删除的话,直接git rm <file> 即可。如果是没有使用 Git 的命令来删除,手工删除文件的话,还需手动git rm <file>来更新删除文件这一动作。

  • 重命名或移动某个文件——git mv <file1> <file2>,这等价于如下命令:

    $ mv file1 file2
    $ git rm file1
    $ git add file2
    
  • 查看提交的历史——git log,使用-p选项显示每次提交的内容差异,用-2选项显示最近 2 次的更新,还可以加上--stat简要显示提交的信息,使用--pretty=oneline等方式改变显示的效果,如果此时再加入--graph选项则会展示每个提交所在的分支及其衍生情况。(其实更多的情况下,查看提交历史还是使用专门的或者 IDE 等自带的 GUI 工具来看比较方便且更加准确)

  • 修改最后一次提交——git commit --amend

  • 取消已暂存的文件——git reset HEAD <file>

  • 取消对已跟踪文件的修改——git restore <file>,应当注意到这是一个全新的、用来分担git checkout指令职能的新命令。(使用这条命令之前一定要三思是否真的要取消修改,因为一旦取消便无法恢复)