2016-12-08 4 views
0

いくつかのファイルを削除Gitの自動マージは、私は(gitkから撮影)この画像のように、リポジトリの歴史を持っている

は、(a)と(b)はコミット共通の祖先(現在マークされている行)。

コミット(a)「柔軟なプリアンブルをコミットする」では、いくつかのファイルがリポジトリに追加されました。ファイルは、この特定のgit-commitのソースツリーを見るときにrepoで見つけることができます。

マージコミットである(b)では、(a)のファイルが突然リポジトリから削除されました。

TortoiseGitでは、プル操作後にマージが自動的に行われました。

残念ながら、私はここで何が起こったのか把握できません。ファイルが削除されたなど、ユーザーは何を間違えましたか?または、この星座でファイルが削除されるのは普通ですか?

ファイルは、最初のマージ後に残っていました(2016-12-01 19:59:52の青とグレーの線)。

答えて

1

コミット中のいずれかの親であるbは、これらのファイルを削除したか、そのファイルがその親に存在しませんでした。 Gitには2つのバージョンのリアリティがあります。コミットaに由来する1つのバージョンは、いくつかの新しいファイルが追加されたことです。他のバージョンでは、これらのファイルは存在しないと言われています。マージ後に可能なバージョンは1つだけです。 Gitがファイルが存在しないバージョンを選択した理由は、マージのメインブランチ(つまり別のブランチがマージされていたブランチ)にこれらのファイルが含まれていなかった場合、Gitがそのバージョンのものを優先する可能性があります。いずれの場合においても

、あなたは、単に彼らが経由して存在していたところコミットからそれらをチェックアウトして再度ファイルを追加することができますマークに()A(前)コミット、どうやら

git checkout <SHA-1> -- filename 
+0

は、ファイルが存在しませんでした(後でコミット時に追加された)。 (b)をマージして、両方のブランチからの変更(赤線と灰色→紫線)を結合してはいけません。紫色の線では、いくつかのファイルが追加され、赤線では関連性のないファイルがいくつか変更されました。 –

+0

@MaximilianMatthé私はGitでこのようなことが何度も起こるのを見ました。マージは2つの物語を組み合わせるものと考えてください。ストーリー1にはたくさんのファイルがあるという。ストーリー2は、彼らがそこにいないということを言っていない。これは和解する必要があります。 –

関連する問題