gitリモートコミットマージ
曾经蜡笔没有小新
曾经蜡笔没有小新 2017-05-02 09:47:56
0
2
652

たとえば、リモートマスターブランチには 100 のコミットレコードがあります

ここで、[一度だけ送信したかのように] 1 ~ 10 のコミットを 1 つのコミットにマージし、残りの 11 ~ 100 のコミットを変更しないようにしたいと思います。どのように達成するか?

git rebase -i を見ると、ローカル ブランチのみがマージできるようですが、マージ後はリモート ブランチにどのような影響がありますか?

曾经蜡笔没有小新
曾经蜡笔没有小新

全員に返信(2)
阿神

git rebase -i HEAD~99
次に、スカッシュする最も遠い 10 個のコミットの前の選択を変更します。
次に、強制的に commit git Push -f を実行します
動作するかどうかはわかりませんが、試してみてください

いいねを押す +0
巴扎黑

上記の方法は正しいですが、git rebase -i HEAD~100 にする必要があります。 HEAD~99 は 2 ~ 100 件の送信のみを読み取ることができますが、最初の送信は読み取れません。 git rebase -i HEAD~100 吧。HEAD~99 只能读取到 2~100 次提交,读不到第一次的。

另外,找到最远的 10 次提交之后,其实不一定要改成 squash(或者s),如果你不打算保留提交信息,用 fixup(或者f)就行了。。

修改之后肯定是要 git push -f 的,因为你的 timeline 和后续的 commit hash 都变了,当然你的代码不会变


鉴于从最后一条翻到第一条可能会比较久。。再提供一种思路(以下用 <xxx> 表示变量,不需要打出来<和>。但其它符号都是要打的):

  1. 在当前 branch 基础上新建一个 branch: git checkout -b newBranch

  2. 在新 branch 上回滚到提交第一次之前: git reset --hard <commit1Hash>

  3. Cherry pick 前十条 commit,放到缓冲区: git cherry-pick -n <commit1Hash>..<commit10Hash>

  4. 提交这十个commit。git commit -m "<xxxx>"

  5. Cherry pick 剩余 commit,不放到缓冲区(直接添加到 timeline): git cherry-pick -n <commit11Hash>..<commit100Hash>

    さらに、最も遠い 10 個のコミットを見つけた後、コミット情報を保持する予定がない場合は、実際にはそれを squash (または s) に変更する必要はありません。単に fixup (または f) を使用してください。 。
タイムラインとその後のコミットハッシュが変更されているため、変更後に git Push -f を実行する必要がありますが、もちろんコードは変更されません

最後の項目から最初の項目までスクロールするのに時間がかかる場合がありますので。 。別のアイデアを提供してください (以下、<xxx> は変数を表すために使用され、< と > を入力する必要はありません。ただし、他の記号は入力する必要があります): 🎜
  • 🎜現在のブランチに基づいて新しいブランチを作成します: git checkout -b newBranch🎜🎜
  • 🎜新しいブランチの最初のコミット前にロールバックします: git replace --hard <commit1Hash>🎜🎜
  • 🎜最初の 10 個のコミットを選択してバッファに入れます: git Cherry-pick -n <commit1Hash>..<commit10Hash>🎜🎜
  • 🎜これら 10 個のコミットを送信します。 git commit -m "<xxxx>"🎜🎜
  • 🎜Cherry は残りのコミットを選択し、バッファには入れません (タイムラインに直接追加します): git Cherry-pick -n <commit11Hash>...<commit100Hash> 🎜🎜 🎜 🎜このようにして、新しいブランチで必要な作業が完了しました。変更したいブランチにマージするだけです🎜
  • いいねを押す +0
    人気のチュートリアル
    詳細>
    最新のダウンロード
    詳細>
    ウェブエフェクト
    公式サイト
    サイト素材
    フロントエンドテンプレート