我有超过100个文件和目录要提交。但我暂时不想提交2个目录。如何跳过或排除这些提交的目录?
不,它不属于.gitignore,因为我只为这个实例做这件事。
答案 0 :(得分:2)
列出 要添加,添加和提交的文件的简短列表。例如,从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
这有几件事情,或多或少同时发生:
git status
说on branch somebranch
。somebranch
的提示中填写您的工作树 - 您完成所有工作的目录。 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好的。