Android开发Android开发Android技术知识

Git学习之旅 - Basic Snapshotting(基本

2019-05-08  本文已影响1人  拔萝卜占坑

想要了解git add,commit原理的可以参考下面文章,非常有用,强烈推荐。
Git 原理入门

学习Git时候,多用 -h或者--help查看用法。


add

git add [--verbose | -v] [--dry-run | -n] [--force | -f] [--interactive | -i] [--patch | -p]
      [--edit | -e] [--[no-]all | --[no-]ignore-removal | [--update | -u]]
      [--intent-to-add | -N] [--refresh] [--ignore-errors] [--ignore-missing] [--renormalize]
      [--chmod=(+|-)x] [--] [<pathspec>…​]

git add file(s)
git add . 添加文件下所以文件
git add tes_*.txt 正则表达式添加文件
git add 文件1 文件2 一次添加多个文件

官网说在 git diff 和 git commit -a很有用,那差别到底是怎么样的呢?
git diff
不用"-N"参数,在使用git diff是不会打印任何东西的,但是用了“-N”会打印最近文件修改,添加的内容,可以自己试一试。
git commit -a
这个到没有发现什么大的作用,用这个命令,不管用没有用“-N”添加的文件都能够被提交。

知识拓展

status

git status [<options>…​] [--] [<pathspec>…​]

显示索引文件与当前HEAD提交之间存在差异的路径,工作树与索引文件之间存在差异的路径,以及工作树中未由Git跟踪的路径。

diff

git diff [<options>] [<commit>] [--] [<path>…​]
git diff [<options>] --cached [<commit>] [--] [<path>…​]
git diff [<options>] <commit> <commit> [--] [<path>…​]
git diff [<options>] <blob> <blob>
git diff [<options>] --no-index [--] <path> <path>

显示工作树与索引或树之间的更改,索引与树之间的更改,两个树之间的更改,两个blob对象之间的更改或磁盘上两个文件之间的更改。
说白就是展示前后文件的不同,只是选择的哪里的文件进行比较不同而已。

git diff [<options>] [--] [<path>…​]

此表单用于查看您对索引所做的更改(下一次提交的暂存区域)。换句话说,差异是你可以告诉Git进一步添加到索引。
意思就是文件相对于暂存区的文件有什么不同,比如我们添加了一个test.txt文件,然后我修改了该文件,现在执行git diff test.txt就会展示修改后的文件与暂存区里的文件差异。

git diff [<options>] --no-index [--] <path> <path>

此表单用于比较文件系统上给定的两个路径。在由Git控制的工作树中运行命令时,可以省略--no-index选项,并且至少有一个路径指向工作树外部,或者在Git控制的工作树外运行命令时。
即指定两个文件路径比较不同。

git diff [<options>] --cached [<commit>] [--] [<path>…​]

此表单用于查看您为下一次提交相对于命名的<commit>而进行的更改。通常,您希望与最新提交进行比较,因此如果您不提供<commit>,则默认为HEAD。如果HEAD不存在(例如未出现的分支)并且未给出<commit>,则显示所有分阶段的更改。 --staged是--cached的同义词。

文件被add后放入暂存区,通过commit提交,“下一次提交”其实就是指“暂存区”最近添加的文件,因为这些文件成为下一次提交的内容。<commit>指定某次提交的id(通过git log可以获取),和这次提交的文件进行比较。

git diff [<options>] <commit> [--] [<path>…​]

此表单用于查看工作树中相对于命名<commit>的更改。您可以使用HEAD将其与最新提交进行比较,或使用分支名称与其他分支的提示进行比较。
这里没有--cached,指定是工作树下指定文件和<commit>比较,不管该文件是否add过,可以认为就是指定文件的最新状态。

git diff [<options>] <commit> <commit> [--] [<path>…​]

这是为了查看两个任意<commit>之间的变化。

git diff [<options>] <commit>..<commit> [--] [<path>…​]

这与之前的表格同义。如果省略了一侧的<commit>,它将具有与使用HEAD相同的效果。

即查看第一个<commit>(不包含)到第二<commit>(包含)的更改。

git diff [<options>] <commit>...<commit> [--] [<path>…​]

此表单用于查看包含第二个<commit>的分支上的更改,从<commit>的共同祖先开始。 “git diff A ... B”相当于“git diff $(git merge-base A B)B”。您可以省略<commit>中的任何一个,它与使用HEAD具有相同的效果。

即从两个<commit>的共同祖先到第二个<commit> (包含)的更改,这里的...不代表中间有多个<commit>,这里就两个<commit>。

git diff [<options>] <blob> <blob>

此表单用于查看两个blob对象的原始内容之间的差异。

  1. 什么是blob
    blob组件是在代码提交到Stage区域后,git会会创建一个blob组件存储到objects文件夹中。不明白的,百度吧。
    通过命令git hash-object 文件名查询文件的hash码,这个hash码就是我们的blob组件的名称。
git commit

意思在没有任何更改的情况下,执行了提交,这时候不会在进行提交流程。

reset

撤销,重置

rm

从索引中删除文件,或从工作树和索引中删除文件
上面已经讲解

mv

移动或重命名文件,目录或符号链接。

上一篇 下一篇

猜你喜欢

热点阅读