

とあるリモートリポジトリ(ここでは「Remote」とします）があり、Githubを用いてこれを僕とAさんで使っています。  
しかし、僕とAさんのローカルリポジトリでのコミット履歴が異なっていて、これによってconflictが発生してしまいました。現在、このような状況です。  
・僕のコミット履歴  
コミットA  
コミットB  
コミットE  
コミットF

・友人Aのコミット履歴  
コミットC  
コミットD  
コミットE  
コミットF

・Remoteの状態  
僕がpushしたコミットAが反映されている(push -fを使用してしまいました)

なお、コミットAはコミットCよりも新しいコミットで、  
コミットBはコミットDよりも新しいコミットとします。

ここで、コミットCにはコミットAには無い変更点がありそれを反映させたいのですが  
コミットが干渉してしてしまいどうすれば良いのか困り果てている状況です。  
rebaseも試みたのですが、上手くいきませんでした。

僕と友人Aのコミットを結合(?)するにはどうすれば良いのでしょうか。  
また、コミットCの変更点を今のRemoteに反映させることは可能なのでしょうか。  
分かりにくく乱雑な文章で申し訳ございませんが、  
もし分かる方がいらっしゃいましたら回答宜しくお願い致します。


CC BY-SA 3.0
2015-10-23T02:52:54.217
17965
2015-10-24T05:12:13.727
2015-10-23T18:45:22.920
76
12919
question
git
Gitでcommitがconflictしてしまった時の対処法


コンフリクトは自動的には解消できませんので人間の判断でマージする必要があります。

あなたと、友人がそれぞれ別のブランチにプッシュして  
両者比較してあるべき姿に修正（手動でマージ）して  
問題なければ 本流のブランチにマージすればどうでしょう？


CC BY-SA 3.0
2015-10-23T04:27:42.627
17967
2015-10-23T04:27:42.627
5008
17965
answer


GitHubの問題ではなくてGitの問題ですね。

コンフリクトをどのように解決するかは、どのようなソースを完成させたいのかを考えて（必要であればプロジェクトメンバーと話し合って）解消します。

どのファイルがどのようにコンフリクトしてどうしたいのかが質問にないとはっきりとしたことがいえませんが、少なくとも、`push
-f`や`rebase`はコンフリクトでは余程のことがないと使用しないと思います。

基本的には、  
Gitのオプションだと  
**\--ours**  
**\--theirs**  
などを必要に応じて使います。

以上のオプションが要件を満たさない場合は、直接ソースのファイルをエディタで編集するという方法が一般的です。


CC BY-SA 3.0
2015-10-23T09:53:47.083
17986
2015-10-24T05:12:13.727
2015-10-24T05:12:13.727
9008
9008
17965
answer


具体例を示したほうがいいかと思いました。

あなたも友人Aも、仮に master ブランチで開発していたとします。  
また、 remote のレポジトリは、 origin で設定されていたとします。

友人A が次を行うとよいと思います。

[code]

    git fetch
    git merge origin/master
    
    # コンフリクトが起きた場合は、 git status で何が unmerged かを確認し、
    # そのファイルのコンフリクトを修正する。
    # (ファイルのどこがコンフリクトかは、そのファイルを見ればすぐわかります)
    # 修正を行ったのち、そのファイルを git add する
    
    # コンフリクトが起きていた場合には、最終的にコミットが必要
    # コンフリクトが起きていなかったら、 git merge の時点で、
    # コミットが作成されているはず。
    git commit
    
    git push
    
[/code]

これにより、 ABEF と CDEF の歴史を統合したような(マージ)コミットが Remote に push されます。


CC BY-SA 3.0
2015-10-23T17:44:47.350
17993
2015-10-23T17:50:16.037
2015-10-23T17:50:16.037
754
754
17965
answer