、プッシュする前にこれをクリーンアップするためにはるかに安全だろう。あなたは(新しい名前で)新しいブランチを作成し、それらのそれぞれに必要な変更を移行することができ
この手順は、いくつかの点でより安全であるため、最初のオプションを前提として書きます。代わりにヒストリの書き換えを使用する場合は、手順を調整する方法についていくつかの注意を払います。私はbranchA
を行う方法を示し、branchB
の手順は本質的に同じです。私はブランチがmaster
から作成されたと仮定します(そうでなければ、master
へのすべての参照を適切な "親ブランチ"に置き換えてください)。
既存のブランチを確認してください。
git checkout branchA
新しい枝がmaster
の先端に移動することにしたくないと仮定すると、あなたは、分岐点を見つける必要があります。イラストレーションを簡略化するために、その時点で一時タグを作成してください(技術的には、このコミットにSHA1 IDを使用することもできます)。
だから、
x --- A --- x <--(master)
\
A1 --- B1 --- AB1 --- A2 <--(branchA)
を持っていて、A
を見つける必要があります。それはmaster
から分割した後に(この例では)があることbranchA
の4つのコミットを知っている場合は、番号がわからない場合、あなたはGUIフロントエンドからそれを眼球するか、
git tag rootA branchA~4
を言うことができますまたはgit log --graph master branchA
から(コミットの歴史が、これは実用的であることを十分に小さい場合)、またはされていない場合:
git rev-list master..branchA
出力の最後の行はそのためだと仮定すると、は、まずあなたのブランチにコミットのためにSHA1です31337c0d3あなたが希望
git tag rootA 31337c0d3^
(最後は^
です)。
一つの方法または他のあなたは今
[rootA]
|
x --- A --- x <--(master)
\
A1 --- B1 --- AB1 --- A2 <--(branchA)
今すぐ新しいブランチを作成する必要があります(ただし、「歴史の書き換え」オプションを使用する場合は、このステップをスキップすることができます)。
git checkout -b new_branchA
今、あなたは「TODO」リストで、テキストエディタ、コミットを表す各ラインを取得します、対話型リベースセッション
git rebase -i --onto rootA master
を開始します。 branchB
に属してコミットするためにbranchA
に属してコミットするために
、そのままライン(pick
コマンド)を残し
- あなたはすでにbranchB
上で、これらの変更を持っていることを考慮すると - あなただけのpick
からdrop
にコマンドを変更することができます
コミット変更(branchA
に属するいくつかの、branchB
に属している他の人)が混在している場合は、pick
からedit
にコマンドを変更
保存し、テキストエディタを終了し、gitのはリベースを開始します。あなたがedit
でコミットをマークした場合、Gitは一時停止して、あなたの編集を行い、その後、リベースを再開するよう指示するように求められます。リベースはあなたが持っているよ行われ
[rootA]
|
x --- A --- x <--(master)
|\
| A1 --- B1 --- AB1 --- A2 <--(branchA)
\
A1' --- Ab1' --- A2' <--(new_branchA)
(Ab1'
がBranchA
のためのものだけで変更が保持されたAB1
のために編集交換です)。
履歴を書き換えた場合、branchA
はA2'
を指しますが、もちろんnew_branchA
はありません。
一時タグをクリーンアップすることができます。
git tag --delete rootA
、あなたの歴史は古いbranchA
を必要としなくなっあなたを書き換えた場合を除き:
git branch --delete branchA
最後に、あなたがリモート
git push
場合(にプッシュすることができます履歴書き換えの場合は、-f
オプションが必要です)。
はプルリクエストが既に受信者によってマージされていたのですか? – quetzalcoatl
いいえ合併していません –
まだ合併していない場合、**プルリクエスト**は意味がありません。本質的には、「私のパブリックリポジトリブランチフーバーをあなたのものにマージしてください」という「メモ」だけを記憶しています。クリーンアップしてそのクリーンアップを公開/プッシュすると、プル要求は変更されません。それはまだ**同じことを言っている: "あなたのバーフーに私のfoobarをマージしてください"。しかし、今、明らかに、あなたのfoobarはクリーンアップ後になるでしょう。>したがって、あなたは "プルリクエスト"が自動的に自己更新していると考えることができます。もちろん、便利ですが、まだ統合されていない限りです。 – quetzalcoatl