検索

ホームページ  >  に質問  >  本文

git 远程提交合并

例如远程master分支上有100次提交记录

现在想把1-10次提交合并成一次提交,【就好像我只提交过一次一样】其他11-100次提交保持不变。如何实现?

看了git rebase -i ,好像只能合并本地分支,合并以后怎么影响远程分支呢?

曾经蜡笔没有小新曾经蜡笔没有小新2765日前638

全員に返信(2)返信します

  • 阿神

    阿神2017-05-02 09:49:56

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

    返事
    0
  • 巴扎黑

    巴扎黑2017-05-02 09:49:56

    上記の方法は正しいですが、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
  • キャンセル返事