回答:
The command is kept primarily for historical reasons; fingers of many people who learned Git long before git log was invented by reading Linux kernel mailing list are trained to type it.
したがって、ドキュメントはのgit log
代わりにを使用することを推奨していgit whatchanged
ます。この最後のコマンドはgit logの--no-mergeオプションも使用しているため、同じ結果が出力されます。
git whatchanged
現在の最新バージョン2.21.0で非推奨になりました。すべてのgit whatchanged
達成はによって達成することができgit log
、それは歴史的な理由でのみ保存されます。詳細を見るgit-scm.com/docs/git-whatchanged/2.21.0
以前の提案にはいくつかの欠点があります。基本的に、私はと同等のものを探していましたcvs diff -D"1 day ago" -D"2010-02-29 11:11"
。どんどん情報を集めているうちに解決策を見つけました。
私が試したこと:
git whatchanged --since="1 day ago" -p
ここから
ただし、これにより、1つのファイルに複数のコミットがある場合でも、コミットごとに差分が得られます。「日付」はgitで少し緩い概念であることを知っています。これを行うにはいくつかの方法があるはずだと思いました。
git diff 'master@{1 day ago}..master
警告warning: Log for 'master' only goes back to Tue, 16 Mar 2010 14:17:32 +0100.
を表示し、すべての差分を表示しません。
git format-patch --since=yesterday --stdout
私には何も与えません。
revs=$(git log --pretty="format:%H" --since="1 day ago");git diff $(echo "$revs"|tail -n1) $(echo "$revs"|head -n1)
どういうわけか動作しますが、複雑に見え、現在のブランチに限定されません。
最後に:
git diff $(git rev-list -n1 --before="1 day ago" master)
仕事とには思わ同様のことを行うためのデフォルトの方法私は思ったよりも複雑ものの、。おかしなことに、git-cvsserverは "cvs diff -D"をサポートしていません(それがどこかに記載されていない場合)。
git rev-list
、私が目にしていた非常によく似た問題を解決するのに大いに役立ちました。
git diff 'master@{1 day ago}..master
構文手段は、「チェックREFLOG分岐がどこから出て、姿をmaster
ポイントに使用し、あなたのローカルリポジトリに 1 day ago
」。具体的には、現在のブランチの実際のコミット履歴を使用しませんmaster
。これが本当に望んでいることはめったにありません。
「日付」はgitの緩い概念です。コミットには、誰かが実際にコミットをリポジトリーにプル/コミットする前のかなり前の作成者日付が含まれます。また、コミットがリベースされ、明らかに新しいコミットの上に更新される場合もあります。
コミットにはコミット日付もあり、コミットがリベースまたは何らかの方法で修正された場合に更新されます。これらのコミットは、時系列のようなものになる可能性が高くなりますが、コミッターが自分のコンピューターに正しい時刻を設定していることに翻弄されています。中央リポジトリのマスターブランチにマージされます。
おそらくあなたの目的に最も役立つのは、問題の特定のリポジトリーのreflog日付です。ブランチごとのreflogを有効にしている場合(を参照git config core.logAllRefUpdates
)、ref@{date}
構文を使用して、ブランチが特定の時間にあった場所を参照できます。
例えば
git log -p master@{2009-07-01}..master@{now}
次のような「あいまい」な説明を使用することもできます。
git log -p "master@{1 month ago}..master@{yesterday}"
これらのコマンドは、作成者とコミット日付に基づいて実際に「古い」かどうかに関係なく、リポジトリの特定のブランチに「出現」したすべてのコミットを表示します。
ブランチごとのreflogはリポジトリに固有であるため、クローンでlogコマンドを実行していて、(たとえば)1か月プルしない場合は、先月のすべての変更を一度にプルします。その後、先月のすべての変更が@{1 hour ago}..@{now}
範囲内に表示されます。人々がプッシュする「中央」リポジトリでlogコマンドを実行できる場合、それはあなたが望むことをするかもしれません。
@{time spec}
構文は常にローカルreflogを参照することに注意してください。実際のコミット履歴(DAG)は参照しません。違いを理解しない場合は、この構文を使用しないでください。
git diff --stat @{2013-11-01}..@{2013-11-30}
または
git diff --stat @{2.weeks.ago}..@{last.week}
@{time spec}
構文は常にローカルreflogを参照することに注意してください。実際のコミット履歴(DAG)は参照しません。違いを理解しない場合は、この構文を使用しないでください。
たぶん
$ git format-patch --committer=<who> --since=yesterday --stdout
あなたが欲しいものはありますか(「--stdout」の有無にかかわらず)?
一般的な解決策は次のものを使用することだと思います:
git rev-list -n1 --first-parent --until=<a date string> <a ref>
--first-parentがないと、後でマージされたa ref
が現時点ではマージされていないブランチからコミットを取得する可能性がありa date string
ます。
ここでは--children
、grep
代わりにandの代わりに使用します-n1
:
mlm_git_ref_as_of() {
# # Examples #
#
# Show all commits between two dates:
#
# git log $(mlm_git_ref_as_of '2012-05-21 09:00:00-0400')..$(mlm_git_ref_as_of '2012-05-21 17:00:00-0400')
#
# Show diffs of all commits between two dates:
#
# git diff $(mlm_git_ref_as_of '2012-05-21 09:00:00-0400')..$(mlm_git_ref_as_of '2012-05-21 17:00:00-0400')
local as_of="$1"
local ref="${2:-HEAD}"
# Get the most recent commit (--children, grep -v ' ') that was on
# the given branch ($ref, --first-parent) as of a given date
# ($as_of)
git rev-list --children --first-parent --until="$as_of" "$ref" | grep -v ' '
}
私は精通していないしgit whatchanged
、このQ&Aを読む前に、それは私にとって非常に異なる結果を与えるので、私はそれがやっているかわからないんだけど。
特定の日付以降のすべての変更の差分を取得できる別の簡単な方法はX
、その日付以降に発生した最初のコミットを単純に見つけてから、
git diff X
これには、新しいクローンのreflogエントリに依存しないという利点があります。
git diff <reference>@{n}..
git log <reference>@{n}..
のソリューション
git-format-patchを使用してパッチ(diff)を準備し、電子メールで送信することもできます。
オプション[since]または[revision range]を使用して、コミット範囲を指定します。
ブランチで日付から日付へのGitファイルの変化を監視するには、次の式を使用します。
式:
git checkout <branch>
git pull
git diff --stat @{fromDate}..@a{toDate}
日付はYYYY-MM-DD形式であることに注意してください。
git diff --stat @{2019-08-20}..@a{2019-08-21}
特定の時間範囲で特定のファイルの変更を確認したい場合(コードでdiffを見る)、現在のファイルをナビゲートするだけです。
例:
git diff @{2019-01-01}..@{2019-01-02} ~/dev/myApp/package.json
私はそれを行う方法で投げます:
git log
日付のためにあなたは現在のブランチのコミットハッシュを与えます。次にgit diff 8fgdfg8..565k4l5
、ファイルごとに集計された適切な違いが得られるようなものを使用します。これが役立つことを願っていますが、あまりテストされていません