Ошибка с двоеточием в имени коммита git

Команда git diff "??/??/15 - 12:34" "??/??/?? - 03:21" выдает ошибку. Кажется, что : виновник

Клиент, который обрабатывает git для меня, не выдавал ошибку и не использовал двоеточие в имени коммита, но git Bash для 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 ответ

Со страницы помощи (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,

Если вы хотите действительно изменить все изменения в вашем полном репо между двумя разами, посмотрите этот вопрос и этот вопрос

Обновление на основе обновления вопроса и пояснений в комментариях:

Поскольку даты появляются в первой строке сообщения о коммите, вам сначала нужно найти соответствующую дату (= сообщение о коммите) в вашем хранилище, чтобы определить уникальную контрольную сумму, которая идентифицирует соответствующий коммит, как объяснил Вумпус в комментариях:

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

Это должно работать в вашем случае. В общем случае, когда дата или строка поиска не могут быть найдены в первой строке сообщения фиксации, используйте:

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

Если у вас есть несколько веток и вы не знаете, в какой ветке должен быть найден соответствующий коммит, добавьте --all переключатель.

На выходе вы найдете контрольную сумму, например 3d4c7fb, Это уникальный идентификатор, который вы можете затем ввести в git diff, Обратите внимание, что полная контрольная сумма на самом деле немного длиннее, но сокращения хороши, если они однозначны. Обычно достаточно первых четырех-шести цифр, в зависимости от количества совершенных в прошлом коммитов.

Как уже сказал Вумпус: это ужасно. Не добавляйте дату фиксации к сообщению журнала. Это избыточно и потому бессмысленно: git уже поддерживает две даты для каждого коммита: дату автора и дату коммита. Для первого коммита ревизии эти два идентичны. Во время операций, которые интегрируют одну фиксацию в другую ветвь (и генерируют новую контрольную сумму фиксации), дата фиксации представляет временную метку операции, в то время как дата автора остается прежней. Как я объяснил выше, вы можете обратиться к файлу в определенное время с помощью filename@{timestamp}, Увидеть git help revisions узнать о деталях того, что вы можете сделать с помощью синтаксиса. Это аккуратно и довольно гибкий.

Другие вопросы по тегам