2012-04-27 14 views
2

現状をマージ:Gitリポジトリ:どのように逆の後にローカル変更をコミットする

開発1:

つの開発者がSprint1題し同じリモートブランチで作業している、2つのファイルと言うにいくつかのコードを変更します3つのファイルを誤って追加してコミットし、Sprint1にプッシュします。

デベロッパー2:何らかの形でデベロッパー1が誤って3個のファイルを追加してしまいました。そこで、開発者1の変更が反映される前に、その変更をコミットにリバースマージします。この時点で、開発者1で

は再び彼の2つのファイルをコミットしようとしたい(とない彼はまだ取り組んでいる余分3)およびリモートブランチ(Sprint1)にプッシュ。問題は、プルがDevelopers 1のローカルファイルを上書きし、5つのファイルすべてでローカル変更を効果的に "削除"することです。

日付ヘッドまでに取得するが、変更を失うことなく、この時間は、正しいファイルをプッシュできるようにする開発者1のための適切な方法は何ですか?

+0

"逆マージ"とはどういう意味ですか?リセットまたは元に戻す? –

+0

Gitはデータを決して「削除」しません。Dev1は、Sprint1の新しいHEADに変更を加えなければなりません。最悪のシナリオでは、いくつかの競合が残されます。 – KurzedMetal

+0

この種の問題を回避するために役立つアドバイスを少し追加したかっただけです。私は非常にそれぞれの開発者が自分の一時的なdevブランチで作業し、その後彼らがいくつかの作業を完了した後にメインのdevブランチにマージすることを勧めます。 – Valjas

答えて

1

gitについての良いことは、一度コミットしたことを完全に削除するのはかなり難しいことです。あなたはこれらのコミット(オリジナルのものと、それを元に戻す1)の両方を除去するために、リポジトリに力プッシュを実行し、変更をコミットしたくない場合は開発者1は何ができるかありますゼロから:

  1. git pull - [OK]を、私たちは、元に戻すにはそのように歴史をコミットし、持って引っ張っ:

    ca798ca revert 'commit1' 
    cf76cf7 commit1 
    

    まあ、我々は変更を「失われた」が、心配しないでください - 次のステップは戻ってそれらをもたらすでしょう。

  2. git revert -n HEAD(または明示的にgit revert -n ca798ca)復帰コミットを元に戻します。現在、元のコミット(必要な変更と不必要な変更)のすべての変更はインデックスにありますが、コミットされていません(-nオプションのおかげで)。

  3. git reset HEADバック作業ディレクトリへのインデックスからのすべての変更を移動します。

  4. git add necessary_file && git commit -m 'necessary changes'インデックスにのみ必要な変更を追加し、それらをコミットします。このコミットで望ましくない変更はすべて作業ディレクトリに残ります。

  5. git push同僚とあなたの結果を共有します。

これらの手順は現状のまま提供されていますので、上記の内容を理解できない場合は、事前にお尋ねください。そうしないと、物事がさらに乱雑になる可能性があります。

+0

これはステップ2の明示的なリビジョンでうまくいきました。それから、GUI(SmartGit)を介してそれを理解したかったのですが、同じようにする方法を理解できませんでしたか? @ KL-7の解決に感謝します! – Shawn

1

てきた開発者1は、彼の現在のローカルの編集と別のブランチを作成し、彼のSprint1支店(彼は作成されていない新しいブランチ)に自分のローカルファイルにSprint1枝にプル要求を行います。その後、新しいブランチでコミットしたくない3つのファイルに対してgit rmを実行し、そのブランチをSprint1にマージして戻すことができます。

関連する問題