2017-01-24 12 views
6

GitではmasterとmyFeatureBranchの2つのブランチがあります。 myFeatureBranchを作成してから、他のチームメンバーがマスターにいくつかの変更を加えました。私はこれらの変化をもたらしたいと思います。私は葛藤を併合することを認識しています。「Rebaseでチェックアウト」を実行し、Intellij IDEAでマージしたファイルをプッシュする適切な方法は何ですか?

これに対処する方法についての私の一般的な考え方は次のとおりです。

  • 私はどのマージを扱う
  • マスターからコミットの全てを取得し、私のブランチに適用します、私はすべてプッシュする
  • を競合リモートブランチへマージされたファイルを含めて、これらの変更、の
  • は重複が私のリモートブランチにコミットしていないがあります

Intellij IDEA 2016 added some new features(Rebaseを使用したCheckoutを含む)。彼らの発表から:チェックアウトした後、リベース:あなたは2つの操作を行うときに、余分なファイル同期とコンパイルにあなたの時間を無駄にしたくない場合は

リベースアクションとチェックアウトが有用です。

私が欲しいもののようなものです。私はすでにマスター上にいるので、IDEAウィンドウの右下にあるブランチセレクタをクリックします。自分のローカルブランチに移動し、 "Rebaseでチェックアウト"を選択します。

Intellij IDEA Checkout with Rebase

はこれをやった後、私は、マージの競合について聞いています。私は "マージ"ボタンを選択し、それらを手動で解決します。

Intellij IDEA Merge Conflict

私は、私は私のリベースが成功した確認を得ることを実行した後:

Intellij IDEA Rebase Successful

をノー保留中の変更はありません。

Intellij IDEA No Pending Changes

すべてがそれが働いたように見えます。今では、マージされたクラスを含むすべてのものをリモートブランチにプッシュしたいと思います。そこで私はメニューバーに行き、VCS - > Git - > Pushを選びます。私はそれを行うときには、私は私のプッシュが拒否されたことを、私は合併すべきであるというエラーが出ます:

Push of current branch <code>myFeatureBranch</code> was rejected. Remote changes need to be merged before pushing. In this case **merge is highly recommended**, because there are non-pushed merge commits. Rebasing them can lead to problems.

私はアドバイスに従うと、「マージ」を選択することにしました。しかし、これは私をマージ競合に戻しました。

Intellij IDEA Merge Conflict

私はこれを通過し、再びそれをプッシュしようとすると、それが成功しているが、私は、マージの2つのコピーをする羽目になる。

この「Rebaseでチェックアウト」をしてから、マージしたファイルをプッシュすると、私は何が間違っていますか?

また、私は端末からこれをしたくありません。それは一部の開発者にとっては簡単かもしれませんが、私はIDEAのGUIを通してこれを完全に行う方法を学びたいと思います(QAや開発者ほど技術的ではないユーザーがいて、コマンドライン、私はそれらのための最善の方法を知りたい)。

+0

あなたは 'gitの' gitのは--hard'あなた 'myFeatureBranch'をリセットして変更をstash'し、再びそれを実行しよう場合は、何を得るのですか? –

+0

@GrzegorzGórkiewiczどのような時点で、私はそれを試してほしいですか?そして、これは私がコマンドラインからやらなければならないことですか?私が最後に言ったように、Intellij IDEAのGUIからこの全プロセスをどうやってやるのかを学びたいですが、コマンドラインのものが何をすべきかを把握するのに役立ちます。 – Thunderforge

+0

問題が発生する前の出発点です。しかし、とにかくそれはコマンドラインを利用し、あなたがそれを望んでいない、なぜなら何人かの人々は "技術的ではない"ためです;> –

答えて

0

私はリベースしたときもこのような問題に遭遇しました。多くの紛争が解決され、最終的には問題があります。もちろん、マージは結果があまりにも大きく見えないので、私の要点からは良い解決策ではありません。

リベースする前に、リベースする元のブランチの名前を変更してから、元のブランチ名をリベースしてください。または単に変更を新しいオリジンブランチにプッシュ変更した後。

メインポイントは別のブランチにプッシュするが、同じではありません。それは私がこの問題を解決するのに役立ちます。例えば

feature  - - - - 
      /
dev - - - . - - - - - - . - - 

はになります:

update-feature    - - - - 
         /
dev - - - . - - - - - - . - - - - - 

そして、それは何の問題もなく行われます。

私はそれがあなたの役に立てば幸い:)

関連する問題