たとえば、リモートマスターブランチには 100 のコミットレコードがあります
ここで、[一度だけ送信したかのように] 1 ~ 10 のコミットを 1 つのコミットにマージし、残りの 11 ~ 100 のコミットを変更しないようにしたいと思います。どのように達成するか?
git rebase -i を見ると、ローカル ブランチのみがマージできるようですが、マージ後はリモート ブランチにどのような影響がありますか?
git rebase -i HEAD~99次に、スカッシュする最も遠い 10 個のコミットの前の選択を変更します。 次に、強制的に commit git Push -f を実行します 動作するかどうかはわかりませんが、試してみてください
上記の方法は正しいですが、git rebase -i HEAD~100 にする必要があります。 HEAD~99 は 2 ~ 100 件の送信のみを読み取ることができますが、最初の送信は読み取れません。 git rebase -i HEAD~100 吧。HEAD~99 只能读取到 2~100 次提交,读不到第一次的。
git rebase -i HEAD~100
HEAD~99
另外,找到最远的 10 次提交之后,其实不一定要改成 squash(或者s),如果你不打算保留提交信息,用 fixup(或者f)就行了。。
修改之后肯定是要 git push -f 的,因为你的 timeline 和后续的 commit hash 都变了,当然你的代码不会变
git push -f
鉴于从最后一条翻到第一条可能会比较久。。再提供一种思路(以下用 <xxx> 表示变量,不需要打出来<和>。但其它符号都是要打的):
在当前 branch 基础上新建一个 branch: git checkout -b newBranch
git checkout -b newBranch
在新 branch 上回滚到提交第一次之前: git reset --hard <commit1Hash>
git reset --hard <commit1Hash>
Cherry pick 前十条 commit,放到缓冲区: git cherry-pick -n <commit1Hash>..<commit10Hash>
git cherry-pick -n <commit1Hash>..<commit10Hash>
提交这十个commit。git commit -m "<xxxx>"
git commit -m "<xxxx>"
Cherry pick 剩余 commit,不放到缓冲区(直接添加到 timeline): git cherry-pick -n <commit11Hash>..<commit100Hash>
git cherry-pick -n <commit11Hash>..<commit100Hash>
git Push -f
git replace --hard <commit1Hash>
git Cherry-pick -n <commit1Hash>..<commit10Hash>
git Cherry-pick -n <commit11Hash>...<commit100Hash>
git rebase -i HEAD~99
次に、スカッシュする最も遠い 10 個のコミットの前の選択を変更します。
次に、強制的に commit git Push -f を実行します
動作するかどうかはわかりませんが、試してみてください
上記の方法は正しいですが、
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):
さらに、最も遠い 10 個のコミットを見つけた後、コミット情報を保持する予定がない場合は、実際にはそれを squash (または s) に変更する必要はありません。単に fixup (または f) を使用してください。 。git cherry-pick -n <commit11Hash>..<commit100Hash>
git Push -f
を実行する必要がありますが、もちろんコードは変更されませんgit checkout -b newBranch
🎜🎜git replace --hard <commit1Hash>
🎜🎜git Cherry-pick -n <commit1Hash>..<commit10Hash>
🎜🎜git commit -m "<xxxx>"
🎜🎜git Cherry-pick -n <commit11Hash>...<commit100Hash>
🎜🎜 🎜 🎜このようにして、新しいブランチで必要な作業が完了しました。変更したいブランチにマージするだけです🎜