問題タブ [git-rev-list]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
git - Git コミット範囲のダブルドット ".." とトリプルドット "..." の違いは何ですか?
一部の Git コマンドはコミット範囲を取り、1 つの有効な構文は 2 つのコミット名を 2 つのドット..
で区切るもので、別の構文は 3 つのドットを使用します...
。
2つの違いは何ですか?
git - データベース内のすべてのgitオブジェクトを一覧表示するにはどうすればよいですか?
リポジトリ内のすべてのオブジェクトのSHA1の生のリストを取得するためのより良い方法はありますか
ls .git/objects/??/\*
?
cat .git/objects/pack/*.idx | git show-index
私は知ってgit rev-list --all
いますが、それはによって参照されるコミットオブジェクトのみをリストし、などによって作成された参照されていないオブジェクトを含むすべて.git/refs
を探しています。git-hash-object
git-mktree
git - git-rev-list の順序
git-rev-list は、返されるコミットをどのように順序付けますか?
私は主に、開発の並行ブランチで行われ、その後メイン ブランチにマージされるコミットについて言及しています。コミットは日付順に並べられているようには見えませんが、コミットは過去または将来のさまざまな時点から選択できるため、これは理にかなっています。
たとえば、ここにいくつかの歴史がありgit-log
ます...
これは、rev-list による同じ履歴の出力です。
rev-list コマンドは、最初の親をリストするか、n 番目の親のコミット グラフに降りるかをどのように決定しますか? たとえば、上記の (1) を見た後、rev-list は 2 番目の親 (2) に降りてきます。ただし、(3) を見た後、最初の親 (4) に降りてきます。この動作は明確に定義されていますか?
git - 複数の特定のコミットを含む Git コミットを見つける
一般的な問題:一連のコミットが与えられた場合、それらすべてのコミットを先祖として持つコミットのリスト、または関連して、それらすべてのコミットを含む最初のコミットを見つけるにはどうすればよいですか。
git branch --contains <commit>
セット内のすべてのコミットに対して返されるブランチを探すことで、コミットを含むブランチ (同様にタグ) を見つけることができますが、オプションgit rev-list
はありません。事実上、通常の引数を と組み合わせて、出力を、それらのいずれかではなく、リストされているすべてのコミットを含むコミットに制限する--contains
方法を探しています (これが正常に機能する方法です)。--contains
git rev-list
--contains
具体例:a
コミット, b
,が与えられた場合c
、その祖先に 3 つのコミットすべてがある最初のコミットを見つけるにはどうすればよいですか?
たとえば、以下のツリーで、X とマークされたコミットを見つけるにはどうすればよいですか?
でできる魔法がいくつかあると思いますがgit rev-list
、おそらく<commit1>...<commit2>
記法が関係していますが、それ以上のことはできません。
git - git で、いくつかのタグ以降のすべてのタグを一覧表示します
タグを使用して、リリース バージョンを識別し、タスクの「開発完了」コミットを識別しています。を実行するgit tag
と、次のようなリストが表示されます。
すべてのタグがブランチのコミットを指していると仮定するとmaster
、いくつかのタグ以降のすべてのタグを一覧表示する方法はありますか? たとえば、v0.1.2
リリースに含まれるすべてのタスクのリストを生成するには、次のようなものを探しています (実際のコマンドではありません)。
次のような出力を取得します。
これを行う方法はありgit tag
ますか?
これを行う方法はありgit rev-list
ますか?
(または他のgitコマンド?)
アップデート
回答とコメントに基づいて、私が現在使用しているものは次のとおりです。
2回目の更新
新しく選択された回答。これはまさに私が最初に探していたものです。はるかにエレガント。
git - Git リポジトリの縮小 - コミットではなくパケット内のオブジェクト
約 2 GB の Git リポジトリを縮小しようとしています。
ProGit ブックの第 9 章 (9.7) の「オブジェクトの削除」セクションに従っています: http://git-scm.com/book/en/Git-Internals-Maintenance-and-Data-Recovery
を実行してからandコマンドを実行すると、約 118MB のファイルが見つかりましgit gc
た。私のレポにある必要はまったくありません。永遠に破壊する必要があります。git verify-pack
git rev-list
.tar
しかし、どのコミットがそのファイルを使用したかを調べようとすると、何も得られません:
これは、ファイルがリポジトリ履歴にないということですか? その場合、そのままにしておくことができますか、それともオブジェクトとして押し上げられますgit push
か?
もしそうなら、どうすればそれを取り除くことができますか。
git - Gitコミット範囲の「A..B」(ダブルドット)と「--right-only A...B」(フィルタリングされたトリプルドット)?
比較Git コミット範囲のダブルドット ".." とトリプルドット "..." の違いは何ですか? 、より頻繁に役立つ質問です。
以下が と同じ一連のコミットを生成するかどうかを明確にしたいと思いますgit log A..B
。
それらは、同じことを達成するためのより回りくどい方法のように思われます。
最初の動機は、これらのコマンドの意味をより深く理解することでした。これには、すでにチェリーピックされたコミットを無視することが含まれます。
この質問の拡張は、この種の「一方的な」チェリーピック除去を行うために、対称差 (つまり、トリプル ドット) が必要な理由を尋ねることです。たとえば、チェリー ピックの修正を含む、B での一意のコミットを見つけるには、次のような簡単なことはできないはずです。
それは、すべての A コミットをA..B
. (つまり、この架空のコマンドでは、git は、チェリー ピッキング ロジックを適用しようとする前に、A に関連するものをすべて破棄します。)
git - git rev-list と git show を組み合わせる
現在、ブランチで行われたコミットを確認するには、次のことを行います。
ただし、これはコミットを新しい順にリストします。最初のコミットから最新のコミットまでレビューしたいと思います。この順序でコミットハッシュを取得するには、次を使用できます
しかし、これをshowまたはdifftoolに渡す方法を誰か教えてもらえますか?
git - 特定のブランチから master へのマージが発生しましたか?
Git リポジトリ内には、develop と master という 2 つの主要なブランチがあります。新機能の開発は、develop のブランチで行われ、デプロイのために master にマージされます。
特定の時間以降、開発からマスターへのマージが発生したかどうかを判断したいと思います。私は実際のコミット自体にはあまり興味がありません。開発からの何かがマスターにマージされていることだけです。
私が試してみました:
git rev-list --merges origin/develop..origin/master --since <date> | wc -l
マージがあることを知っている期間ですが、常にゼロを返すようです。
アップデート
また、私はそれを段階的に構築しようとしました。で始まります:
git rev-list --merges origin/master --since <date>
開発ブランチと存在する可能性のあるホットフィックス ブランチの両方から、すべてのマージをマスターに取得します。結果に何も得られないのは、「origin/develop」制約を追加したときだけです。