从当前git commit命令的提交中排除/跳过/忽略2个目录

时间:2018-03-29 18:30:32

标签: git git-commit

我有超过100个文件和目录要提交。但我暂时不想提交2个目录。如何跳过或排除这些提交的目录?

不,它不属于.gitignore,因为我只为这个实例做这件事。

1 个答案:

答案 0 :(得分:2)

TL; DR

列出 要添加,添加和提交的文件的简短列表。例如,从git status --short > /tmp/list开始,然后在您喜欢的编辑器中打开/tmp/list。将 想要添加的每个文件前面的M替换为git add。删除您 想要添加的每个文件的整行。然后运行sh /tmp/list以执行所有git add命令。如果您愿意,可以再次运行git status,而不是--short,看看您上演了什么。

排除它们。你把它们留在身边,你只是不改变它们。这比听起来容易。

在Git中,每个提交都是每个文件的完整快照。(嗯,该提交中的每个文件。)任何提交与其父项之间的更改是当你问它时,Git会在后面中找出一些东西:"完整的快照X与完整的快照Y之间的区别是什么?"那就是:

...--X--Y   <-- somebranch

这里快照X包含从X开始的形式的每个文件,快照Y包含从Y开始的形式的每个文件。要弄清楚更改了什么,Git将生效从Y中减去X.

如果你在提交Y中省略一系列文件,那么改变了什么?的答案是,或者包括:删除所有这些文件。

Git构建提交的方式是使用人们不同地称为索引临时区域或有时的东西高速缓存。您首先要做git checkout

$ git checkout somebranch

这有几件事情,或多或少同时发生:

  • 让你&#34; on&#34;该分支,以便git statuson branch somebranch
  • 从分支somebranch提示中填写您的工作树 - 您完成所有工作的目录。
  • 从同一次提交中填写您的索引又名暂存区 1

Git知道你是&#34; on&#34;该分支是Git将特殊文件HEAD附加到该分支名称。分支名称本身标识 tip 提交,例如,如上图所示提交Y。由于HEAD已附加到branchname,因此这两个解析为&#34;提交Y&#34;在这一点上。

请注意,此时,HEAD提交(提交Y中的所有文件与索引中的所有文件完全匹配,这些文件与所有文件匹配-well,所有跟踪的文件 - 在您的工作树中。工作树中的任何未跟踪文件都是不在索引中的文件(因此也不在提交Y中,因为您的索引与提交Y匹配)。

1 Git将允许您的索引和工作树与某些案例中git checkout之后的当前提交不同,但并非总是如此。有关详细信息,请参阅Checkout another branch when there are uncommitted changes on the current branch

现在假设您在工作树中更改了一些文件,甚至许多文件。索引中这些文件的副本会发生什么变化?答案是:没有任何反应!索引中的那些文件仍然匹配当前的提交Y

如果您在新的提交Z中有一个文件,那么您现在必须git add将工作树中的文件放入索引中。这将使用工作树中的副本覆盖索引中的副本。

如果你在许多文件中有很多东西,你必须git add每个文件,或者使用某种集体&#34;添加所有文件&#34;操作。每个添加的文件都会复制到现有文件中,因此工作树版本现在是索引中的版本。

当你最终运行git commit时,Git立即打包索引中的任何内容并将其用于新的提交Z。新提交的父级是当前提交Y,一旦保存提交,Git就会更新当前分支名称,使其指向 new commit {{1而不是旧的提交Z。您的Y仍然附加到分支名称,所以现在您拥有:

HEAD

并且您的索引与您当前的提交完全匹配。您的工作树是不同的,正如脚注1中链接的问题所允许的那样。

如果您愿意,现在可以...--X--Y--Z <-- branchname (HEAD) 个更多文件。请注意,与已提交的文件不同,工作树中的任何内容都存储在永久性的任何位置,因此在您覆盖提交的任何内容之前,请确保&#39; s好的。