問題タブ [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 log --follow と同じ機能を提供する配管コマンドはどれですか?
安定性を向上させるために、現在、Git 関連のすべてのシェル スクリプトをリファクタリングして、 (磁器ではなく)配管コマンドのみを使用するようにしています。特に、 (磁器) への呼び出しを(配管)への呼び出しに置き換えようとしています。git log
git rev-list
ただし、git rev-list
の機能の多くを提供しているように見えますが、のフラグにgit log
相当するオプションが欠落しているようです。これは、名前変更を超えてパスに影響を与えたコミットをリストするように Git に指示します (例: -> )。マニュアルページから:git log
--follow
README
README.md
git log
--follow
名前の変更を超えてファイルの履歴を一覧表示し続けます (単一のファイルに対してのみ機能します)。
git rev-list
man ページをふるいにかけましたが、 と同じことを行うオプションは見つかりませんでしたgit log --follow
。私は何が欠けていますか?それはできますgit rev-list
か?または、別の配管コマンドを完全に使用する必要がありますか?
git - git: パターンに準拠していないすべてのコミットを特定する
で始まらないメッセージですべてのコミットを識別しようとしています[core]
。これらは私の失敗した試みです:
シンプルなアプローチ
- 空の結果
拡張フラグを有効にする
エラーメッセージ
fatal: command line, '^(?!(\[core\]).).+': Invalid preceding regular expression
。否定的な先読みは git grep ではサポートされていないようです。
すべてのコミットのリストをタグ付きのリストと比較します(この回答を参照):
- 結果は
sh: syntax error near unexpected token `('
- 結果は
PS: Git 2.x にアップグレードできないため--invert-grep
、オプションではありません
git - Git --min-children はどうですか?
--min-children=
仮想のgit rev-list パラメータの効果を取得するクリーンな方法はありますか? (もちろん--min-parents
、指定された最小数の子を持つコミットを返す の対応物になります)
私が見ることができる唯一の方法はrev-list --children
、(列数)=(必要な最小子数 + 1) で行を選択することの結果を解析することですが、より良い方法があるかどうか疑問に思います (なぜ git はそのようなものをネイティブにサポートしていないのですか)検索)。
これは、単一の機能ブランチに属するコミットを見つけるのに役立つと思いますが、一般的には良い考えです。
git - gitで2つのコミットの最も古い共通の子孫を見つける方法は?
2 つ (またはそれ以上) のコミットがある場合、それらを結合する最も古いマージを見つけたいと考えています。git merge-base
(最も若い共通の祖先を見つける)の反対のようなもの。私が探しているコミットは、開始コミットの若い子孫になることに注意してください。
つまり、特定の 2 つのコミットをマージしたマージ コミット (同じファイルへの変更が発生した場所) を調査したいと考えています。
git - 「git rev-list origin..HEAD」は何を返すべきですか?
git-rev-list man ページには、次のコマンドが表示されます。
ただし、最初のコマンドを実行すると、次のエラーが発生します。
「origin」は、次のリモートを指します。
コマンドの使い方が間違っていませんか? また、rev-list コマンドはコミットを入力として受け取ると思っていたので、man ページでリモートである「origin」が使用されている理由がわかりません。私は何を誤解しましたか?
git - git Blame -S の使用方法
revs-file
の引数の形式は何git blame -S
ですか?
次の出力で実行しようとしましたgit rev-list
が、非難はすべての行をHEAD
コミットに属性付けます。
git blame -S <(git rev-list HEAD~50 HEAD) $file
それが問題だった場合に備えて、<(git rev-list ... | tac)
逆に実行しようとしましたが、同じ出力が生成されるようです。revs-file
目標は、 の各行を と の間のコミットのせいに$file
することです。デフォルトは、同じ行がすべてのコミットに存在する場合です。HEAD~50
HEAD
HEAD~50
git - rev-list と diff の対称/非対称の表記異常
git diff
vs. git rev-list
orの表記の違いの根拠 (ある場合) を理解しようとしていgit log
ます。
説明:
以下で説明するように、各コマンドの機能を理解しています。Git が 2 つの異なるコマンドで同じ表記法を使用して、一方が直感的に (IHO) 他方と反対になる理由についての説明を探しているだけです。
git ログ/リビジョン リスト
logやrev-listで、分岐した枝の両側(左右対称)を見たい場合は、ドット3つ( ...
)で表記します。例えば、
2 つの点 ( ..
) は右側 (非対称) のみを示します。例えば、
git差分
ただし、git diff では、2 つのドット ( ..
) は対称的な diff (私の言葉) を示します。つまり、リストされている 2 つの正確なコミット間の差分を示します。
aaaaa と bbbbb のツリー間の差分を示します。
3 つのドット ( ...
) は非対称差分を示します。つまり、2 つのコミットのマージベースと 2 番目のコミットの間の差分を示します。例えば、
00000 と bbbbb のツリーの差分を表示します。