2017-06-23 3 views
0

状況についての短い説明: 私は1つのファイルを小さなファイルに分割し、同時に私は分割した自分のコミット変更ファイルを作成します。今私は彼と私のコードを接続/更新したいが、私はできない。例えばgit pullとするとgitは分割したファイルを再作成します。 これを行う方法はありますか?注文を維持していますか? お返事ありがとうございます。Git。分割されたファイルを更新する

+0

引っ張ったときにマージ競合が発生しませんでしたか? –

+0

私は競合しています。何か "git conflict - HEADでファイルが削除され、リビジョンで修正されました。" –

答えて

0

ですから、もともとfileを持っていた、そして今、あなたは「filefile-Aに移動し、その後、いくつかの行が削除された」が、おそらくGitは」doesnのようにgitはこれを見た場合file-Afile-Afile-B

取り扱いが容易になるだろう持っています十分な相似性があるので、「fileは削除されました。file-Aが作成されました」と表示されます。

同様に、file-Bの処理は、file-Bに移動し、その後いくつかの行が削除されたため、に移動した方が良いでしょう。

両方とも「正しい」方法での変更はそれほど単純ではないので、代わりにマージプロセスを手に入れることができます。

何らかの方法でマージすると、競合が報告されるはずです。それがなかった場合は( - とだけではなく、静かに悪いマージをコミットする - マージを元に戻すと--no-commitオプションでそれを再起動します。あなたができる

git reset --hard HEAD^ 
git merge --no-commit 

これは、「紛争のような」状態にあなたを配置しますマージを編集し、あなたが今必要なもの)

は、4つのファイルです:あなたはそれを犯したとして、あなたはそれを

  • file-Bを犯したとして

    • file-Aそれは後を見て、あなたの同僚がそれ
    • file編集する前に、それはあなたの同僚がそれ

    を編集したに見えたとして

  • file最初の2、あなたが既に持っているかもしれませんが、何の疑いも

    git checkout HEAD -- file-A file-B 
    
    があるかどう

    "pre-edit" fileは、それを持っているコミットを探す必要があるため、最も難しいものです。あなたが右を指す(多分HEAD^のような)表現を知っていれば、「単純」オプションがあり、それらは、バックティックであることに注意してください(コミットが、最も一般的な解決策は、おそらく

    git checkout `git merge-base HEAD origin/master` -- file 
    

    です。)あなたは、あなたがfile

    git checkout origin/master file 
    

    の「編集後」のバージョンをつかむことができるように今、あなたはすべての部分を持っているので、あなたが

    ことができる新しいファイル名に

    mv file base 
    

    それを動かします

    git merge-file file-1 base file 
    git merge-file file-2 base file 
    

    ここでは、ファイルごとのマージの期待値を正確にgitに伝えています。これらのそれぞれは、マージの競合を引き起こす可能性がありますが、あなたが今見ているものよりも賢明で解決しやすいことを願っています。

    あなたは良いfile-Afile-B探していたら:

    rm file base 
    git add . 
    

    は、あなたのインデックスの状態を確認してください。 (私はgit add .は、インデックスのバックアウトfileをドロップすることを期待しますが、何らかの理由でそれはgit rm --cached -- fileすることができますしない場合。)

    そして今、あなたは完成し、マージをコミットすることができます。このようなマージ(手作業による介入が必要な場合)は、後でそれを含むrebase --preserve-mergesを実行しようとすると大混乱になることに注意してください。 (いずれのマージでもrebaseには、--preserve-mergesオプションが含まれていません)

  • 1

    あなたの仕事を同僚と同期させる必要があります。たとえば、別のブランチで変更を行い、それを現在のブランチにマージすることができます。変更を取り込み、マージの競合を修正するように彼に依頼します。

    +0

    ブランチなどを作成する必要はありません。質問の説明から、2つのバージョンがすでに存在していて、gitはすでにそれらをマージしようとしています。 (そして、コメントに基づいて、衝突を正しく報告します。)*よりスムーズに進む可能性のある手順がありますが、ブランチングやマージは現在と同じ状況につながります。 –

    関連する問題