Git 中文参考(二)(7)

简介: Git 中文参考(二)

Git 中文参考(二)(6)https://developer.aliyun.com/article/1565798


GIT

部分 git [1] 套件

git-rm

原文: git-scm.com/docs/git-rm

名称

git-rm - 从工作树和索引中删除文件

概要

git rm [-f | --force] [-n] [-r] [--cached] [--ignore-unmatch] [--quiet] [--] <file>…

描述

从索引中删除文件,或从工作树和索引中删除文件。 git rm不会仅从您的工作目录中删除文件。 (没有选项能只将文件从工作树中删除而还在索引中保留;如果非要这样做,请使用/bin/rm。)要删除的文件必须与分支的尖端相同,并且虽然可以使用-f选项覆盖默认行为,但不能在索引中暂存对其内容的更新。当给出--cached时,分阶段内容必须匹配分支的尖端或磁盘上的文件,从而允许仅从索引中删除文件。

选项

<file>… 

要删除的文件。可以给出 Fileglobs(例如*.c)以删除所有匹配的文件。如果你想让 Git 扩展文件 glob 字符,你可能需要 shell 转义它们。可以给出一个前置目录名称(例如,删除dir/file1dir/file2dir)以删除目录中的所有文件,并递归地删除所有子目录,但这需要明确给出-r选项。

-f 
--force 

覆盖最新的检查。

-n 
--dry-run 

实际上不要删除任何文件。相反,只显示它们是否存在于索引中,否则将被命令删除。

-r 

在给出前导目录名时允许递归删除。

-- 

此选项可用于将命令行选项与文件列表分开(当文件名可能被误认为是命令行选项时很有用)。

--cached 

使用此选项仅从索引中取消暂存和删除路径。无论是否修改了工作树文件,都将保持不变。

--ignore-unmatch 

即使没有匹配的文件,也以零状态退出。

-q 
--quiet 

git rm通常为每个删除的文件输出一行(以rm命令的形式)。此选项会禁止输出。

讨论

给予命令的列表可以是精确的路径名,文件 glob 模式或前置目录名。该命令仅删除 Git 已知的路径。已知文件路径,但没有告诉 Git 的文件不会被删除。

文件通配符跨目录边界匹配。因此,给定两个目录dd2,使用git rm 'd*'git rm 'd/*'之间存在差异,因为前者也将删除所有目录d2

删除已从文件系统中消失的文件

git rm没有选项只从索引中删除从文件系统中消失的路径。但是,根据用例,有几种方法可以完成。

使用“git commit -a”

如果您打算下一次提交应记录工作树中跟踪文件的所有修改,并记录已使用rm(而不是git rm)从工作树中删除的文件的所有删除,请使用git commit -a,因为它会自动注意并记录所有删除。通过使用git add -u,您也可以在不提交的情况下获得类似的效果。

使用“git add -A”

当接受供应商分支的新代码丢弃时,您可能希望记录路径的删除和新路径的添加以及现有路径的修改。

通常,您将首先使用以下命令从工作树中删除所有跟踪的文件:

git ls-files -z | xargs -0 rm -f

然后解压缩工作树中的新代码。或者你可以 rsync 对工作树进行更改。

之后,记录工作树中所有删除,添加和修改的最简单方法是:

git add -A

git-add [1]

其他方法

如果您真正想要做的就是从索引中删除工作树中不再存在的文件(可能是因为您的工作树是脏的,因此您无法使用git commit -a),请使用以下命令:

git diff --name-only --diff-filter=D -z | xargs -0 git rm --cached

子模块

只有使用 gitfile 的子模块(这意味着它们用 Git 1.7.8 或更新版本克隆)将从工作树中删除,因为它们的存储库位于超级项目的.git 目录中。如果子模块(或其中嵌套的子模块之一)仍然使用.git 目录,git rm会将子模块 git 目录移动到 superprojects git 目录中以保护子模块的历史记录。如果在gitmodules [5]中存在 submodule.部分,那么文件将被删除,并被暂存(除非使用了–cached 或-n)。

当 HEAD 与索引中记录的相同时,子模块被认为是最新的,未修改跟踪文件,并且子模块工作树中不存在未被忽略的未跟踪文件。忽略的文件被认为是可消耗的,并且不会阻止子模块的工作树被删除。

如果您只想从工作树中删除子模块的本地签出而不提交删除,请改用 git-submodule [1] deinit。有关子模块移除的详细信息,请参见 gitsubmodules [7]

例子

git rm Documentation/\*.txt 

从索引中的Documentation目录及其任何子目录中删除所有*.txt文件。

请注意,在此示例中,引用了星号*;这让 Git 而不是 shell 扩展了Documentation/目录下的文件和子目录的路径名。

git rm -f git-*.sh 

因为此示例允许 shell 展开星号(即您明确列出文件),所以它不会删除subdir/git-foo.sh

BUGS

每次超级项目更新删除填充的子模块时(例如,在删除之前和之后切换提交时),旧的子模块检出将保留在旧位置。删除旧目录只有在使用 gitfile 时才是安全的,否则子模块的历史记录也将被删除。当实现递归子模块更新时,此步骤将过时。

也可以看看

git-add [1]

GIT

部分 git [1] 套件

git-mv

原文: git-scm.com/docs/git-mv

名称

git-mv - 移动或重命名文件,目录或符号链接

概要

git mv <options>… <args>…

描述

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

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

在第一种形式中,它将重命名为,必须存在,并且可以是文件,符号链接或目录。在第二种形式中,最后一个参数必须是现有目录;给定的源将被移动到此目录中。

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

选项

-f 
--force 

即使目标存在,也强制重命名或移动文件

-k 

跳过移动或重命名可能导致错误情况的操作。当源既不存在也不由 Git 控制时,将发生错误,或者除非给出-f,覆盖现有文件时也会发生错误。

-n 
--dry-run 

没做什么;只显示会发生什么

-v 
--verbose 

在移动文件时报告文件的名称。

子模

使用 gitfile 移动子模块(这意味着它们使用 Git 1.7.8 或更高版本克隆)将更新 gitfile 和 core.worktree 设置以使子模块在新位置工作。它还将尝试更新 gitmodules [5] 文件中的子模块.path 设置并暂存该文件(除非使用-n)。

BUGS

每次超级项目更新移动填充的子模块时(例如,当在移动之前和之后切换提交时),旧的子模块检出将保留在旧位置,并且空目录将出现在新位置。要在新位置再次填充子模块,用户必须在之后运行“git  submodule update”。删除旧目录只有在使用 gitfile  时才是安全的,否则子模块的历史记录也将被删除。当实现递归子模块更新时,这两个步骤都将过时。

GIT

部分 git [1] 套件

git-branch

原文: git-scm.com/docs/git-branch

名称

git-branch - 列出,创建或删除分支

概要

git branch [--color[=<when>] | --no-color] [-r | -a]
  [--list] [-v [--abbrev=<length> | --no-abbrev]]
  [--column[=<options>] | --no-column] [--sort=<key>]
  [(--merged | --no-merged) [<commit>]]
  [--contains [<commit]] [--no-contains [<commit>]]
  [--points-at <object>] [--format=<format>] [<pattern>…]
git branch [--track | --no-track] [-f] <branchname> [<start-point>]
git branch (--set-upstream-to=<upstream> | -u <upstream>) [<branchname>]
git branch --unset-upstream [<branchname>]
git branch (-m | -M) [<oldbranch>] <newbranch>
git branch (-c | -C) [<oldbranch>] <newbranch>
git branch (-d | -D) [-r] <branchname>…
git branch --edit-description [<branchname>]

描述

如果给出--list,或者没有非选项参数,则列出现有分支;当前分支将以星号突出显示。选项-r列出远程跟踪分支,选项-a显示本地和远程分支。如果给出,则将其用作 shell 通配符以将输出限制为匹配的分支。如果给出了多个模式,则如果它与任何模式匹配,则显示分支。注意,提供时,必须使用--list;否则该命令被解释为创建分支。

使用--contains,仅显示包含命名提交的分支(换句话说,提示提交是指定提交的后代的分支),--no-contains将其反面。使用--merged,将仅列出已合并到命名提交的分支(即,可以从命名提交到提示提交的分支)。使用--no-merged将仅列出未合并到命名提交的分支。如果参数缺失它默认为HEAD(即当前分支的尖端)。

命令的第二个表单创建一个名为的新分支头。它指向当前的HEAD,或者是如果有给予的话。关于举一个特殊的例子,你可以使用简写的"A...B"取得 A 和 B 的共同父节点,如果他们只存在一个。你可以使用 A、B 中的一个,默认是HEAD

请注意,这将创建新分支,但不会将工作树切换到它;使用“git checkout< newbranch>”切换到新分支。

当本地分支从远程跟踪分支启动时,Git 设置分支(特别是branch..remotebranch..merge配置条目),以便 git pull 能适当地从远程跟踪分支合并本地。可以通过全局branch.autoSetupMerge配置标志更改此行为。可以使用--track--no-track选项覆盖该设置,稍后使用git branch --set-upstream-to进行更改。

使用-m-M选项,将重命名为。如果有一个相应的 reflog,它被重命名为匹配,并创建一个 reflog 条目来记住分支重命名。如果存在,-M 必须用于强制重命名发生。

-c-C选项具有与-m-M完全相同的语义,除了将分支与其配置重命名,并且 reflog 将被复制到新名称。

使用-d-D选项,将被删除。您可以指定多个分支进行删除。如果分支当前有 reflog,那么 reflog 也将被删除。

-r-d一起使用以删除远程跟踪分支。请注意,如果远程存储库中不再存在远程跟踪分支,或者如果 git fetch 配置为不再获取它们,则删除它们才有意义。另请参阅 git-remote [1]prune 子命令,了解清除所有过时的远程跟踪分支的方法。

选项

-d 
--delete 

删除分支。分支必须在其上游分支中完全合并,或者如果没有使用--track--set-upstream-to设置上游,则必须在HEAD中合并。

-D 

--delete --force的快捷方式。

--create-reflog 

创建分支的 reflog。这将激活记录对分支引用所做的所有更改,从而可以使用基于日期的 sha1 表达式,例如“ @ {yesterday}”。请注意,在非裸存储库中,默认情况下,core.logAllRefUpdates配置选项通常会启用 reflog。否定形式--no-create-reflog仅覆盖较早的--create-reflog,但目前不会否定core.logAllRefUpdates的设置。

-f 
--force 

重置到,即使已存在。没有-fgit branch 拒绝更改现有分支。与-d(或--delete)结合使用,允许删除分支,而不管其合并状态如何。与-m(或--move)结合使用,即使新分支名称已存在,也允许重命名分支,这同样适用于-c(或--copy)。

-m 
--move 

移动/重命名分支和相应的 reflog。

-M 

--move --force的快捷方式。

-c 
--copy 

复制分支和相应的 reflog。

-C 

--copy --force的快捷方式。

--color[=<when>] 

颜色分支以突出显示当前,本地和远程跟踪分支。该值必须为 always(默认值),never 或 auto。

--no-color 

即使配置文件提供默认的颜色输出,也要关闭分支颜色。与--color=never相同。

-i 
--ignore-case 

排序和过滤分支不区分大小写。

--column[=<options>] 
--no-column 

在列中显示分支列表。有关选项语法,请参阅配置变量 column.branch。没有选项的--column--no-column分别相当于 alwaysnever

此选项仅适用于非详细模式。

-r 
--remotes 

列出或删除(如果与-d 一起使用)远程跟踪分支。

-a 
--all 

列出远程跟踪分支和本地分支。

-l 
--list 

列出分支。使用可选的...,例如git branch --list 'maint-*',仅列出与模式匹配的分支。

-v 
-vv 
--verbose 

在列表模式下,显示每个头的 sha1 和提交主题行,以及与上游分支(如果有)的关系。如果给出两次,也打印上游分支的名称(另请参见git remote show )。

-q 
--quiet 

在创建或删除分支时更安静,禁止出现非错误消息。

--abbrev=<length> 

在输出列表中更改 sha1 的最小显示长度。默认值为 7,可以通过core.abbrev配置选项覆盖。

--no-abbrev 

在输出列表中显示完整的 sha1,而不是缩写它们。

-t 
--track 

创建新分支时,设置branch..remotebranch..merge配置条目以将起点分支标记为新分支的“上游”。此配置将告诉 git 显示git statusgit branch -v中两个分支之间的关系。此外,它在没有参数的情况下指示git pull在检出新分支时从上游拉出。

当起点是远程跟踪分支时,此行为是默认行为。如果希望git checkoutgit branch始终表现得像--no-track一样,请将 branch.autoSetupMerge 配置变量设置为false。如果在起点是本地或远程跟踪分支时需要此行为,请将其设置为always

--no-track 

即使 branch.autoSetupMerge 配置变量为 true,也不要设置“上游”配置。

--set-upstream 

由于此选项具有令人困惑的语法,因此不再支持它。请改用--track--set-upstream-to

-u <upstream> 
--set-upstream-to=<upstream> 

设置的跟踪信息,以便被认为是的上游分支。如果没有指定上游分支,则默认为当前分支。

--unset-upstream 

删除的上游信息。如果未指定分支,则默认为当前分支。

--edit-description 

打开编辑器并编辑文本以解释分支的用途,供各种其他命令使用(例如format-patchrequest-pullmerge(如果已启用))。可以使用多行解释。

--contains [<commit>] 

仅列出包含指定提交的分支(如果未指定,则为 HEAD)。意味着--list

--no-contains [<commit>] 

仅列出不包含指定提交的分支(如果未指定,则为 HEAD)。意味着--list

--merged [<commit>] 

仅列出其提示可从指定提交到达的分支(如果未指定,则为 HEAD)。意味着--list,与--no-merged不兼容。

--no-merged [<commit>] 

仅列出其提示无法从指定的提交访问的分支(如果未指定,则为 HEAD)。意味着--list,与--merged不兼容。

<branchname> 

要创建或删除的分支的名称。新分支名称必须通过 git-check-ref-format [1] 定义的所有检查。其中一些检查可能会限制分支名称中允许的字符。

<start-point> 

新的分支头将指向此提交。它可以作为分支名称,commit-id 或标记给出。如果省略此选项,则将使用当前 HEAD。

<oldbranch> 

要重命名的现有分支的名称。

<newbranch> 

现有分支的新名称。与相同的限制应用。

--sort=<key> 

根据给定的密钥排序。前缀-按值的降序排序。您可以使用–sort =选项多次,在这种情况下,最后一个键成为主键。支持的键与git for-each-ref中的键相同。排序顺序默认为branch.sort变量(如果存在)配置的值,或基于完整 refname(包括refs/...前缀)的排序。这首先列出分离的 HEAD(如果存在),然后是本地分支,最后是远程跟踪分支。见 git-config [1]

--points-at <object> 

仅列出给定对象的分支。

--format <format> 

在分支 ref 和它指向的对象中插入显示%(fieldname)的字符串。格式与 git-for-each-ref [1] 的格式相同。

配置

仅在列出分支时,当使用或引用--list时,才会遵守pager.branch。默认是使用 pager。见 git-config [1]

例子

Start development from a known tag 
$ git clone git://git.kernel.org/pub/scm/.../linux-2.6 my2.6
$ cd my2.6
$ git branch my2.6.14 v2.6.14   (1)
$ git checkout my2.6.14
  1. 这一步和下一步可以通过“checkout -b my2.6.14 v2.6.14”组合成一个步骤。
Delete an unneeded branch 
$ git clone git://git.kernel.org/.../git.git my.git
$ cd my.git
$ git branch -d -r origin/todo origin/html origin/man   (1)
$ git branch -D test                                    (2)
  1. 删除远程跟踪分支“todo”,“html”和“man”。下次 fetchpull 将再次创建它们,除非你不配置它们。参见 git-fetch [1]
  2. 即使“master”分支(或当前检出的任何分支)没有来自 test 分支的所有提交,也要删除“test”分支。

注意

如果要创建要立即签出的分支,则可以更轻松地使用 git checkout 命令及其-b选项来创建分支并使用单个命令将其签出。

选项--contains--no-contains--merged--no-merged有四个相关但不同的用途:

  • --contains 用于在所有分支中查找包含指定的分支。如果是被重新定义或修改的,需要特别注意。
  • --no-contains 与此相反,即不包含指定的的分支。
  • --merged用于查找可以安全删除的所有分支,因为这些分支完全被 HEAD 包含。
  • --no-merged用于查找要合入 HEAD 的候选分支,因为这些分支未被 HEAD 完全包含。

也可以看看

git-check-ref-format [1]git-fetch [1]git-remote [1] ,“了解历史:什么是分支?“在 Git 用户手册中。

GIT

部分 git [1] 套件


Git 中文参考(二)(8)https://developer.aliyun.com/article/1565800

相关文章
|
机器学习/深度学习 Shell 网络安全
【Git】Git 命令参考手册
Git 命令参考手册的扩展部分,包含了从基础操作到高级功能的全面讲解。
315 3
|
存储 缓存 网络安全
Git 中文参考(一)(8)
Git 中文参考(一)
167 2
|
存储 网络安全 开发工具
Git 中文参考(一)(7)
Git 中文参考(一)
203 2
|
存储 算法 Java
Git 中文参考(一)(6)
Git 中文参考(一)
169 2
|
存储 Shell 开发工具
Git 中文参考(一)(5)
Git 中文参考(一)
195 2
|
存储 开发工具 git
Git 中文参考(一)(4)
Git 中文参考(一)
169 2
|
存储 安全 开发工具
Git 中文参考(一)(3)
Git 中文参考(一)
118 2
|
存储 Shell 开发工具
Git 中文参考(一)(2)
Git 中文参考(一)
180 2
|
存储 人工智能 开发工具
Git 中文参考(五)(9)
Git 中文参考(五)
232 2
|
存储 Linux 开发工具
Git 中文参考(五)(8)
Git 中文参考(五)
176 2