2017-09-25 7 views
0

私はGitに疑念があります。私たちは、最新のコミットがc2であるところで、私たちの機能をマスターするように推し進めてきました。 c1とc2の間には約10のコミットがあります。今日はいくつかの問題が原因で、私たちは、私は次のように行っているマスターにコミットC1からブランチを作成する必要がありました:、私はコミットC2の一環として行われた変更git cherry pickを誤解しています

git branch bugfix c1 

そして、このバグフィクスブランチにでなければなりませんプレゼント。だから次のようにします:

git checkout bugfix 
git cherry-pick -x c2 

安全ですか?私はgitの観点から、c1 + 1からc2-1へのコミットの変更は、バグ修正の分岐に来る可能性があることを意味します。

+0

'c2'のコードが' c1'と 'c2'の間の変更に依存する場合、正しく動作しないか、コンパイルされませんが、cherrypickは* one *コミット。 – crashmstr

+0

私は、正確さはどのような変化c2があるかによって決まると思います。以前の10回のコミットに依存する場合は、チェリーピッキングが正しく機能しません(すべての必要な変更は含まれません)。 – vahancho

+0

私は正しさを考えます。しかし、ちょうどgitから私に教えてください、それらのコミット間の変更はバグ修正に来るでしょうか? – Joy

答えて

0

チェリーピックはc2と表示されたコミットの変更だけを取るので安全です。しかし、コメントに記載されているように、c2の変更がc2c1の間の以前の変更に依存する場合、これは問題を引き起こす可能性があります。さらに、c2の変更がc1の状態と一致しない場合(つまり、コミットの一部である前回の変更がc1c2の間であるため)、cherry-pickは失敗します。

一般に、コミットを作成するだけで安全です。通常、問題のあるコミットを外部(ビルド)サーバーにプッシュするだけで害を被ります。あなたのケースでは、チェリーピッキング後の変化を調べるだけでよいでしょう。

0

基本的に、何をするかgit cherry-pickのチェンジ・セットにそれぞれ「桜」を(それぞれが選んだことをコミット)に変換することである差分-、その後、コミットあなたの現在の(またはHEAD)にそのチェンジを適用しようとその結果から新しいコミットを作成します。

特定のコミットの差分は、そのコミットとその親コミットの間でgit diffを実行すると取得されます。このdiffは簡単に入手できます。git show <hash>は、マージされていないコミットのために行います。 (チェリーをマージするには、どの親を指定する必要があり、したがってより複雑です)。git showを使用して、git cherry-pickが選択する変更を表示できます。 git showHEADに存在しないファイルに、またはHEADに存在しないファイルに存在しないコード領域に変化を示した場合、Gitはチェリーピックを完了することができないであろうこと

注そのままで。この場合、Gitはチェリーピック操作をmergeへのリクエストとして処理します。完全な3ウェイマージを使用し、マージベースはチェリーピックされたコミットの親であり、2つのブランチヒントはHEAD--ours)であり、コミットがcherry-picked(--theirs)である。これにより、進行中のマージがインデックスに格納された状態で、マージ競合が作業ツリーに残ります。他のマージの競合と同様にこれを解決し、操作を完了するためにgit cherry-pick --continueを実行するか、開始する前の状態に戻るためにgit cherry-pick --abortを実行してください。唯一のインデックスと作業ツリーへ

-n

または、。

関連する問題