我有以下丑陋的历史(重复的消息来自我最初使用github)。
ba7e5ec PPath begins...
be327e8 Update README.md
585b586 Update README.md
4d2ed26 Update README.md
834b3b6 Update README.md
6c7da1a Update README.md
9d89b1b First version.
我想有类似的东西。
xxxxxxx PPath begins...
yyyyyyy Update README.md
9d89b1b First version.
有可能吗?这个想法是压缩一些提交,但不一定是最后的提交。
答案 0 :(得分:2)
以下说明将帮助您逐步进行更改,从而获得所需的结果。
有两种方法可以达到效果。
这个更快但需要使用文本编辑器。
git checkout master
git branch backup
#pick the sha1 of a commit before the one that will consume further commits.
git rebase -i 9d89b1b
这将打开包含文本的编辑器。改变方式:
pick 6c7da1a Update README.md
squash 834b3b6 Update README.md
squash 4d2ed26 Update README.md
squash 585b586 Update README.md
squash be327e8 Update README.md
pick ba7e5ec PPath begins...
...
现在保存并退出。如果你是vim,that's how to exit。将打开一个包含提交消息的新编辑器你可以保持原样不变或改变你认为好的任何东西。
# This is a combination of 3 commits.
# The first commit's message is:
Update README.md
...
保存并再次退出。工作完成了。
这个更长,但不需要辅助工具。
#start with a backup
git checkout master
git branch backup
#this returns head to be327e8 and brings the difference into index.
git reset --soft be327e8
# save that index for future use
git stash save
#same trick again
git reset --soft 9d89b1b
#recommit our changes
git commit -m'Update readme.md'
# now use the stashed changes
git stash apply
git commit -m'PPath begins...'
# check the result
git log --oneline
# now if everything is ABSOLUTELY FINE, you can delete the backup
git stash drop
一些链接可以解释发生了什么:
Can you explain what "git reset" does in plain english?
Git cheatsheet
答案 1 :(得分:1)
无论如何,请确保您了解历史重写的后果(请阅读The perils of rebasing)。
作为使用phpmyadmin
的其他答案的替代方案,您可以考虑使用git reset --soft
。在最简单的形式中,在没有其他参数的情况下运行命令,您将在文本编辑器中获得待办事项列表,并将您希望压缩到其前任的提交标记为git rebase -i
。保存并退出,git将完成剩下的工作。