20

svn の使用について私が見逃していることの 1 つは、リビジョン番号の単純な番号付けです。テスト環境にデプロイされたバージョンが特定のコミットの前か後かを簡単に確認できます。

コミットにハッシュを使用するgitでは、コミットが別のコミットの前または後に行われたかどうかを確認する方法は何ですか?

4

7 に答える 7

17

お気づきのように、Git では物事はそれほど単純ではありません。特に、「前」と「後」の定義については、もう少し明確にする必要があります。

リポジトリにコミットしている人々がタイムスタンプを台無しにしないと信じており、両方のコミットが同じブランチにあることが既にわかっている場合は、コミットのタイムスタンプを比較して、どちらが古いかを確認できます。コミットごとに次のコマンドを使用し、結果を比較します。

git log -1 --format='%ci' <commit>

ただし、Git ではタイムスタンプを必ずしも信頼できるとは限りません。Subversion とは異なり、タイムスタンプを生成するジョブを備えた中央リポジトリがないためです。また、2 つのコミットが同じブランチにあることを確認することもできません (ただし、この問題は Subversion にも存在します)。

これらの問題を回避するには、あるコミットが別のコミットの先祖であるかどうかについて話し、それが前か後かではありません。次のコミット グラフでは、B と C は A の祖先ですが、B は C の祖先ではなく、その逆もありません。

B    (master)
| C  (branch)
|/
A    (root)

コミット A がコミット B の祖先であるかどうかを判断するには、次のコマンドを使用します ( git ready の記事に基づく)。

git rev-list <commitA> | grep $(git rev-parse <commitB>)

最初の部分には、コミット A の祖先であるすべてのコミットが一覧表示されます。2 番目の部分はコミット B の完全なハッシュを取得し、そのコミットの祖先リストを検索します。出力が表示された場合、コミット A はコミット B の祖先です。引数を交換して、コミット A がコミット B の祖先であるかどうかを判断します。

この 2 番目の形式は処理が遅くなりますが、あるコミットが別のコミットの祖先であるという絶対的な確信が得られます。

于 2013-01-09T10:51:27.517 に答える
3

各コミットで使用git showして、コミットの日付を見つけます。ハッシュはハッシュにすぎないため、ハッシュを見て順序を決定する方法はありません。

カスタム フォーマット文字列を使用して、必要なものだけを表示できます。詳細については、man ページを確認してください。

git show --format="%ci" <commit>
于 2013-01-08T19:36:33.707 に答える
2

ハッシュ、作成者、日付、およびコメントを示すログからすべてのコミット情報を取得できます。

git log

コミット ログから特定のコミットの日時を取得できます。何かのようなもの:

git log -1 --format="%cd" <commit>

「%cd」は、ログの形式で日付を示します。次のこともできます。

  • %cD: RFC2822 スタイル
  • %cr: 相対
  • %ct: UNIX タイムスタンプ
  • %ci: ISO 8601 形式

そこから、自動化する必要がある場合は、いくつかのスクリプトを使用していくつかの比較を行うことができます。

于 2013-01-08T19:38:20.473 に答える
0

タグを使用すると、次のことができます

git describe --tags

これにより、最後のタグ以降のコミット数がわかります。

于 2013-01-08T19:24:39.890 に答える