2012-04-12 13 views
0

私は、ちょっとしたことが起こったことを追跡するのが難しい場合があります。私たちには「開発」と「マスター」支店があります。新しい変更が「マスター」から取得され、「開発」に統合された後は、新しいブランチを「マスター」にマージします。GIT - 変更点が未知の点で逆転しました

いつか最後の数週間で、開発の大きな変化が逆転しました。私はそれがどうやって起こったのか、それがどういうものなのか分かりません。とにかく、もし私がファイルの履歴に入り、それを逆転させたマージを見ることができればいいですが、最後のマージが1年前のものであるかのように見せています。

私が考えることができる唯一の実際の方法は、文字通りコミットハッシュを通過し、それらにヘッドをリセットし、私がどこにいるのか見ることです。しかし、それは実用的ではないようだ。これを行う簡単な方法は?

ORには、過去のマージを見て、それによってどのファイルが影響を受けているかを確認する方法がありますか?あなたがブランチをマージするときと同じように、あなたはいつもあなたのコンソールでファイルがどの行で変更されたのかを見ていますが、gitファイルの履歴ではその多くが表示されないことがあります。

これがなぜ起こるのか誰にも分かりますか?私はそれが数回起こるのを見た。時々私は合併するときにそれを捕まえる。私は別のブランチに新しいブランチをマージするのと同じように、私は最後のコミットで1つのファイルだけを変更したことを知っていますが、それは他のファイルのトンを変更します。マスターブランチは大規模なアップデートで約1年遅れているので、マスターからの新しいブランチが作成され、devにマージされ何かの理由で他のすべてのファイルも切り替えられたと思っています。奇妙ですが、私たちはいつもそれをやるので、99%の時間は変更されたファイルのみを変更します。理解できません!

答えて

1

ここにあなたを助けるかもしれないいくつかのgitのトリックがあります。

最初にオフ、git show <commit hash>は、特定のコミットで行われたすべての変更を表示します。 git blame <filename>はあなたにファイルを表示し、どのファイルがどのファイルを変更したのかを一行ずつ表示します。

[コメントするに応じて追加]:

git diff <ref1>...<ref2>は、2つのコミット間の合計の差異が表示されます。これは、マージの場合にはちょっと奇妙です。おそらくあなたがしたいのは、git diff HEAD <merge_parent_1>git diff HEAD <merge_parent_2>の行に沿って、各ブランチがテーブルに持ってきたものを見ることです。 と判明している場合は、git bisectを使用してバイナリ検索を実行し、状況が悪いところでコミットを見つけることができます。

+0

hmm。だから私はそれを試しているし、すべての変更を表示するようではありません。先日から複雑なコミットを行っています(大きなブランチをマージし、プロセス内の複数のファイルを変更/修正しています)。 Gitショーはいくつかの矛盾を示しているだけです。実際には20〜30ファイルが変更/変更されました。私は塔の中でそのコミットを見ていて、それは14のファイルを表示しています - おそらく、実際にはコミット/マージで実際に触れられたファイルですか? - なぜ、どうすればそれで変更されたファイルが見えますか?私は最初のgit merge branchnameを実行したときと同じ出力を得たいと思う。すべての単一ファイルを表示する場所。 – wejrowski

+0

http://stackoverflow.com/questions/5072693/how-to-git-show-a-merge-commit-with-combined-diff-output-even-when-every-changによると、それをマージからまっすぐにしてください。しかし、2つのコミット番号の間で 'git diff'を行うことはできます。 – YenTheFirst

関連する問題