私は長年にわたって作業してきたブランチを持っています。定期的にメインブランチをマージしています。したがって、このブランチの履歴には、メインブランチからのすべてのコミットも含まれます。私はコミットのすべてをブランチ上の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. マスタと同じときにリモート上のブランチをマージする
- 3. Gitのマージ - マージされたブランチはどうなりますか?
- 4. git:以前のマージを元に戻したブランチからのマージ変更
- 5. コミットをマスタから独立したブランチに移動する
- 6. マージの前にコミットからブランチを作成するには?
- 7. マスタをマージしてマスタを作成する場合
- 8. 私のブランチからスパンしたgitブランチをマージするには?
- 9. マージ競合 - マスタであるGit rebase master
- 10. Git:新鮮なブランチは古いコンテンツをマスタから取り除きます
- 11. Gitはマージの前にコミットします
- 12. マスターにマージする前にコミットをスクラッシュする方法は?
- 13. git - ブランチをマスタのように見えるように戻しますか?
- 14. gitブランチがさらにコミット/マージするのを防ぐ方法
- 15. gitでは、マスタから新しいコードをマスタに追加した後、マスタから元々作成されたブランチにマージすることは可能ですか?
- 16. gitマージ後にソースとデスティネーションのブランチはどうなりますか?
- 17. どうすればいいのですか:actualBranchはMasterとactualBranchをマージしてmaster gitからマージします
- 18. "git push"はすべてのコミットを他のブランチからプッシュしますか?
- 19. マージ後のGitブランチとコミット履歴
- 20. 特定のコミットからブランチを強制的にマージする
- 21. git pushはすべてのブランチから自動的にコミットしますか?
- 22. マージ後のGit push(force)は別のブランチにコミットします
- 23. 以前のすべてのgitコミットから.ideaディレクトリを削除します
- 24. Gitで一度に2つ以上のブランチ/ヘッドをマージしますか?
- 25. smartgitを使用してリモートフィーチャブランチをマスタにマージする方法
- 26. マスタを介して機能ブランチをリベースした後のコミット数
- 27. Squash GITでのマージ後のブランチのコミット
- 28. どのようにマスタに並列ブランチを作っていますか?
- 29. あるブランチから別のブランチへのコミットを含まずにGitをマージする
- 30. 特定の順序でブランチからコミットをマージする方法
マスターからリバースする例がありますか? –
したがって、ブランチ "branch_a"にいる場合は、次のコマンド "git pull --rebase origin master"を実行します。それでおしまい。 –