0

このシナリオは非常に「一般的」であることがわかりましたが、周りを見回しても何も役に立ちませんでした。私は実際にはGitの専門家ではありませんが、これは単純なはずです。

例を見てみましょう:

UserAとUserBは同じバージョン(A)で作業しています。UserAがコミットしてリモートにプッシュしたため、バージョンBになりました。

プッシュしたいファイルの一部のみをコミットします。

プルしようとすると(バージョンが異なるためプッシュできないため)、Gitは「コミットされていない変更はマージによって上書きされる」と通知します。

UserA: A------B
        \      \<-not possible  
UserB:   \------C

コミットされていない変更も含めて、すべての変更を保持して新しいバージョンをプルしたいと思います。出来ますか?

私はIntelliJと彼の組み込みプラグインを使用しているので(私はそれがとてもフレンドリーだと思います)、誰かが私にこれを行う方法も説明してくれるなら素晴らしいでしょう!

4

1 に答える 1

1

可能です。

ベストプラクティスは、すでに行ったように目的の変更をコミットすることだと思います(たとえば、ブランチ「dev」で作業しているとします)。次に、変更をコミットせずに新しいブランチを作成します。たとえば、「mywork」と呼びますgit checkout -b mywork。このブランチで他の変更をコミットします。

次に、マージが行われます。まず、正しいブランチで作業していることを確認しますgit checkout dev。その時点では、正しく機能するかどうかはわかりません。そのため、実行することをお勧めしますgit checkout -b tempdev commitIdWithChangedToBePushed(つまり、以前のコミットから分岐します)。

次に、すべてをマージします。実行するのと同じように実行git pull originします(originはリモートです)。これで、すべてがtempdevでローカルに適切にマージされます。tempdevをdevにマージし、tempdevを削除します。今、原点にプッシュします。

その結果、2つのブランチができdevました。クリーンな変更とmyworkその他の変更です。後で他の変更を統合することが考えられた場合は、それらをマージできます。

ちなみに、IntelliJプラグインはわからないので、そこで再現してみてください。

stashを使用することも可能ですが、私はそれが好きではありませんgit stash。マージした直後ですgit stash pop(またはそれがプロセスだと思います)。マージは必ずしも簡単なプロセスではなく、変更を元に戻すと問題が発生するため、私はそれが好きではありません。さらに、変更を隠したことを忘れたり、変更を隠したり、隠し解除したりすることを忘れることがあります。多分それは私だけです。

于 2012-08-31T13:51:13.707 に答える