2

ここで私は何をしましたか:

  • マスターから開発ブランチを作成しました。
  • いくつかのファイルを変更してコミットしました。
  • --no-commitパラメータを使用して開発ブランチを master にマージしました。
  • git reset --hard開発ブランチで変更されたいくつかのファイルで実行します。結果として、マスター ブランチには開発ブランチからのいくつかのオブジェクトのみが含まれます。つまり、開発の変更を部分的にマージしました。
  • master に変更をコミットしました。
  • しばらくして、マスター ブランチが他の開発者によって更新され、開発ブランチを更新するためにマスター ブランチをマージしました。

前回のマージで master にコミットしていない開発オブジェクトが、master からのファイルによって上書きされるという事実を受け入れる準備ができていました。しかし、の出力ではgit log --follow dev-modified-file.txt、開発の変更を上書きしたコミットが表示されません。

git log --follow dev-modified-file.txt私の開発ブランチで実行 すると、開発の変更を伴う必要なコミットが表示されます。しかし、その変更を元に戻すコミットを見ることはできません (実際にはそのようなコミットはありません) が、dev-modified-file.txt開発コードを追加するコミットがあるにもかかわらず、私の作業ツリーにはファイルのマスター バージョンが含まれていますが、そのコードを削除するコミットはありません。

なんで?

そして、マスター ブランチのコードがどのようにして私の開発ブランチに忍び込み、痕跡を残さなかったのでしょうか?

PS私の説明が不明確な場合は、コメントで質問してください。この投稿を説明し、それに応じて修正します.

編集:マスターを開発にマージした後、マスターと開発ブランチの違いがわかりません(省略された変更はなくなりました!)そして、開発ブランチでそれを担当するコミットが表示されません!

戦略の統合に関係している可能性があると思います...しかし、どのように?ご覧のとおり、開発ブランチのログは次のようになります。

  • ファイルに変更を追加しました — 作業フォルダー内のファイルにその変更が含まれています。
  • マスター ブランチを開発ブランチにマージしました。多くのコミットが開発ブランチに送られ、編集したファイルはマスター ブランチで 1 つになりました。

マージ後にファイルに変更を追加したところ、変更が跡形もなく消えてしまいました!

4

1 に答える 1

1

git log <filename>デフォルト モードでによって実行される履歴の単純化により、探している変更が表示されない可能性がかなり高くなります。この単純化は、コンテンツを削除するgit log <filename>コミットを見つけるのにあまり役に立ちません。

git log --follow --simplify-merges dev-modified-file.txt代わりに使用してみてください。これにより、履歴単純化アルゴリズムが変更され、気にする可能性のある変更を単純化する際の積極性が低くなります。履歴が十分に短く、gitk がインストールされている場合は、履歴を参照して探しているものを見つけることができる場合があります。gitk --simplify-merges dev-modified-file.txt

于 2013-11-14T22:06:30.647 に答える