我有一大堆的变更文件,但我想明确忽略一个修改过的文件。 看起来这之后git status
:
# modified: main/dontcheckmein.txt
# deleted: main/plzcheckmein.c
# deleted: main/plzcheckmein2.c
...
有没有一种方法,我可以做git add
,但只是忽略了一个文本文件,我不想碰? 就像是:
git add -u -except main/dontcheckmein.txt
Answer 1:
git add -u
git reset -- main/dontcheckmein.txt
Answer 2:
1)要开始忽略变为单已经版本文件
git update-index --assume-unchanged "main/dontcheckmein.txt"
并撤消git update-index --no-assume-unchanged "main/dontcheckmein.txt"
点击这里
2)以完全从在存储库创建忽略某一特定的单一文件防止它
在此首先看的Git全局忽略不工作
在.gitignore
的相对路径添加到该文件,而不会导致./
所以如果你的文件是在MyProject/MyFolder/myfile.txt
(其中.git
也是在MyProject
),在.gitignore
你把眼前这个MyFolder/myfile.txt
你可以确认哪些规则与与忽略git check-ignore "MyFolder/myfile.txt"
关于全局忽略
这种联系谈到~/.gitignore_global
; 但该文件是关系到你的项目; 所以,如果你把排除模式MyFolder/myfile.txt
在~/.gitignore_global
,它会工作,但不会太大的意义...
在另一方面,如果你设置你的项目git config core.excludesfile .gitignore
其中.gitignore
是MyProject
; 该设置将覆盖~/.gitignore_global
,可以有非常有用的规则 ...
所以,就目前而言,我认为最好是做一些脚本来搭配你.gitignore
与~/.gitignore_global
在.gitignore
。
最后一个警告
如果你想忽略该文件已经在库,除非你做到这一点这种方法是行不通的: git rm "MyFolder/myfile.txt"
,但第一次备份,因为它会在本地也删除! 您可以在以后将它复制回...
Answer 3:
对于文件
git add -u
git reset -- main/dontcheckmein.txt
对于一个文件夹
git add -u
git reset -- main/*
Answer 4:
现在git
支持exclude certain paths and files
通过pathspec魔法:(exclude)
和它的缩写形式:!
。 所以,你可以很容易地实现为下面的命令。
git add --all -- :!main/dontcheckmein.txt
git add -- . :!main/dontcheckmein.txt
其实你可以指定更多:
git add --all -- :!path/to/file1 :!path/to/file2 :!path/to/folder1/*
git add -- . :!path/to/file1 :!path/to/file2 :!path/to/folder1/*
Answer 5:
虽然本·杰克逊是正确的,我以为我想补充我怎么一直在使用该解决方案,以及。 下面是一个非常简单的脚本我使用(我称之为gitadd)增加,除了有选择的几个,我在一个名为一直列出的所有变化.gittrackignore
(非常类似的.gitignore是如何工作的)。
#!/bin/bash
set -e
git add -A
git reset `cat .gittrackignore`
这就是我目前的.gittrackignore
样子。
project.properties
我工作的一个Android项目进行部署时,我在命令行编译。 该项目依赖于SherlockActionBar,所以它需要在project.properties中引用,但与编译弄乱,所以现在我只需要输入gitadd
,并添加所有的变化与git,而不必非加project.properties每一次。
Answer 6:
试试这个:
git的结帐 - 主/ dontcheckmein.txt
Answer 7:
使用git add -A
添加所有修改和新增的文件一次。
例
git add -A
git reset -- main/dontcheckmein.txt
Answer 8:
我用git add --patch
颇有几分希望这样的事情,以避免通过相同的文件打d所有的时间。 我掀起了一个非常哈克夫妇git的别名来完成这项工作:
[alias]
HELPER-CHANGED-FILTERED = "!f() { git status --porcelain | cut -c4- | ( [[ \"$1\" ]] && egrep -v \"$1\" || cat ); }; f"
ap = "!git add --patch -- $(git HELPER-CHANGED-FILTERED 'min.(js|css)$' || echo 'THIS_FILE_PROBABLY_DOESNT_EXIST' )"
在我来说,我只是想忽略某些缩小的文件,所有的时间,但你可以把它用像一个环境变量$GIT_EXCLUDE_PATTERN
一个更普遍的使用情况。
Answer 9:
对于这个问题的特定情况下,最简单的方法是添加的所有文件扩展名为.c,并留下了一切:
git add *.c
从GIT-SCM (或/和man git add
):
git的添加<pathspec> ...
要添加的文件与内容。 Fileglobs(如* .c)中可以给出添加所有匹配的文件。 <...>
请注意,这意味着,你也可以这样做:
git add **/main/*
补充一点,是在所有文件(没有忽略) main
文件夹。 你甚至可以去野外用更精细的图案:
git add **/s?c/*Service*
以上将添加的所有文件中的s(any char)c
文件夹,并有Service
在其文件名的地方。
很显然,你不局限于每个命令一个模式。 也就是说,你可以问git的补充,具有.C和.h的扩展名的文件:
git add *.c *.h
此链接可能会给你一些更多的水珠图案的想法。
我觉得特别有用,当我做了很多变化,但仍希望我提交留原子和反映渐进的过程,而不是我可以在当时的工作变动的大杂烩。 当然,在某些时候想出复杂的图案胜过添加文件用更简单的方法,或在同一时间,甚至一个文件的费用成本。 然而,大部分的时间,我很容易就能找出只是我需要一个简单的模式中的文件,并排除一切。
顺便说一句,你可能需要引用您glob模式,为他们的工作,但是这从来不是我的情况。
Answer 10:
要提交的变化:(使用“git的重置头......”到unstage)
文章来源: Add all files to a commit except a single file?