git提交名称中冒号错误

时间:2015-09-04 22:36:49

标签: windows git bash command-line command-line-tool

命令git diff "??/??/15 - 12:34" "??/??/?? - 03:21"会引发错误。似乎:是罪魁祸首。

为我处理git的客户端没有在提交名称中使用冒号抛出错误,但git Bash for Windows将不允许我使用命令行选项访问提交。我已尝试过':'":"\:,但这些选项均无效。

如果有人在命令行中使用冒号或者有人如何逃脱冒号角色?

*编辑*

以下是git log --oneline

输出的副本
9c34cd9 git merge
f1195c7 09/04/2015 - 15:05
db38edb 09/03/15 - 17:28
c20dea6 09/02/15 - 19:43
e33cd9c 08/28/15 - 00:12
48692a9 08/26/15 - 16:02
8072375 08/25/15 - 19:58
c6babf3 08/25/15 - 12:12
ff6afbf 08/14/15 - 19:43
a0ccc60 08/08/15 - 13:43
9b446ae 08/04/15 - 16:11
34a7dfe 08/02/15 - 21:09
f6005ba 07/31/15 - 16:12
18dc958 07/31/15 - 16:11
3d4c7fb 07/31/15 - 13:48
c6c9ef9 07/25/15 - 22:42
9fd46df 07/25/15 - 15:23
78fa4ed 07/20/15 - 12:27
af399b7 07/16/15 - 17:00
33fbd24 07/14/15 - 17:46
458bb5e 07/14/15 - 12:32
418a92d 07-13-15 - EOD
72b1408 07/13/15 - 17:43
a6bc32f Merge https://github.com/halcyonsystems/amelia
ec27a81         new file:   assets/css/main.css         
new file:         assets/im2ff9bc3 Initial commit

1 个答案:

答案 0 :(得分:1)

从帮助页面(git help diff):

NAME
       git-diff - Show changes between commits, commit and working tree, etc

SYNOPSIS
       git diff [options] [<commit>] [--] [<path>...]
       git diff [options] --cached [<commit>] [--] [<path>...]
       git diff [options] <commit> <commit> [--] [<path>...]
       git diff [options] <blob> <blob>
       git diff [options] [--no-index] [--] <path> <path>

因此,您可以指定两个不同的path选项。如果这些是时间戳,您必须使用正确的语法。见git help revisions

   <refname>@{<date>}, e.g. master@{yesterday}, HEAD@{5 minutes ago}
       A ref followed by the suffix @ with a date specification enclosed in a brace pair (e.g.  {yesterday}, {1 month 2 weeks 3 days 1 hour 1 second ago} or {1979-02-26
       18:30:00}) specifies the value of the ref at a prior point in time. This suffix may only be used immediately following a ref name and the ref must have an existing log
       ($GIT_DIR/logs/<ref>). Note that this looks up the state of your local ref at a given time; e.g., what was in your local master branch last week. If you want to look at
       commits made during certain times, see --since and --until.

这适用于单个文件refname

如果您想要在两次完整回购中真正区分所有更改,请参阅this questionthis question

根据问题更新和评论中的说明进行更新:

由于日期出现在提交消息的第一行,您首先必须在存储库中搜索匹配日期(= commit message),以确定标识相应提交的唯一校验和,就像Wumpus在注释中解释的那样:

git log --oneline --grep='07/25/15 - 22:42'

这适用于您的情况。在提交消息的第一行中找不到日期或搜索字符串的一般情况下,使用:

git log --grep='07/25/15 - 22:42'

如果您有多个分支,并且不知道要在哪个分支上找到相应的提交,请添加--all开关。

在输出中,您将找到校验和,例如3d4c7fb。这是唯一标识符,您可以将其输入git diff。请注意,完整的校验和实际上有点长,但只要它们是明确的,缩写就可以了。通常前四到六位数就足够了,具体取决于过去提交的数量。

正如Wumpus已经说过的那样:太糟糕了。不要将提交日期添加到日志消息中。它是多余的,因此没有意义:git已经为每个提交维护了两个日期:作者日期和提交日期。对于变更集的第一次提交,这两个是相同的。在将一个提交集成到不同分支(并生成新的提交校验和)的操作期间,提交日期表示操作的时间戳,而作者日期保持不变。如上所述,您可以使用filename@{timestamp}引用某个时间戳的文件。请参阅git help revisions以了解您可以使用语法执行的操作的详细信息。它整洁而且非常灵活。