2016-04-24 17 views
10

1つのファイルに1つの競合があるプル要求をマージしようとしています(下記参照)。プルリクエストをマージする手順は、provided by githubです。このマージを実行するために重要なので、PRを提出する人はそれを信用します。競合が発生した場合にマージを成功させる方法

# Step 1: From your project repository, check out a new branch and test the changes. 
git checkout -b droark-master master 
git pull https://github.com/droark/cryptopp.git master 

# Step 2: Merge the changes and update on GitHub. 
git checkout master 
git merge --no-ff droark-master 
git push origin master 

私は1つの競合するファイルに1行を修正する方法を知っています。私がやる方法がわからないのは、Gitがマージを実行し、インデックスファイルが壊れていると不平を言うことです。

Gitにマージを実行させるにはどうすればいいですか?プルリクエストを提出した人がクレジットを得てインデックスファイルを破棄しないようにしますか?


私はGit merge errorsでマージを修復しようとしました。エラーの1つのセットは、別のエラーのセットに変わります。は、無限のです。私はまた、問題のファイルをIgnore files during mergeにしたがって再設定しようとしましたが、必要な1行をコピー/ペーストする予定ですが、壊れたインデックスが残っています。

これは時間の無駄になりました。私はもはや時間を無駄にするので、Gitのやり方には興味がありません。今はGitにマージを実行させ、インデックスファイルを中断させたいだけです。ここで


はgithubの取扱説明書を使用してマージする際に生成される出力です:紛争の解決

$ git pull https://github.com/droark/cryptopp.git master 
From https://github.com/droark/cryptopp 
* branch   master  -> FETCH_HEAD 
Auto-merging validate.h 
Auto-merging validat2.cpp 
Auto-merging validat1.cpp 
Auto-merging test.cpp 
CONFLICT (content): Merge conflict in test.cpp 
Auto-merging pubkey.h 
Automatic merge failed; fix conflicts and then commit the result. 
+1

「インデックスファイルを破る」とはどういう意味ですか? – Schwern

+0

@Schwern - マージが失敗した後は、インデックスファイルの問題(Gitにあっても)が原因で、リポジトリで何もできません。例えば、 'git checkout master' *は' 'エラー:あなたの現在のインデックスを最初に解決する必要があります.' *となります。私はGitにそれらを壊すのを止めて、手元にある私の仕事で乗り越えることができるようにしたい。 – jww

+0

マージの競合をロールバックするには、[[git merge with conflictsを元に戻す方法は?]](https://stackoverflow.com/questions/5741407/how-to-undo-a-git-merge-紛争を伴う)。 – Schwern

答えて

4

だけで進行中の他の仕事を扱うようなものです。すべての変更をステージングし(git add)、コミットする必要があります。自動マージされたファイルは既にステージングされています。競合するファイルはありません。

矛盾したファイルを満足するように編集してください(git add)、それがすべて完了したら、git commit。競合(彼らは<<<<マーカーを有する)

  • git add test.cpp
  • はすべてがOKであることを確認するためにテストを実行し修正するために、あなたのケースで

    特に...

    • 編集test.cpp
    • git commit
  • +0

    ありがとうございます。私は紛争を解決したくありません。私はあまりにも多くの時間を無駄にしてしまった。私は今、マージが成功するようにしたい。文字通り、必要なものを手で加え直すのに3秒かかります。 – jww

    +0

    @jww競合が発生している間は、マージは成功しません。競合したファイルを編集せずに 'git add 'して、' git commit'を実行してマージを完了させることもできますが、同じことをすることによって次のコミットで修正する必要があります。マージでそれらを修正することもできますが、同じ作業が必要となり、壊れたマージコミットはありません。 – Schwern

    16

    競合を解決せずにマージする方法はありません。さもなければ、gitはどのようにマージするべきかを知っていますか?ただし、マージしているどちらのブランチからでもgit checkout --ours <filepath>またはgit checkout --theirs <filepath>を使ってバージョンをチェックアウトすることができます。ここでは例です:

    あなたはステージングにマージmasterブランチにしていると仮定します

    git checkout master 
    git merge staging 
    

    そして、gitが紛争の束を示しています

    ... 
    CONFLICT: Readme.md 
    ... 
    

    あなたはのバージョンを保持する場合マスター上だReadme.md、あなたが実行します:そのSI

    git checkout --ours Readme.md 
    

    注意をあなたはマスターになっています--oursは "this"ブランチ、つまりマスターを指しています。解決として

    さて、あなたは単にそれをマークするために、インデックスに追加することができます:

    git add Readme.md 
    

    これは効果的stagingブランチ上Readme.mdへの変更を無視します。

    マージから除外するファイルごとにこのプロセスを繰り返すことができます。設定が完了したら、あなたは通常どおり、コミット:

    git commit -m "whatever..." 
    
    +1

    警告: '--ours' /' --theirs'は変更をマージしません。ファイルのバージョンをそのまま受け取り、それを完全に無視します。 –

    +0

    さらに悪いことに、 '--ours' /' --theirs'は何もしません。 – default

    +1

    @ 5chdnこれは、ivanのコメント – Felipe

    8

    周り競合を解決する方法はありません、それはリビジョンコントロールの動作(アリスは言うならば「」とボブは「b」は言いますが、どのようにGitが知っておくべき方法ですましたあなたはあなたがと言っていない限り正しいですか?)。 several possible waysのいずれかでマージするときには、直接gitを使用して解決するだけです。

    git merge -s recursive -X theirs <branch> 
    

    -s recursiveが一つだけ<branch>があるときので、あなたはここでそれを省略することができますデフォルトです)

    今、あなたはすでにあなたの木、あなたのいずれか

    • フォローで競合を持っていることmanual resolution route
      • あなたの心の欲望にファイルを編集
      • git addそれをマージを完了するために、
      • git commit(Gitの中addは解決されたファイルをマーキング兼ね)。または
    • これはマージを強制的git merge --abortで前マージ状態を復元し、マスター

      git push --force origin branchA:branchB 
      

      に上記自動解像度オプション

    0

    プッシュ開発にマージを再試行それからプッシュ

    +0

    で説明されているように、指定されたブランチからバージョンを確実にチェックアウトします。 – Shujito