[解決済み】リポジトリ内のすべてのGitとMercurialのコミットで、特定の文字列を検索するには?
2022-03-29 12:39:14
質問
Gitリポジトリにいくつかのブランチとダングリングコミットがあります。このようなコミットに対して、特定の文字列で検索をかけたいのですが。
履歴にあるすべてのコミットのログを取得する方法は知っていますが、これにはブランチやダングリングブロブは含まれず、HEADの履歴だけが含まれます。私はそれらをすべて取得し、誤って配置された特定のコミットを見つけたい。
また、乗り換えを検討しているため、Mercurialで行う方法も教えていただきたいです。
どのように解決するのですか?
ダングリングコミットを確認するには
git log -g
.
-g, --walk-reflogs
Instead of walking the commit ancestry chain, walk reflog entries from
the most recent one to older ones.
つまり、コミットメッセージの中でぶら下がった特定の文字列を見つけるためにこれを行うことができます。
git log -g --grep=search_for_this
また、特定の文字列の変更を検索したい場合は、つるはし検索オプションの "-S" を使用することができます。
git log -g -Ssearch_for_this
# this also works but may be slower, it only shows text-added results
git grep search_for_this $(git log -g --pretty=format:%h)
Git 1.7.4では Gオプションを追加しました。 G<regexp> を渡すと、 <regexp> を含む行がいつ移動されたかを見つけることができるようになりますが、-S ではできません。-Sは、その文字列を含む行の総数が変化したとき(つまり、文字列の追加や削除)しか教えてくれません。
最後に、gitk を使ってダングリングコミットを可視化することができます。
gitk --all $(git log -g --pretty=format:%h)
そして、その検索機能を使って、置き忘れたファイルを探します。これらはすべて、見つからないコミットが "期限切れ" になっておらず、ガベージコレクションされていないことを前提としています。これは、30 日間コミットが空白になっていたり、reflog を期限切れにしていたり、期限切れコマンドを実行した場合に起こる可能性があります。
関連
-
[解決済み] Git で直近のローカルコミットを取り消すには?
-
[解決済み] Gitブランチをローカルやリモートで削除するには?
-
[解決済み] git pull」と「git fetch」の違いは何ですか?
-
[解決済み] Git リポジトリを以前のコミットに戻すにはどうすればよいですか?
-
[解決済み] 現在のGit作業ツリーからローカル(未追跡)ファイルを削除する方法
-
[解決済み] Git リポジトリでのマージの衝突を解決するには?
-
[解決済み] リモート Git リポジトリの URI (URL) を変更するには?
-
[解決済み] git rebase の取り消し
-
[解決済み] Git リポジトリで削除されたファイルを検索して復元する方法
-
[解決済み] すべてのGitブランチを取得する方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】ファイルのアンリンクに失敗しました。もう一度試してみるべきですか?
-
git push reports an error ! [リモート拒否] master -> master (受信前のフックが拒否されました)
-
[解決済み] git が「Pull is not possible because you have unmerged files」と表示するのはなぜですか?
-
[解決済み] 複数のコミットをチェリーピックする方法
-
[解決済み] git initを2回実行すると、リポジトリが初期化されますか?それとも既存のリポジトリを再初期化しますか?
-
[解決済み] Gitのプッシュエラーです。Unable to unlink old (Permission denied)です。
-
[解決済み] エラーです。リベースを使用してプルできません。あなたはステージングされていない変更を持っています
-
[解決済み] Gitのコミットの差分や内容を特定の単語でgrepする方法
-
[解決済み] コマンドラインを使用してコミットメッセージを検索するには?重複
-
[解決済み】コミットメッセージでGitリポジトリを検索する方法とは?