GIT 命令学习:基础快照-add,status,commit,reset,rm,mv,diff

来源:互联网 发布:ubuntu编写shell脚本 编辑:程序博客网 时间:2024/06/05 12:45

GIT 命令

基础快照

add

添加内容到index。利用working tree 中的内容更新index,为下一步的commit操作做准备。典型地将当前路径下的内容作为一个整体进行添加。也有一些选项可以只add变化的内容。index保存了working tree中一些内容的快照,这些内容也是将要commit的内容,因此在commit之前必须要add新建的或者更改的内容。在commit之前,你可以多次add。git status 命令可以查看下次commit的内容。add命名不会add被忽略的文件,但可以使用 -f 强制add。

1、命令格式
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]  [--chmod=(+|-)x] [--] [<pathspec>…​]

2、参数选项
1)<pathspec>…​
被add的文件的路径 
2)-n  --dry-run
并不真正的add,只是显示它们是否存在或者忽略。
3)-v  --verbose
全部添加。
4)-f -- force
强制添加,不论是否忽略。
5)-i --interactive
添加working tree中更改的内容到index。
6)-p --patch
在index和working tree之间的patch中选择一些片段添加到index。这使得用户有机会重现查看更改的部分。
7)-e --edit
在编辑器中打开与index不同的部分使得用户可以修改它。编辑器关闭之后会调整hunks内容然后将这个patch应用于index。
8)-u --update
当有项目匹配<pathspec>时更新index,这个操作会移除并修改index中的内容来匹配working tree,但不会添加新的文件。
9)-A --all --no-ignore-removal
在working tree有文件匹配<pathspec>或者index已经有条目时均更新index。这种add会修改和移除条目来匹配working tree。如果没有<pathspec>时使用 -A ,所有的在working tree中的文件均会更新。
10)--no-all  --ignore-removal
更新新建的文件和修改过的文件且忽略已经移出working tree的文件。当没有使用<pathspec>时,此选项成为一个无效操作。
11)-N --intent-to-end
记录接下来要添加内容的路径。在index中针对这个路径开放一个没有内容的入口。
12)--refresh
不添加文件,刷新index中的文件的状态信息。
13)--ignore-error
如果有些文件因为错误而不能添加,此时不终止操作,继续添加其它文件。
14)--ignore-missing
此选项只能结合 --dry-run 使用。用户可以在此时检查给出的文件是否是被忽略的,不论它们是否在working tree中。
15) chmod=(+ | -)x
重载被添加文件的可执行位。这种改变只在index中,在磁盘上的文件并没有被改变。
16)-- 
这个选项用来分隔命令行选项和文件列表。

status

显示working tree的状态。主要显示一下内容:index文件和目前HEAD提交的路径的不同之处;working tree和index文件的路径不同之处;working tree 中未被追踪的路径。第一部分是你将用git commit 提交的文件,第二和第三部分是需要先git add 然后才git commit 的内容。

1、命令格式
git status [<options>…​] [--] [<pathspec>…​]

2、参数选项
1) -s --short
以简短方式输出。
2) -b --branch
即使是在简短方式下也显示分支和追踪信息。
3) --porcelain[=<version>]
将输出以利于脚本解析的格式输出。
4) --long
将status按照完整的形式输出。
5) -v --verbose
除了文件名被修改外,也会显示将要提交文件的文本的变化。
6) -u[<mode>]  --untracked-files[=<mode>]
显示未被追踪的文件。其中可选的选项为:no(不显示)、normal(显示文件和目录)、all(显示未被追踪的目录里的文件)。
7) --ignore-submodules[=<when>]
当查找修改时忽略自模型的更改。
8) --ignored
显示被忽略的文件。
9) -z
利用NUL代替LF结束条目。
10) --column[=<options>]  --no-column
以列的方式显示未被追踪的条目。

commit

记录库的变更。将目前index中的内容作为一次新的提交,可以编辑信息记录变更内容。

1、命令格式
git commit [-a | --interactive | --patch] [-s] [-v] [-u<mode>] [--amend]   [--dry-run] [(-c | -C | --fixup | --squash) <commit>]   [-F <file> | -m <msg>] [--reset-author] [--allow-empty]   [--allow-empty-message] [--no-verify] [-e] [--author=<author>]   [--date=<date>] [--cleanup=<mode>] [--[no-]status]   [-i | -o] [-S[<keyid>]] [--] [<file>…​]

2、参数选项
1) --all  -a
自动的关联那些 被修改或者被删除的文件,但是新建的文件没有受影响。
2) -p --patch
利用交互的patch选择接口来选择哪些变更被提交。
3) -C <commit>  --reuse-message=<commit>
利用一个已经存在的提交对象,重复使用其log信息和作者信息。
4) -c <commit>  --reedit-message=<commit>
类似于-C,但是会调用编辑器,能进行更深一步的信息编辑。
5) --fixup=<commit>
为了使用 rebase --autosquash 构造一个提交信息。这个提交信息会是一个带前缀“fixup”的提交的主题行。
6) --squash=<commit>
为了使用 rebase --autosquash 构造一个提交信息。这个提交信息的主题行取自一个带前缀“squash”的提交。也能够使用其他提交信息选项(-m/-c/-C/-F)。
7) reset-author
当使用-C/-c/-- 修改选项时,或者在冲突之后提交时,声明这个提交结果的作者。这个操作会改变作者的时间戳。
8) --short
当使用 dry-run 时,将输出以short的格式给出。
9) --branch
显示分支和追踪信息,即使在short格式下也是如此。
10) --porcelain
当使用 dry-run 时,将输出以porcelain-ready的格式给出。
11) --long
当使用 dry-run 时,将输出以long的格式给出。
12) -z --null
当显示 short 或者porcelain 状态输出时,条目结束以NUL代替LF结束。如果格式没有显式给出,默认为 --porcelain。
13) -F <file>  --file=<file>
根据给出的文件使用提交消息。利用 - 来从标准输入读取消息。
14) --author=<author>
重载提交作者。
15) --date=<date>
重载提交时间。
16) -m <msg>  --message=<msg>
利用给出的<msg> 作为提交消息。如果 -m 被使用,则它们的值串联起来作为消息。
17) -t <file>  --template=<file>
当编辑提交消息时,启用编辑器。
18) -s --signoff
在提交的log消息末尾由提交者添加 signed-off-by 行。
19) -n  --no-verify
 绕过预提交和提交消息的牵制。
20) --allow-empty
允许提交完全相同的tree。一般提交完全相同的tree作为它的单亲版本是不对的。
21) --allow-empty-message
允许提交空的提交消息。
22) --cleanup=<mode>
设定在提交前如何清除提供的提交消息。常用的模式有:strip、whitesapce、verbatim、scissors、default。
23) -e  --edit
更深一步地编辑提交消息。
24) --no-edit
利用选择好的提交消息且不利用编辑器。
25) --amend
通过创建一个新的提交来替换当前分支的tip。
26) --no-post-rewrite
绕过post rewrite限制。
27) -i --include
在从暂存区提交之前,也暂存命令行给出的路径的内容。
28) -o --only
通过更新的由命令行指明的路径的working tree的内容来完成一个提交,忽略其他路径暂存的内容。这是git commit的默认设置。
29) -u[<mode>]  --untracked-files[=<mode>]
显示未被追踪的文件。
30) -v  --verbose
在提交消息模版的底部显示当前版本和哪些将被提交的内容的不同之处以提醒用户做了哪些改变。
31)  -q --quiet
禁止提交的总结消息。
32) --dry-run
并不实际提交,只是列出要提交文件的路径,发生本地变化但不会提交的路径、未被追踪的路径。
33) --status
当使用编辑器准备提交消息时会将status的输出包含进提交消息模版中。
34) --no-status
当使用编辑器准备提交消息时不会将status的输出包含进提交消息模版中。
35) -S[<keyid>]  --gpg-sign[=<keyid>]
GPG-sign 提交。
36) --no-gpg-sign
取消commit.gpgSign配置变量。
37) --
不会将多余的字符解释为参数选项。
38) <file>...
当在命令行中给出了文件时,那么就提交这些文件,而不同拷入暂存的记录。

reset

重新设定目前的HEAD指到某个状态。

1、命令格式
第一和第二种形式中,从<tree-ish>复制条目到index。第三种形式中设置当前的HEAD到<commit>,可以选择性地更改index和working tree来相互匹配。
git reset [-q] [<tree-ish>] [--] <paths>…​git reset (--patch | -p) [<tree-ish>] [--] [<paths>…​]git reset [--soft | --mixed [-N] | --hard | --merge | --keep] [-q] [<commit>]
1) git reset [-q] [<tree-ish>] [--] <paths>…
重置index中所有的<paths>到<tree-ish>中对应的状态,这并不影响working tree 和 当前分支。也就是说,git reset <paths> 是 git add <paths> 的反响操作。
2) git reset (--patch | -p) [<tree-ish>] [--] [<paths>…​]
交互式地在index 和 <tree-ish>(通常为当前HEAD)中的不同部分选取部分内容,然后将选中的部分进行重置。也就是说, git reset -p 是 git add -p的反向操作。
3) git reset [<mode>] [<commit>]
这种形式重置当前的分支到<commit>并且可能会更新index(重置它为<commit>),而working tree 取决于<mode>。如果mode部分被省略了,则默认为:--mixed。
mode的可以选择以下其中一种:
--soft:对index 和 working tree并不做任何改变(但是会将head重置到<commit>,其他模式均会执行此操作)。
--mixed:重置index,但不会改变working tree。
--hard:重置index 和 working tree,所有的文件都恢复到了<commit>。
--merge:重置index;更新working tree 中<commit>与HEAD不相同的部分;保留了index和working tree 不同的部分。  
--keep:重置index;更新working tree 中<commit>与HEAD不相同的部分;

2、参数选项
--quiet  -q
禁止其他输出,仅输出错误信息。

rm

从index 和 working tree 中移除文件,但并不会从你的磁盘工作目录中移除文件。

1、命令格式
git rm [-f | --force] [-n] [-r] [--cached] [--ignore-unmatch] [--quiet] [--] <file>…​

2、参数选项
1) <file>...
决定移除的文件。
2) -f --force
 重载最新的检查。
3) -n --dry-run
并不真的移除文件,只是显示它们是否存在index并且是否可以被移除。
4) -r
当给定了主目录时,允许循环递归的移除文件。
5) --
用以分开命令行和文件列表。
6) --cached
从index中移除路径(文件),不实施暂存。而对于working tree,不论是否有更改,均保留。
7) --ignore-unmatch
即使有文件未能匹配,也以0状态退出。
8) -q --quiet
对于每移除一个文件,git rm 只输出一行。

mv

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

1、命令格式
第一种形式重命名<source>为<destination>,第二种形式将给定的资源移动到最后的目标目录中。
git mv [-v] [-f] [-n] [-k] <source> <destination>git mv [-v] [-f] [-n] [-k] <source> ... <destination directory>

2、参数选项
1) -f --force
强制重命名或者移动一个文件,即使目标文件已存在。
2) -k
跳过会引发错误的重命名和移动。 
3) -n --dry-run
什么都不做,只显示会发生什么。
4)-v --verbose
返回被移动文件的名字。

diff

指出两者之间的不同:commit与commit、commit与working tree 等。

1、命令格式
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>
1)git diff [--options] [--] [<path>…​]
这种形式用来查看index(staging area)的变更。也就是显示提交前和提交后的不同之处。
2)git diff --no-index [--options] [--] [<path>…​]
这种形式比较俩个文件系统下不同路径文件。其中 --no-index 可以省略,当命令运行在git控制的working tree中并且至少有一个路径在这之外,或者命令运行在git控制的working tree之外。
3)git diff [--options] --cached [<commit>] [--] [<path>…​]
比较提交前的暂存文件(index)与某个<commit>。
4)git diff [--options] <commit> [--] [<path>…​]
比较working tree与某个<commit>。
5)git diff [--options] <commit> <commit> [--] [<path>…​]
比较 任意两个<commit>。
6)git diff [--options] <commit>..<commit> [--] [<path>…​]
比较 任意两个<commit>。
7)git diff [--options] <commit>...<commit> [--] [<path>…​]
比较两个<commit>,从最开始共同的起点开始到倒数第二个之间的不同。
8)git diff [options] <blob> <blob>
比较两个blob对象的行内容的不同之处。

2、参数选择
1)-p -u --patch
2)--no-patch
3)-U<n> --unified=<n>
4)--raw
5)--patch-with-raw
6)--indent-heuristic --no-indent-heuristic
7)--minimal
8)--patience
9)--histogram
10)--diff-algorithm={patience|minimal|histogram|myers}
11)--stat[=<width>[,<name-width>[,<count>]]]
12)--numstat
13)--shortstat
14)--dirstat[=<param1,param2,…​>]
15)<limit>
16)--summary
17)--patch-with-stat
18)-z
19)--name-only
20)--name-status
21)--submodule[=<format>]
22)--color[=<when>]
23)--no-color
24)--word-diff[=<mode>]
25)color
26)plain
27)porcelain
28)none
29)--word-diff-regex=<regex>
30)--color-words[=<regex>]
31)--no-renames
32)--check
33)--ws-error-highlight=<kind>
34)--full-index
35)--binary
36)--abbrev[=<n>]
37)-B[<n>][/<m>] --break-rewrites[=[<n>][/<m>]]
38)-M[<n>] --find-renames[=<n>]
39)-C[<n>] --find-copies[=<n>]
40)-D --irreversible-delete
41)-l<num>
42)--diff-filter=[(A|C|D|M|R|T|U|X|B)…​[*]]
43)-S<string>
44)-G<regex>
45)--pickaxe-all-
46)-pickaxe-regex
47)-O<orderfile>
48)-R
49)--relative[=<path>]
50)-a --text
51)--ignore-space-at-eol
52)-b --ignore-space-change
53)-w --ignore-all-space
54)--ignore-blank-lines
55)--inter-hunk-context=<lines>
56)-W --function-context
57)--exit-code
58)--quiet
59)--ext-diff
60)--no-ext-diff
61)--textconv --no-textconv
62)--ignore-submodules[=<when>]
63)--src-prefix=<prefix>
64)--dst-prefix=<prefix>
65)--no-prefix
66)--line-prefix=<prefix>
67)--ita-invisible-in-index
68)<path>…​


0 0