Як я переглядаю всі зобов’язання за певний день?


188

Я вже розглядав відповідні документи з git-scm.com та gitref.org , але не можу цього зрозуміти.

Скажімо, я хочу отримати всі комісії за вівторок, 12 листопада 2013 року. Використовуючи існуючий репо-приклад, я знаю, що я маю коміти в цей день, а також здійснює день раніше та післязавтра.

З 2013-11-11і2013-11-12

Усі наступні дати мені зобов’язання як для 11, так і для 12 листопада:

  • git log --after="2013-11-11" --until="2013-11-12"
  • git log --since="2013-11-11" --until="2013-11-12"
  • git log --after="2013-11-11" --before="2013-11-12"
  • git log --since="2013-11-11" --before="2013-11-12"

З 2013-11-12лише

Все наступне не дає мені жодних зобов'язань:

  • git log --since="2013-11-12" --until="2013-11-12"
  • git log --since="2013-11-12" --before="2013-11-12"
  • git log --after="2013-11-12" --until="2013-11-12"
  • git log --after="2013-11-12" --before="2013-11-12"

З 2013-11-12і2013-11-13

Як і очікувалося (від результатів вище 2013-11-11та 2013-11-12вище), всі наступні результати дають мені результати як 12, так і 13 листопада:

  • git log --since="2013-11-12" --before="2013-11-13"
  • git log --after="2013-11-12" --before="2013-11-13"
  • git log --since="2013-11-12" --until="2013-11-13"
  • git log --after="2013-11-12" --before="2013-11-13"

... і так далі, і так далі. Я відчуваю, що я перепробував всі можливі комбінації since, after, before, і , untilале до сих пір не можуть знайти відповідь, і я не розумію , є чи ці варіанти , що включають або виключають, оскільки вони , як видається, включно , якщо ці дві дати відрізняються, але ексклюзивно, якщо вони в один і той же день. Я щось пропустив / що я роблю неправильно ?!


8
Я виявив, що git починає з / після / до / до того, як обробляти себе дуже дивно, тому я не знаю відповіді, але ви спробували вказати дату + час (наприклад, --since = "2013-11-12 00:00 ")? Крім того, чи мають (будь-які) ваші зобов’язання різні дати порушника та автора?
Іван Варфоломій

Ти маєш це! Вказання відпрацьованого часу. Мені навіть не спало на думку спробувати це з часом. Дякую! Що стосується дат для комітерів та авторів - під час цих дат не було застосовано патчів, так що це не було.
3cheesewheel

Мені здається, що "git log --boundary" повинен зробити це для вас, щоб "git log --boundary --after =" 2013-11-12 "--before =" 2013-11-12 "'показував точно одна фіксація (та, на яку ви думаєте, що це буде :)).
qneill

Відповіді:


231

Дякую Івану Варфоломію!

Відповідь - вказати час, наприклад git log --after="2013-11-12 00:00" --before="2013-11-12 23:59"


12
Приємно. Однак ця команда опускає зобов’язання між 23:59 та 00:00 наступного дня, тому git log --after="2013-11-12 00:00" --before="2013-11-13 00:00"краще. Я вважаю, що gitk --since="2013-11-12 00:00" --until="2013-11-13 00:00" &це також спрацює, якщо у вас встановлений gitk.
HelloGoodbye

6
В git 2.13.0. git log --after="2017-07-25" --before="2017-07-26"дає для мене дійсні результати.
powlo

1
Це для поточної перевіреної галузі? Як бачити всі гілки?
nawfal

Це правильна відповідь, але я все ще спантеличений цим і відправив цей наступне запитання: stackoverflow.com/questions/59691065 / ...
bgoodr

28

Я зазвичай перевіряю свій журнал git і бачу, над чим працював у певний день, і оновлюю свій графік роботи, виходячи з цього, але болі в дупі набирають повну дату у форматі ISO, тому я просто роблю це так

git log --after=jun9 --before=jun10

і я додаю --authorдо друку лише свої коміти

git log --since=jun9 --until=jun10 --author=Robert 

Це друкує комітети, які траплялися останнього 9 червня (так для 2016 року в цьому випадку, а не для 2015 чи 2014 року тощо).

В --since/--afterі --until/--beforeпараметри можуть також приймати такі речі , як 3 days ago, yesterdayі т.д.


Просто не працює, нічого не видає. Я щось пропускаю? Чи потрібно вказати галузь?
Аурімас

1
@Aurimas Ну, не впевнений, що пішло не так у твоєму кінці. Якщо ваші значення sinceта untilзначення невірні, ви точно не отримаєте результатів. git logСпершу скористайтеся спочатку та спробуйте вибрати значення sinceта untilзалежно від побаченого. Ніякої філії чи нічого особливого не потрібно. Не впевнений, з якої версії Git ця функція доступна. Переконайтеся, що у вас також є остання версія.
Коханій Руберт

6
Мені довелося скористатися пробілами:git log --after="may 2" --before="may 3"
Коннор Кларк,

15

Нічого поганого у прийнятій відповіді (яку я підтримав), але ... ми тут для науки!

Висновок нижче можна розширити / налаштувати за допомогою pretty=format:<string> заповнювачів :

git log --pretty='format:%H %an %ae %ai' | grep 2013-11-12

Не на 100% несприйнятливий до помилок, оскільки одна і ту ж рядок могла бути введена користувачем. Але прийнятний залежно від того, які заповнювачі використовуються. Наприклад, фрагмент, описаний вище, не відбудеться.

Можна також просто розібрати все , git logщоб JSONі споживати / маніпулювати свої дані до своїм змістом серця. Перевірте https://github.com/dreamyguy/gitlogg , і ніколи не озирайтеся!

Відмова: це один із моїх проектів.


10

Я створив псевдонім git для цієї конкретної мети:

commitsAtDate = "!f() { git log --pretty='format:%C(yellow)%h %G? %ad%Cred%d %Creset%s%C(cyan) [%cn]' --decorate --after=\"$1 0:00\" --before=\"$1 23:59\" --author \"`git config user.name`\"; }; f"

Використання:

git commitsAtDate 2017-08-18

1
Ви також можете вказати відносні дати для цього псевдоніма, тобто git commitsAtDate yesterday, 2 days agoі т.д.
voiger

-2

Цей скрипт відображає доступний діапазон дат комісій для поточного репо, а потім запитує дату, з якої ви хочете переглянути комісії. Він відображає коротку SHA та повну SHA, автора, часову позначку фіксування та коментарі в одиничних лапках.

Сценарій продовжує запитувати дати, поки ви не натиснете клавішу Enter або Control-D.

Користувачі Mac: потрібна дата gnu.

#!/bin/bash

COMMITS=`git log --abbrev-commit --pretty="format:%h %H %ai" | sort -k3 -k4`
FIRST=`echo "$COMMITS" | head -n 1`
LAST=`echo "$COMMITS" | tail -n 1`
echo "First commit: $FIRST"
echo "Last commit: $LAST"
printf "Date to search for commits: "
read DATE
while [[ "$DATE" ]]; do
  NEXT_DATE=`date +%Y-%m-%d -d "$DATE +1 day"`
  #echo "Searching for commits from $DATE to $NEXT_DATE"
  echo `git log --after="$DATE" --before="$NEXT_DATE" --pretty="format:%h %H %an %ci '%s'"`
  printf "\nDate to search for commits: "
  read DATE
done

Я назвав сценарій commitsOnDates, і ось він в дії. Перша дата, яку я ввожу, не має жодних зобов'язань, тому відповідь - це лише порожній рядок:

$ commitsOnDates
First commit: 375bcfb 375bcfbbf548134a4e34c36e3f28d87c53b2445f 2015-08-03 13:37:16 -0700
Last commit: 1d4c88c 1d4c88ce6a15efaceda1d653eed3346fcae8f5e6 2018-10-13 21:32:27 -0700
Date to search for commits: 2015-08-13


Date to search for commits: 2015-08-03
375bcfb 375bcfbbf548134a4e34c36e3f28d87c53b2445f Mike Slinn 2015-08-03 13:37:16 -0700 'this is a comment'

Date to search for commits: 2018-10-13
1d4c88c 1d4c88ce6a15efaceda1d653eed3346fcae8f5e6 Mike Slinn 2018-10-13 21:32:27 -0700 'a comment' 64d6e16 64d6e16338657b82c91ac94bea8ebf7b80dc4c28 Mike Slinn 2018-10-13 18:28:41 -0700 'nother comment' d5eb26e d5eb26e49fc9dceee9b9f5a2d8fa052bff2cfbbc Mike Slinn 2018-10-13 18:16:20 -0700 'no comment' d8a4992 d8a4992df208ba5efb50728311820bdad5ba5332 Mike Slinn 2018-10-13 12:02:00 -0700 'commented'

Date to search for commits:
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.