2011-07-07 14 views
2

私は、特定のブランチで2つの異なるプロジェクトに取り組んでいる状況があります。私はプロジェクト "A"を終了し、変更をコミットし、変更をリモートにプッシュしました。この変更 "A"は現在検討中であるため、ブランチにまだマージされていません。一方私は、同じブランチ内の別のプロジェクトの無関係な変更に取り組み始めました。この変更を "B"と呼んでいます。私はこの変更をコーディングし終えました。私はこれをコミットしてプッシュする準備ができています。しかし、変更 "A"がまだマージされていないので、これをどのように行うべきか分かりません。この2つの変更 "A"と "B"を互いに依存しない別々の変更としてプッシュするにはどうすればよいですか?複数の無関係なコミットをリモートgitリポジトリにプッシュ

+0

私は自分の答えを編集しました。 'git checkout parent_commit'のステップでは、parent_commit =コミットハッシュはそのコミットでリポジトリの状態をチェックアウトし、' git checkout -b commitB'は新しいブランチを作成します。 – shelhamer

答えて

3

まず、変更AとBの共通の親となるコミットを特定する必要があります。説明したとおり、これはコミットAの親です。git logを使用して、コミットのハッシュを見つけてください。あなたがちょうどコミットハッシュの最初の数文字/数字を入力することができます。のは、それをふりをしてみましょうことは、我々はどこ、そこから新しいブランチを作成して変更B.

git checkout parent_commit 

次のための新しい枝の頭部として使用しようとしている「parent_commit」今

このコミットチェックアウト、ある我々 Bの変更をコミットします。

git checkout -b changeB 

最後に、この新しいブランチにご変更Bをコミットするgit addgit commitを使用しています。完了したらgit pushを実行して、変更Aとは関係ない新しいブランチからコミットBをプッシュします。または、変更Bを既にコミットしている場合は、git cherry-pick commitBgit pullを使用します。

今、あなたはA.発言を閉じる

の親までの歴史を共有し、Bを使用してAと元支店、および新しい枝を持っています:あなたはすでにBを犯し、そのためのブランチを作っていた場合あなたが他の回答で述べたリベースワンライナー行っている可能性(とそれがチェックアウトしました):基本的に

git rebase --onto master commit_A_sha 
+0

あなたは何を言っているのか理解していますが、共通の親のコミットIDを与えることで、新しいブランチ "common_parent"をどのように作成できるか説明できます。私の変更 "A"はすでにコミットされているので、これを行う必要があります。 – DarezGhost

+0

私の答えをもう少しステップバイステップで編集します.1秒です。 – shelhamer

0

Shelhamerの応答と同じ結果に。 1つのコマンドで同じ結果を得るにはgit rebase --ontoを使用できます。 「古い」親(あなたの例ではA)のSHA id、新しい親のSHA id(たとえばマスター)を探します。そして、あなたは質問(B)に支店を持っていると仮定して実行し、チェックアウト:

git rebase --onto <new parent> <old parent> 

これは、本質的に以降から分岐B上のすべてを「-拾う」し、それをマスターオフに基づいていますので、それを移動します。その後、通常通りgit pushとなります。

関連する問題