1. ホーム
  2. git

[解決済み] 行が削除されたときのコミットを見つけるには?

2022-10-10 11:57:21

質問

Git リポジトリのファイルに、削除された行があります。削除されたテキストとそのファイルがあることは知っていました。 git log -S'missingtext' /path/to/file .

しかし、戻ってきたのは欠落していたテキストを含む行を追加したコミットだけでした。テキストは HEAD には存在せず、それを追加したコミットは私のブランチに存在していたので、私のブランチの履歴にあるコミットのいずれかがそれを削除したはずだとわかっていましたが、それは表示されていませんでした。

手動で検索した結果、その行はマージの競合を解決する際に誤って削除されたことが判明しました。ですから、私は不思議に思っています。

  1. pickaxe が行を削除したコミットを見つけられなかったのはこのためでしょうか。
  2. どうすれば "missingtext" が削除された場所を、履歴を手動で掘り起こすことなく見つけることができたのでしょうか?

1 についてのどんな洞察も素晴らしいでしょう (私は次のように仮定しました。 git log -S が私の答えを与えてくれると思っていました)、しかし、私の本当の質問は、将来これを避けることができるようにしたいので、#2 です。

どのように解決するのですか?

git log -c -S'missingtext' /path/to/file

git log は、デフォルトではマージコミットの diff を表示しません。試しに -c あるいは --cc のフラグがあります。

もっと議論・説明をしてください。

https://git-scm.com/docs/git-log

ナブルドットコム

git-logのドキュメントより。

-c このオプションを指定すると、マージコミットの差分出力は、親とマージ結果のペアごとの差分ではなく、それぞれの親からマージ結果までの差分を同時に表示します。 親と結果のペアごとの差分を表示するのではなく、同時に表示します。 を一度に表示するのではなく、それぞれの親からマージ結果までの差分を同時に表示します。さらに、すべての親から変更されたファイルだけがリストアップされます。 のみをリストアップします。

--cc このフラグは -c オプションを暗示し、さらにパッチの出力を圧縮します。 親にあるコンテンツが 2 つのバリエーションしかなく、 マージ結果がそのうちの 1 つを選択するような、興味のない hunk を除外することで、 パッチ出力をさらに圧縮します。 を修正なしで選びます。