如何将整个存储库压缩到第一次提交?
我可以将base转换为第一次提交,但这将留给我2次提交。 有没有办法在第一个提交之前引用这个提交?
如何将整个存储库压缩到第一次提交?
我可以将base转换为第一次提交,但这将留给我2次提交。 有没有办法在第一个提交之前引用这个提交?
当前回答
这对我来说效果最好。
git rebase -X ours -i master
这将使git更喜欢你的特性分支;避免艰苦的合并编辑。您的分支需要与主机同步。
ours
This resolves any number of heads, but the resulting tree of the merge is always that of the current
branch head, effectively ignoring all changes from all other branches. It is meant to be used to
supersede old development history of side branches. Note that this is different from the -Xours
option to the recursive merge strategy.
其他回答
我读过一些关于移植的东西,但从来没有深入研究过。
不管怎样,你可以手动压缩最后2次提交,就像这样:
git reset HEAD~1
git add -A
git commit --amend
也许最简单的方法是用工作副本的当前状态创建一个新的存储库。如果你想保留所有的提交消息,你可以先执行git log > original.log,然后在新的存储库中编辑你的初始提交消息:
rm -rf .git
git init
git add .
git commit
or
git log > original.log
# edit original.log as desired
rm -rf .git
git init
git add .
git commit -F original.log
对我来说是这样的: 我总共提交了4次,并使用了交互式rebase:
git rebase -i HEAD~3
第一次提交仍然存在,我最近进行了3次提交。
如果你卡在接下来出现的编辑器中,你会看到smth:
pick fda59df commit 1
pick x536897 commit 2
pick c01a668 commit 3
你必须先做出承诺,然后把其他人推到上面。你需要的是:
pick fda59df commit 1
squash x536897 commit 2
squash c01a668 commit 3
为此,使用INSERT键更改“插入”和“编辑”模式。
使用:wq保存并退出编辑器。如果您的光标位于这些提交行之间或其他位置,请按ESC并重试。
结果我有两次提交:第一次仍然存在,第二次带有“这是3次提交的组合”的消息。
详情请点击此处: https://makandracards.com/makandra/527-squash-several-git-commits-into-a-single-commit
当我从git存储库恢复模板时,我通常会压缩整个树,以获得更干净的历史记录,并确保合法合规。我的工作流程是这样的:
git clone https://git.invalid/my-awesome-template.git my-awesome-foo
cd !$
git branch -M master my-awesome-template/master
git checkout --orphan master
git rm -rf /
git commit --allow-empty --allow-empty-message -m 'Initial commit'
git merge --squash --allow-unrelated-histories my-awesome-template/master
git commit
git branch -D my-awesome-template/master
# you can now `drop' that "Initial commit":
git rebase -i --root
这将把整个历史记录压缩到一个大的提交消息中。
在这个例子中:
Master是工作分支 My-awesome-template /master是一个中间分支
创建备份
git branch backup
重置为指定提交
git reset --soft <#root>
然后将所有文件添加到登台
git add .
提交而不更新消息
git commit --amend --no-edit
推送新分支与压缩提交到回购
git push -f