我正在寻找一种方法将所有git 提交压缩到master分支中的单个大提交中。我完全理解我试图做的事情的后果,不需要解释这是危险的或者不是正确的方法 - 我想丢失我所有的历史并将这个存储库变成一个单一的大提交。
主要问题是:我没有其他活动分支,没有本地提交,并且之前的所有提交都已经推送到 remote master。
也欢迎使用 Hacky 脚本。
eft*_*ft0 33
我会使用 git reset --soft
git reset --soft id-of-first-revision-of-master
git commit --amend -m "single commit for master"
Run Code Online (Sandbox Code Playgroud)
然后,您可以在需要新分支的任何地方推送 --force。
我可以想到另一种简单的方法,使用更多的 git 命令:
git checkout --orphan some-branch
git commit -m "First commit"
git branch -f master # move the local branch
git checkout master
git branch -d some-branch # delete the temp branch
Run Code Online (Sandbox Code Playgroud)
也可以这样做,以一种更黑客的方式:
git commit-tree -m "First commit" HEAD^{tree}
Run Code Online (Sandbox Code Playgroud)
这将写一个修订版......如果你检查它,你将有一个单一的修订版,内容将与你之前站立的地方完全一样......随意移动本地分支(如在以前的食谱)
您仍然可以使用 修改上游的历史记录git push --force-with-lease。但是,您必须了解后果。
使用git push --force将在您的上游创建一个并行树,因此所有开发人员可能会发现自己迷失在遗留分支中。
为了压缩您的历史,只需执行以下操作:
git rebase -i HEAD~10
Run Code Online (Sandbox Code Playgroud)
10您想要压缩在一起的提交数 + 1在哪里。如果你想压缩所有提交,那么只需引用你的<first-commit-hash>而不是HEAD~10. 然后在编辑器上squash为要组合在一起的所有提交选择。您可以进行搜索/替换:pick通过squash
完成后,只需推送您的更改:
git push --force-with-lease
Run Code Online (Sandbox Code Playgroud)
我永远不会推荐这样做,--force因为如果另一个开发人员在此期间推送了一个提交,您将删除它的移动。通过使用--force-with-leaseGit 将阻止您在其他人推送您上次更改的顶部时进行推送(有关更多详细信息,请参阅此问题)。
| 归档时间: |
|
| 查看次数: |
9700 次 |
| 最近记录: |