私は長年にわたって作業してきたブランチを持っています。定期的にメインブランチをマージしています。したがって、このブランチの履歴には、メインブランチからのすべてのコミットも含まれます。私はコミットのすべてをブランチ上の1つのコミットにスカッシングしてから、このブランチをマスターに戻してマージしたいと思っています。これはマスターのコミット履歴に影響しますか?GIT:ブランチ上のすべてのコミットをスクラッシュしてからマスタにマージすると、マスタからの以前のマージはどうなりますか?
答えて
あなたは間違いなくそれを行うことができます。ブランチ上のすべてのコミットを無効にすることができます。 git pull --rebase origin master
を実行して、すべてが正しいことを確認します。 すべての競合を解決してから、マスターにマージします。
注:通常、あなたはブランチで作業しているオフのもとbranch_a
は、マスターではなく、merge
マスターオフあなたrebase
たびにマスター上の変更があることが推奨されるmaster
を言うと言います。
一般的な考えは、VCS内の履歴が保持されることです。したがって、単にコミットを追加するだけでは結果はありません。
しかし、あなたはかもしれません。あなたが望むなら履歴を書き換えてください。元の履歴を既に公開していて、他の人がそれに依存している(つまり自分の上に独自のコミットを作成した)場合、そのような履歴の書き換えは、彼らの新しい歴史の上の変化。
しかし、履歴がまだ公開されていない場合や、同僚と交渉することができ、変更に同意している場合は、あなたの行動は自由です。
更新: 変更されたブランチがマスターからいくつかのマージを持っているので、私はコミットの初期画面は多少このようになっていることとします
<letter>
sが
B<letter>
sは
master
コミット、ある
A ---> B ---> C ---> D ---> E --> F (master)
\ \ \
--> BA --> BM1 -> BB --> BM2 --> BC (branch)
「自分」branch
がコミットし、BM<number>
がmaster
からbranch
のマージになります。
今あなたがスカッシュしたいが、ブランチにコミットし、最後の絵は次のようになりますように:
A ---> B ---> C ---> D ---> E --> F (master)
\ \
-----------------------> BZ (branch)
とBZ
のファイルツリーBC
ファイルツリーとまったく同じであることをコミットします。
マージコミットに関する既定の動作git rebase
は、マージレコードを削除する履歴をフラットにすることですが、対応するマージによって導入された変更を再生します。あなたは、単にgit checkout branch; git rebase -i A
を発行し、単一のものにコミットスカッシュしたがって、もし、あなたがこのような何か受信します:
A ---> B ---> C ---> D ---> E --> F (master)
\
-----------------------> BZ (branch)
(E
とBZ
間のミッシングリンクを気づか)
をだから我々はいくつかを実行する必要がありますリベースの魔法タスクを簡略化するために、tagA
マーキングコミットA
、tagE
マーキングE
、tagBC
をBC
として作成します。これらのタグは、ジョブが完了した後に安全に削除することができます。
これで準備は完了です。問題git rebase -i tagA
。挿入偽のマージは、リストの一番上に
pick 515de5f commit BA
pick 1c749c6 commit B
pick 4490402 commit C
pick 4da9e96 commit BB
pick 6d9dc01 commit D
pick 7e469d6 commit E
pick 861038b commit BC
、あなたはこのような何かを取得しますので、fixup
sのすべてpick
Sを置き換えます:あなたはこのようなリストが表示されます
exec git merge -s ours -m "The resulting commit" tagE
fixup 515de5f commit BA
fixup 1c749c6 commit B
fixup 4490402 commit C
fixup 4da9e96 commit BB
fixup 6d9dc01 commit D
fixup 7e469d6 commit E
fixup 861038b commit BC
ファイルを保存して終了します。シーケンスが適用されると、望ましいコミット構造が得られます。 BZ
(書き換えの先頭がbranch
)が前のものと同じであるかどうかをテストしてください(tagBC
とマークされています)。
git rebase
のすべての標準プラクティスが適用されます。何か問題が発生した場合は、いつでもgit rebase --abort
で再開できます。いくつかの競合が発生した場合は、それらを解決し、git rebase --continue
のように続ける必要があります。
アイデアは、私がマスターにこれを1つのコミットとしてブランチでマージするのを見せたいということです。私が混乱しているのは、私が特定の地点でマスターを枝分かれし、マスターを途中で併合し続けるという事実です。だから私がすべてのコミットを押しつぶした場合、マスターはマージの違いだけを記録しますか?言い換えれば、マスタはブランチヒストリ上のブランチへのすべての以前のマージを無視するので、各変更に対して2つのコミットハッシュは存在しませんか? –
- 1. gitでは、マスタから新しいコードをマスタに追加した後、マスタから元々作成されたブランチにマージすることは可能ですか?
- 2. gitマージ後にソースとデスティネーションのブランチはどうなりますか?
- 3. マージ後のGitブランチとコミット履歴
- 4. "git push"はすべてのコミットを他のブランチからプッシュしますか?
- 5. Gitで一度に2つ以上のブランチ/ヘッドをマージしますか?
- 6. あるブランチから別のブランチへのコミットを含まずにGitをマージする
- 7. gitはマスタ原点にプッシュするときにローカル更新/マージを強制しますか?
- 8. ブランチから別のブランチに1つのコミットをマージする方法
- 9. gitのブランチとマージ
- 10. チェリーをマスターからブランチにしてからブランチからマスターにマージするときに繰り返しコミットすることを避ける
- 11. git commitをブランチにマージした人はどうですか?
- 12. コミットを以前のコミットにマージするには?
- 13. リベースしてマスタにマージした後でローカルブランチを削除する必要がありますか?
- 14. このリリースブランチをマスタにマージするにはどうすればよいですか?
- 15. Git Merge - リモートブランチからのすべての変更をマージしない
- 16. gitはマージでどのようにコミットを処理しますか?
- 17. すべてのWebノードをマスタからrsyncする方法はありますか?
- 18. git hook pre-commitを使用してマスタへのコミットを停止する方法
- 19. ブランチ特有のコミットをマークしてマージするのを防ぐ
- 20. Gitのブランチからの1つの変更以外のすべての変更をマージする最も簡単な方法は何ですか?
- 21. すべてのコミットをブランチから別のブランチに移動する方法は?
- 22. マスターブランチとマージせずにGitブランチからコードをテストするには?
- 23. 上流のrepoへのプル要求には、上流のrepoから以前にフェッチ/マージされたコミットが含まれていますか?
- 24. Gitは - - テンプレートプロジェクトからマージなしサブディレクトリ
- 25. SVN:ブランチからブランチを作成し、トランクにマージする
- 26. Gitで機能ブランチのマージを "バックアウト"するにはどうしたらいいですか?
- 27. Gitは3つのブランチをマージして元に戻す
- 28. 複数のGITリポジトリからの変更をマージしますか?
- 29. マージの前にGitコミットのメッセージを修正する
- 30. githubのブランチをどのようにマージするのですか?
マスターからリバースする例がありますか? –
したがって、ブランチ "branch_a"にいる場合は、次のコマンド "git pull --rebase origin master"を実行します。それでおしまい。 –