2016-06-27 10 views
0

私はGitとGitHubを初めて使ってプロジェクトに貢献しようとしたので、私はフォークを作った。プロジェクトにはファイルを含むたくさんのフォルダが含まれており、唯一のことは、に2つのフォルダといくつかのファイルを追加し、は1つのファイルを変更します。しばらくして元のマスターと最新の状態にして、https://help.github.com/articles/syncing-a-fork/で推奨されているようにアップストリームからマージしたかったので、私はgit merge upstream/masterをやりました。これは私のフォークのマスターに多くの変更をもたらしました。マスターから複数回マージした後の競合

今、数か月後にもう一度フォークを同期させることにして、git merge upstream/masterをもう一度やりました。これは私が自分自身に触れなかったファイルにある10の紛争のように私をもたらした。もちろん、私は手動でそれらをマージしようとすることができますが、私は理解して、何が起こっているので、私は他人の仕事を破壊しないようにしたい。

質問:

  • それらの競合は、上流からの第二のマージで発生するのはなぜ?

  • は私が何とかに私のフォークのベースを変更しませんでした最上位私は2つの競合するバージョンの「チェンジ・パス」を見つけることができますどのように

  • を(リベース何が?ないということである)(ここで、彼らはどこから来た)

それが助け場合は、次は私が話していますフォークです:?そうhttps://github.com/0815fox/DefinitelyTyped

+0

紛争の原因が何であるかを言うのは難しいですが、それはあなたが、上流からの最後を引っ張って以来犯した、または上流の歴史を書き換えるたかということ、あるいはその両方。 –

答えて

0
  • originaレポがリベースされたか、ローカルのレポがあったので、フェッチしてハードリセットして同期させる必要があります。

  • これは知らないうちに起こりそうです。通常は可能ではありません。最初のコミットに戻して、チェリーピックを1つずつコミットすることによって、裸のブランチを作成することができます。それはrebaseのことではありません。 Rebaseを使用すると、コミットを一緒に縮小し、早送りマージのためにアップストリームブランチの先祖コミットの後ろに新しいコミットを移動することができます。

すべてのブランチのマージパスをgit logで調べることができます。

git log --oneline --graph --decorate --all 

ファイルの特定の行が矛盾を調査するときなどに興味がある場合は、git blameを使用してください。

git blame -- filename 

あなたが調査し終わった後、修正するための私の提案は、タクトで変更して新しいブランチを作成し、あなたの上流分岐をリセットし、その後、桜が終わっコミットのあなたの範囲を選択することです。

git checkout -b mybranch 
git checkout master 
git reset --hard origin/master 
git cherry-pick ^your1stSHA..yourLastSHA 
+0

うわー、これはすでに助けてくれました。それでも、一つの小さなことは不明です:私はすでに私の変更をコミットし、起源/マスターにプッシュしました。私は修正atmを持っていないので、git reset - hard origin/masterは何もしませんか、それとも間違っていますか?私は何とかマスターをアップストリーム/マスターにリセットし、支店からチェリーピックを取って、他のすべてのものを破棄することはできますか? – Alfi

+1

はい、元のプロジェクトのリモート 'upstream/master'にリセットし、チェリーはあなたの変更を選びます。 –

関連する問題