git学习2-基本快照

基本快照

add

add命令用于使用在工作树中找到的当前内容来更新索引,其为下一次提交(commit)准备阶段性的内容。通常将现有路径的当前内容作为一个整体添加,但通过一些选项,它也可以用于添加只应用了部分工作树文件更改的内容,或者删除工作树中不再存在的路径。

git status命令可用于获取一个摘要,其中哪些文件有更改,将在下次提交时暂存。

默认情况下,git add命令不会添加被忽略的文件。如果在命令行中显式地指定了任何被忽略的文件,git add将失败,并显示一列被忽略的文件。git add命令可以使用-f (force)选项添加被忽略的文件。

选项:

  • <pathspec>…:要添加的文件。其规则很简单,主要是通配符*?可以匹配目录分隔符。例如:Documentation/*.jpg将匹配Documentation子树中的所有.jpg文件,包括Documentation/chapter_1/figure_1.jpg
  • -f:允许添加被忽略的文件。

通常用法:

1
git add .

用来将所有以改变的文件都更新索引。

status

该命令展示当前索引文件和当前HEAD提交的不同,工作树与索引文件存在差异的路径,以及工作树中未被Git跟踪的路径。

参数

  • -s:以短格式化来给出输出。
  • -l:以长格式来给出输出。
  • -b; --branch:给出分支和追踪信息(可以以短格式)。
  • -v:除了已更改的文件的名称外,还显示要提交的暂存文本的更改。
  • --ignored [=<mode>]:也显示被忽略的文件。mode参数用于指定对被忽略文件的处理。它是可选的:默认traditional

通常用法

1
git status

查看当前的文件状态。

diff

该命令用于显示工作树和索引树之间的更改、索引和树之间的更改、两棵树之间的更改、合并导致的更改、两个blob对象之间的更改或磁盘上两个文件之间的更改。

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

用于查看相对于索引(下一次提交的暂存区域)所做的更改。您可以通过使用git-add来逐步执行这些更改。

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

用于比较给定的文件系统上的两条路径。当运行命令在一个Git控制的工作树并且至少其中一个路径指向Git工作目录时,可以省略--no-index

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

用于查看下一个提交相对于其他一次<commit>的更改。如果不给出<commit>,则默认是HEAD位置。如果没有HEAD并且<commit>也没有给出,则显示了所有的staged变化。--staged--cached一样。

如果使用--merge-base来替换<commit>,则使用使用<commit>和HEAD得合并基点(merge base)来和path进行比较。而不是直接用<commmit>比较。

git diff [<options>] [--merge-base] <commit> <commit> [--] [<path>…]

用来查看任意两个commit之间的改变。

如果给出了--merge-base选项,就是用两个commit的合并基点(merge base)作为前测,与后面的commit进行对比。

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

用于查看合并提交的结果。列出的第一个<commit>必须是merge本身;剩下的两个或更多的提交应该是它的父节点。生成所需修订集的一种方便的方法是使用^@后缀。

commit

创建一个新的提交(commit),包含索引的当前内容和描述更改的给定日志消息。新的提交是HEAD的直接子节点,通常是当前分支的顶端,并且该分支被更新为指向它(除非没有分支与工作树相关联,在这种情况下,如git-checkout中所述,HEAD被“分离”)。

要提交的内容可以通过以下几种方式指定:

  • 通过使用git-add,在使用commit命令之前,递增地“添加”对索引的更改。
  • 在使用commit命令之前,使用git-rm从工作树和索引中删除文件。
  • 通过列出文件作为提交命令的参数(没有--interactive--patch switch),在这种情况下,提交将忽略索引中的更改,而是记录列出文件的当前内容(这必须是Git已经知道的);
  • 通过使用-a参数和commit命令自动“添加”所有已知文件(即所有已经在索引中列出的文件)的更改,并自动“rm”索引中已经从工作树中删除的文件,然后执行实际的提交;-可以省略add步骤(如果全部提交)。
  • 通过使用--interactive--patch开关和commit命令来逐个决定除了索引中的内容之外,哪些文件或块应该作为提交的一部分,然后再完成操作。

选项

  • -a;--all:告诉命令自动处理已经被修改和删除的文件(也相当于自动add),但是没有告诉Git的新文件不受影响。
  • -p;--patch:使用交互式补丁选择接口来选择要提交的更改。
  • -C <commit>; --reuse-message=<commit>:获取一个现有的提交对象,并在创建提交时重用日志消息和作者信息(包括时间戳)。
  • -c <commit>; --reedit-message=<commit>:与-C类似,但使用-C会调用编辑器,以便用户可以进一步编辑提交消息。
  • --reset-author:当与-C/ -c/--amend选项一起使用时,或者在发生冲突的选择之后提交时,声明结果提交的作者现在属于提交者。这也会更新作者的时间戳。
  • --short:使用短格式来输出。
  • --long:使用长格式来输出。
  • --branch:显示分支和跟踪信息。
  • -F <file>; --file=<file>:从给定的文件中获取提交消息。
  • --author=<author>:覆盖全局得提交作者。
  • --date=<date>:覆盖提交中使用的作者日期。
  • -m <msg>; --message <msg>:使用给定的<msg>作为提交消息。如果给出了多个-m选项,它们的值将连接成单独的段落。注意:-m-c-c-F互斥。
  • -s; --signoff; --no-signoff:在提交日志消息的末尾添加一个由提交者签名的拖尾。终止的意义取决于你所提交的项目。例如,它可以证明提交者有权在项目许可下提交作品,或者同意一些贡献者的代表,例如开发者原产地证书。参考您正在参与的项目的文档或领导,以理解在该项目中如何使用结束。
  • **--allow-empty**:允许提交与上一次commit完全相同的文件内容,其他信息都可以修改,如<msg>
  • **--allow-empty-message**:允许提交一次不包含<msg>commit
  • -e; --edit:打开编辑器(系统设定的默认文本编辑器)来修改来自-F或者-m的消息。
  • --no-edit:默认,直接提交来自-F或者-m的消息。
  • --amend:直接替换上一次commit记录(慎重),上一次的commit信息都没了。

note

添加、删除或读取附加到对象的注释,而不接触对象本身。默认情况下,注释被保存到refs/notes/commits中并从refs/notes/commits中读取,但是这个默认值可以被覆盖。请参阅下面的选项、配置和环境部分。如果这个ref不存在,它将在第一次需要存储笔记时被静默创建。

注释的典型用法是补充提交消息,而不更改提交本身。可以通过git log显示注释和原始的提交消息。为了区分这些注释和存储在提交对象中的消息,注释像消息一样被缩进,在一个未缩进的行notes (<refname>):(或notes:对于refs/notes/commits)之后。

Notes也可以通过使用--Notes选项添加到使用git format-patch准备的补丁中。这样的注释作为补丁注释添加在三个破折号分隔线之后。

子命令

  • list:列出给定对象的notes对象。如果没有给出对象,则显示所有注释对象及其注释对象的列表(格式为<注释对象> <注释对象>)。如果没有给出子命令,这是默认的子命令
  • add:为给定对象添加notes(默认为HEAD)。如果对象已经有注释则中止(使用-f覆盖现有的注释)。但是,如果您是交互式地使用add(使用编辑器提供注释内容),那么现有的注释将在编辑器中打开而不是终止(就像编辑子命令)。
  • copy:复制第一个对象的notes到第二个对象(默认是HEAD)。如果第二个对象已经有note或者第一个对象没有note,则终止。
  • append:向一个已经存在note的对象追加note(默认HEAD)。如果不存在就创建一个note。
  • edit:编辑给定对象的notes(默认HEAD)。
  • show:展示给定对象的notes(默认HEAD)。
  • merge:合并给定的note引用到当前的note引用。这将尝试将给定notes ref(称为remote)所做的更改合并到当前notes ref(称为local),因为merge-base(如果有的话)。
  • remove:移除给定对象的notes(默认HEAD)。当从命令行给出零个或一个对象时,这相当于向编辑子命令指定一个空的注释消息。
  • get-ref:打印当前的notes引用。这提供了一个简单的方法来检索当前的notes引用(可用于merger子命令)。

选项

  • -f; --force:当向已经有notes的对象添加注释时,覆盖现有的notes(而不是中止)。
  • -m <msg>; --message=<msg>:使用给定的注释消息(而不是prompting)。如果给出了多个-m选项,它们的值将连接成单独的段落。以#开头的行和段落之间除了一行以外的空行将被删除。
  • -F <file>; --file=<file>:从给定的文件中获取笔记消息。以#开头的行和段落之间除了一行以外的空行将被删除。
  • -C <object>; --reedit-message=<object>:将给定的blob对象(例如,另一个注释)作为注释消息。(使用git notes copy <object>代替在对象之间复制notes。)
  • -c <object>; --reedit-message=<object>:与-C类似,但使用-C会调用编辑器,以便用户可以进一步编辑注释消息。
  • --allow-empty:允许存储一个空的笔记对象。默认的行为是自动删除空注释。
  • --commit:完成正在进行的git注释合并。被合并后会自动更新并提交。

restore

这里现列举出以下三个命令的区别:

  • reset
  • restore
  • revert

主要区别有

  • git-revert:进行一个提交(commit)来恢复其他提交所做的更改。
  • git-restore:从索引或其他提交中恢复工作树中的文件。这个命令不会更新你的分支。该命令还可以用于从另一个提交恢复索引中的文件。
  • git-reset:更新你的分支,移动分支的顶端,以便添加或删除分支提交。该操作将更改提交历史记录。

该命令可以从一个还原源中来还原指定工作树中的特定目录或文件。如果一个路径被跟踪,但是在恢复源中不存在,那么它将被删除以匹配源。

该命令还可以用于:

  • --staged恢复索引中的内容,(即撤销上一次add操作)。

  • --staged --worktree恢复工作树和索引(即撤销add操作并恢复文件内容)。

默认情况下,如果给出--staged,则从HEAD恢复内容,否则从索引恢复内容。使用--source从不同的提交恢复。

选项

  • -s <tree>; --source=<tree>:使用给定树中的内容恢复工作树文件。通常通过命名提交、分支或与之关联的标记来指定源树。如果没有指定,则从HEAD中恢复,否则从从给出的索引恢复。
  • -p; --patch:交互式地根据恢复源和恢复位置之间的差异选择块。
  • -W; --worktree;; -S; --staged :指定恢复位置。如果没有指定任何选项,默认情况下将恢复工作树。指定--staging只会恢复索引。两个都指定则索引和文件都会被恢复。
  • -q: --quiet:静默,压制反馈信息。
  • --progress:默认信息,将会报告所有信息。
  • -m; --merge:当从索引中恢复工作树中的文件时,在未合并的路径中重新创建冲突的合并。
  • --overlay; --no-overlay:在overlay模式下,该命令在恢复时永远不会删除文件。在no-overlay模式下,不出现在--source树中的跟踪文件将被删除,以使它们完全匹配<tree>。默认为无覆盖模式。

reset

该命令用于重置当前的HEAD到指定的状态。

其有以下使用格式:

git reset [-q] [<tree-ish>] [--] <pathspec>…git reset [-q] [--pathspec-from-file=<file> [--pathspec-file-nul]] [<tree-ish>]

这两种格式将重置所有匹配<pathspec>的目录索引到他们在<tree-ish>的状态。(它不影响工作树或当前分支。)

这就意味着git reset <pathspec>git add <pathspec>是完全相反的操作。并且这条命令也是和git restore [--source=<tree-ish>] --staged <pathspec>...是相等的。

运行git reset <pathspec>命令更新索引项后,可以使用git-restore命令查看工作树索引的内容。或者,使用git-restore并使用--source指定提交,您可以将提交中的路径内容一次性复制到索引和工作树中。

git reset (--patch | -p) [<tree-ish>] [--] [<pathspec>…]

交互式地选择索引和<树状>之间的差异的块(默认为HEAD)。所选的块以相反的方式应用于索引。

这意味着,git reset -p是与git add -p相反的,也就是说,你可以使用它来选择性地重置大块数据。

git reset [<mode>] [<commit>]

这种格式将当前分支的HEAD重置为<head>并且可能更新索引(将其重置为<commit>的状态)和工作树。其工作模式依赖于<mode>参数。默认为--mixed。所有模式如下:

  • --soft:完全不碰索引文件或工作树(但将头部重置为<commit>,就像所有模式那样)。这使得所有你更改的文件都是Changes to be committed,就像git状态显示的那样。
  • --mixed:重置索引,但不重置工作树(即,更改的文件保留,但不标记为提交(commit)),并报告未更新的内容。这是默认操作。如果指定了-N,删除的路径将被标记为意图添加。
  • --hard:重置索引和工作树。自<commit>以来对工作树中跟踪文件的任何更改都将被丢弃。任何在恢复阶段没有被追踪,而当前阶段跟踪的文件或目录被简单地删除(慎用)。
  • --merge:重置索引并更新工作树中与<commit>和HEAD不同的文件但保留索引和工作树中与之不同的文件(即有更改但未添加(add)的文件)。如果一个文件在<commit>和索引之间不一致,则会中止重置。换句话说,--merge的作用类似于git read-tree -u -m <commit>,但它会将未合并的索引项带向前。
  • keep:重置工作树中<commit>和HEAD之间不一致的索引项,并更新文件。如果一个文件在<commit>和HEAD之间有不同的本地更改,reset将被中止。
  • --[no-]recurse-submodules:当工作树被更新时,使用--recursive -submodules也会根据父项目中记录的提交,递归地重置所有活动子模块的工作树,并在提交时将子模块的HEAD设置为分离。

选项

  • -q; --quiet;; --no-quiet:静默/不静默(默认)。

rm

从索引中删除匹配pathspec的文件,或者从工作树和索引中删除。git rm不会从你的工作目录中删除文件。被删除的文件必须与分支的顶端相同,并且不能在索引中显示对其内容的更新,尽管可以使用-f选项重写默认行为。当给出--cached时,暂存的内容必须匹配分支的尖端或磁盘上的文件,从而允许仅从索引中删除文件。当使用 sparse-checkouts 模式时,git rm将只删除稀疏签出模式中的路径。

选项:

  • <pathspec>…:要被移除的文件。可以指定前置目录名(例如,dir用于删除dir/file1dir/file2)来删除目录中的所有文件,并递归地删除所有子目录,但这需要显式地指定-r选项。该命令只删除git已知的路径。(也可以使用通配符*来移除)
  • -f; --force:强制性的移除(当被删除的文件不与分支的顶端相同时也可以被移除)(慎用)。
  • -n; --dry-run:不要实际删除任何文件。相反,只需显示它们是否存在于索引中,否则将被命令删除。
  • -r:当给出前导目录名时,允许递归删除。
  • --cached:此选项把文件从暂存区域移除,但仍然希望保留在当前工作目录中,换句话说,仅是从跟踪清单中删除
  • --ignore-unmatch:即使没有匹配的文件,也将以零状态退出。

mv

移动或重命名一个文件、目录或符号链接。

格式

1
2
git mv [-v] [-f] [-n] [-k] <source> <destination>
git mv [-v] [-f] [-n] [-k] <source> ... <destination directory>

在第一种形式中,它将<source>重命名为<destination>,它必须存在并且是一个文件、符号链接或目录。

在第二种形式中,最后一个参数必须是一个已存在的目录;给定的源代码将被移动到这个目录中。

索引在成功完成后更新,但更改仍然必须提交。

选项

  • f; --force:强制重命名或移动文件,即使目标存在。
  • -k:跳过移动或重命名操作,这将可能导致错误情况。当源文件既不存在也不受git控制时,或者除非指定-f,否则它将覆盖现有文件时,就会发生错误。
  • -v; --verbose:在移动文件时报告文件的名称。

Powered by Hexo and Hexo-theme-hiker

Copyright © 2019 - 2024 My Wonderland All Rights Reserved.

UV : | PV :