例如远程master分支上有100次提交记录
现在想把1-10次提交合并成一次提交,【就好像我只提交过一次一样】其他11-100次提交保持不变。如何实现?
看了git rebase -i ,好像只能合并本地分支,合并以后怎么影响远程分支呢?
阿神2017-05-02 09:49:56
git rebase -i HEAD~99
次に、スカッシュする最も遠い 10 個のコミットの前の選択を変更します。
次に、強制的に commit git Push -f を実行します
動作するかどうかはわかりませんが、試してみてください
巴扎黑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> 表示变量,不需要打出来<和>。但其它符号都是要打的):
在当前 branch 基础上新建一个 branch: git checkout -b newBranch
在新 branch 上回滚到提交第一次之前: git reset --hard <commit1Hash>
Cherry pick 前十条 commit,放到缓冲区: git cherry-pick -n <commit1Hash>..<commit10Hash>
提交这十个commit。git commit -m "<xxxx>"
Cherry pick 剩余 commit,不放到缓冲区(直接添加到 timeline): git cherry-pick -n <commit11Hash>..<commit100Hash>
git Push -f
を実行する必要がありますが、もちろんコードは変更されません<時間>
最後の項目から最初の項目までスクロールするのに時間がかかる場合がありますので。 。別のアイデアを提供してください (以下、<xxx> は変数を表すために使用され、< と > を入力する必要はありません。ただし、他の記号は入力する必要があります): 🎜 <オル>git checkout -b newBranch
🎜🎜
git replace --hard <commit1Hash>
🎜🎜
git Cherry-pick -n <commit1Hash>..<commit10Hash>
🎜🎜
git commit -m "<xxxx>"
🎜🎜
git Cherry-pick -n <commit11Hash>...<commit100Hash>
🎜🎜
🎜
🎜このようにして、新しいブランチで必要な作業が完了しました。変更したいブランチにマージするだけです🎜