私たちの開発者の中には、マスターでコミットしていないものがあります。私はそれをきれいにしたいので、マスターのすべてのコミットは動作するバージョンです。マスターから別のブランチにコミットを除外する方法
A - B - C - D - E - F
別のブランチへの1つ以上のコミットを抽出する方法::
は、我々は、以下のコミットがあると仮定し
A - B E - F
\ /
C - D
編集:
- C及びDがあるべきコミット除去された。
私たちの開発者の中には、マスターでコミットしていないものがあります。私はそれをきれいにしたいので、マスターのすべてのコミットは動作するバージョンです。マスターから別のブランチにコミットを除外する方法
A - B - C - D - E - F
別のブランチへの1つ以上のコミットを抽出する方法::
は、我々は、以下のコミットがあると仮定し
A - B E - F
\ /
C - D
編集:
実行します。
git rebase -i B
が次にあなたが選ぶと-i
フラグは、エディタが表示されます意味インタラクティブ、の略B.
以降に導入されたコミットから選択することができます(コミットメッセージを編集するときと同じように、デフォルトではvi
です)、各行にコミットのリストがあります。行を削除してコミットをスキップしたり、コミットの順序を入れ替えたり、2つ以上のコミットを1つのコミットに結合することもできます。
さらに詳しい情報は、公式なgitのドキュメントのRewriting Historyの章を参照してください。
あなたはそれが公共の(そしておそらく多くの開発者によって使用中)であるにもかかわらずmaster
ブランチの歴史を書き換え許容することができるように見えるので、あなたが次の戦略を検討することができます
git cherry-pick
をC
し、 D
はその順序でC
を削除し、D
するgit rebase --interactive
master
分岐がgit checkout new_branch
git cherry-pick dk8cnj2
git cherry-pick dn52bd6
は、cherry-pick
後に面白いに見える文字列が実際にC
とD
コミットのSHA-1ハッシュされ、q.v.:
まず桜は新しいブランチにC
とD
コミットを選びます以下。これはGitに実際のコミットを参照するように指示する方法です。
今、あなたはC
とD
コミットを引き揚げていることを、あなたはmaster
ブランチからそれらを削除するには、対話型リベースを開始することができます。
git rebase -i HEAD~4
これはあなたの最も最近のリストを示すエディタを起動しなければなりません4コミット(cf.HEAD~4
)は次のように、最新の最古のために:
pick 9m38b2f Commit E
pick ldkj093 Commit F
:
pick dk8cnj2 Commit C
pick dn52bd6 Commit D
pick 9m38b2f Commit E
pick ldkj093 Commit F
)すなわち削除(エディタで次のようにあなたを残して、C
とD
をコミットの行をを削除します
ファイルを保存して閉じ、リベースを続行します。この後、master
ブランチからC
とD
のコミットが効果的にスプライスされます。さて、あなたはローカルでこれをしなかった、そしてあなたもmaster
の歴史を書き直しているので、あなたがリポジトリにプッシュ強制する必要がありますので、:
git push --force origin
が、これはにmaster
の歴史を書き換えることに留意してくださいその支店で働いている他の人に混乱を引き起こす可能性があります。これに対処する1つの方法は、インタラクティブ・リベースを完了した後、すべての人にmaster
の作業を凍結させるように指示することです。翌朝、誰もがローカルmaster
を削除し、新しいコピーをチェックアウトします。
TMGが提供する対話型リベースのもう1つの解決策は、マスターに一時的なブランチを作成し、マスターをリセットしてBをコミットし、チェリーピックアップで保持する必要があるすべてのコミットを選択することです。
これらのコマンドが表示されます。警告:現在の変更を加えたり、隠したりしないでください。
// Starting point
git checkout master
// Create a new branch to avoid loosing some commit
git branch tmp
// Change master HEAD
git reset --hard master commit_B
// Get the commits you want
git cherry-pick commit_E
git cherry-pick commit_F
// DONE, you can clean up tmp branch if you don't need commit C and D (you will loose them)
git branch -D tmp
'master'ブランチからコミット' C'と 'D'を削除したいのですか、あるいはそれらを別のブランチに"抽出 "したいだけですか? –
編集した質問。 – SimpleMath
リモートの 'master'ブランチからコミット' C'と 'D'を削除すると、多くの開発者が自分のローカルブランチを削除してスクラッチから引っ張ってしまうかもしれません。 –