我过去的某个时候删除了文件或某些代码.我可以在内容中进行grep(不在提交消息中)吗?
一个非常糟糕的解决方案是grep日志:
git log -p | grep <pattern>
Run Code Online (Sandbox Code Playgroud)
但是,这不会立即返回提交哈希.我一直玩得git grep无济于事.
我试图db/irrelevant.php从Git diff中排除一个文件().我试图把在一个文件db名为的子目录.gitattributes与行irrelevant.php -diff
,我也尝试创建一个名为.git/info/attributes包含db/irrelevant.php.
在所有情况下,该db/irrelevant.php文件都作为Git二进制补丁包含在diff中.我想要的是diff命令忽略对该文件的更改.我究竟做错了什么?
我想知道如何从我的Git diff中排除整个目录.(在这种情况下/规范).我正在使用git diff命令为我们的整个软件版本创建差异.但是,规范的更改与此过程无关,只会造成令人头疼的问题.现在我知道我能做到
git diff previous_release..current_release app/
Run Code Online (Sandbox Code Playgroud)
这将为app目录中的所有更改创建一个diff,但不会在lib /目录中创建.有谁知道如何完成这项任务?谢谢!
编辑:我只是想清楚,我知道我可以在最后编制所有目录的参数,减去/ spec.我希望有一种方法可以真正排除命令中的单个目录.
git 1.7.12
我想将给定目录下的所有文件标记为假设未更改.
1)git update-index --assume-unchaged dir/给出"忽略路径".
2)git update-index --assume-unchaged dir/*快速失败,因为它会遇到未被跟踪的文件,因此它给出"致命:无法标记文件"并退出.
3)尝试生成要标记的文件列表. cd进入所需目录然后运行git ls-files | tr '\n' ' ' | git update-index --assume-unchanged.这不会产生任何错误消息,但不会成功标记文件.命令的第一部分git ls-files | tr '\n' ' '正确生成了我要标记的所有文件的空格分隔列表.如果我将该命令的输出复制并粘贴到命令行,则该git update-index命令有效.什么不使用管道?
不,我添加dir到.gitignore 是不够的.我需要将这些文件放在存储库中,但是需要在本地进行不需要的更改,以便用户可以进行拉取.
我想用来git log显示与给定模式不匹配的所有提交.我知道我可以使用以下内容来显示与模式匹配的所有提交:
git log --grep=<pattern>
Run Code Online (Sandbox Code Playgroud)
如何反转匹配感?
我试图忽略消息中"碰到版本..."的提交.
编辑:我希望我的最终输出非常详细.例如git log --pretty --stat.所以输出git log --format=oneline对我来说不起作用.
尝试调整来自旺旺的答案以从"git diff"中排除文件以获得--stat标志并失败 - 接受的答案(创建驱动程序)似乎只是unix(重定向到/ bin/true,无论这意味着什么)加上它创建了一个驱动程序将它永久地分配给文件类型,而我正在寻找一个开关来临时禁用文件的差异(或者更确切地说是某些文件).
脚本解决方案:
git diff `git status -s |grep -v ^\ D |grep -v file/to/exclude.txt |cut -b4-`
Run Code Online (Sandbox Code Playgroud)
实际上调用git状态并编辑其输出 - 而我想要的是指示git diff本身在计算(简单)--stat(只是更改行)时忽略一些文件.我经历了git-diff文档,但似乎无法找到这样的选项.有人帮我一把吗?
$ git --version
git version 2.6.1.windows.1
Run Code Online (Sandbox Code Playgroud) 有没有人在将文件夹与 git diff --no-index 进行比较时如何排除文件?似乎这个选项
':(exclude)*.min.css'
Run Code Online (Sandbox Code Playgroud)
不适用于无索引(在工作树之外)
这是在git log -p中忽略文件的后续内容,也与使'git log'忽略某些路径的更改有关.
我正在使用Git 1.9.2.我正在尝试使用pathspec魔术:(exclude)来指定某些补丁不应该在输出中显示git log -p.但是,我要排除的修补程序仍显示在输出中.
这是一个重现这种情况的最小工作示例:
$ cd ~/Desktop
$ mkdir test_exclude
$ cd test_exclude
$ git init
$ mkdir testdir
$ printf "my first cpp file\n" > testdir/test1.cpp
$ printf "my first xml file\n" > testdir/test2.xml
$ git add testdir/
$ git commit -m "added two test files"
Run Code Online (Sandbox Code Playgroud)
现在我想显示我的历史记录中的所有补丁,期望与文件testdir夹中的XML文件相对应的补丁.因此,按照VonC的回答,我跑了
$ git log --patch -- . ":(exclude)testdir/*.xml"
Run Code Online (Sandbox Code Playgroud)
但我的testdir/test2.xml文件的补丁仍显示在输出中:
commit 37767da1ad4ad5a5c902dfa0c9b95351e8a3b0d9
Author: xxxxxxxxxxxxxxxxxxxxxxxxx
Date: …Run Code Online (Sandbox Code Playgroud) 几个月前我升级了Git,从那时起,我一直在尝试接受以下弃用通知git add --update:
警告:行为"git的添加--update(或-u)"从树的子目录没有路径参数将在Git的2.0改变,不应再使用.要为整个树添加内容,请运行:
git add --update:/(或git add -u:/)
要将命令限制到当前目录,请运行:
git add --update.(或git add -u.)
使用当前的Git版本,该命令仅限于当前目录.
警告本身非常有意义,它为我节省了一些重置.我已经习惯了输入.或者:/,但仍然发现后者非常奇怪,因为它与我遇到的任何其他命令行语法不同.这.是非常令牌:它只是意味着"当前目录",就像在find .,但:/......从未见过,除非在此上下文中.这是什么意思?
我一直认为它是一个表情符号,当然不是这样吗?
我通常使用git show命令检查提交引入的更改。这很有效,除非我只对在已更改文件的子集中引入的更改感兴趣。
有没有类似的东西git show --exclude some/path可以开箱即用?