将某些提交选择为单个提交?
Pick certain commits into a single commit?
我 运行 经常遇到这种情况,我的 git 日志因数百次提交而变得一团糟。
commit d: add sky to scenery
commit c: add Christina to characters
commit b: add flowers to scenery
commit a: add Andrew to characters
怎么会有这样的地方 commit f = b + d
?
commit f: add scenery
commit e: add characters
一个项目随着时间的推移获得大量提交是很正常的:-)
如果您确定要将它们融合在一起,我认为有两种可能性:
使用交互式 git rebase
:
将当前分支的最新提交融合在一起
git rebase --interactive HEAD~10
打开显示最后 10 次提交的编辑器。将 pick
替换为 squash
(附加提交消息)或 fixup
(丢弃提交消息)。通过移动行,您可以 select 承诺融合在一起。不过,更改顺序可能会导致合并冲突。
编辑器首先代表当前的历史:
pick ... older commits
pick aaaaaaa add Andrew to characters
pick bbbbbbb add flowers to scenery
pick ccccccc add Christina to characters
pick ddddddd add sky to scenery
改成你喜欢的,例如:
pick ... older commits (left untouched)
reword aaaaaaa keep message, open editor to edit
squash bbbbbbb append message to aaaaaaa
fixup ccccccc discard message
fixup ddddddd discard message
合并来自其他(远程)分支的提交。
对于还不属于当前分支的提交,挑选它们的更改并创建包含所有这些更改的新提交可能是最好的方法。为此使用 git cherry-pick
:
git cherry-pick --no-commit $commit1
git cherry-pick --no-commit $commit2
...
git commit -m "new commit message"
在这两种情况下,您都会创建具有不同 SHA1 值的新提交!编辑历史记录时请务必小心,并尽量避免对 published/shared 存储库进行编辑。
我 运行 经常遇到这种情况,我的 git 日志因数百次提交而变得一团糟。
commit d: add sky to scenery
commit c: add Christina to characters
commit b: add flowers to scenery
commit a: add Andrew to characters
怎么会有这样的地方 commit f = b + d
?
commit f: add scenery
commit e: add characters
一个项目随着时间的推移获得大量提交是很正常的:-)
如果您确定要将它们融合在一起,我认为有两种可能性:
使用交互式
将当前分支的最新提交融合在一起git rebase
:git rebase --interactive HEAD~10
打开显示最后 10 次提交的编辑器。将
pick
替换为squash
(附加提交消息)或fixup
(丢弃提交消息)。通过移动行,您可以 select 承诺融合在一起。不过,更改顺序可能会导致合并冲突。编辑器首先代表当前的历史:
pick ... older commits pick aaaaaaa add Andrew to characters pick bbbbbbb add flowers to scenery pick ccccccc add Christina to characters pick ddddddd add sky to scenery
改成你喜欢的,例如:
pick ... older commits (left untouched) reword aaaaaaa keep message, open editor to edit squash bbbbbbb append message to aaaaaaa fixup ccccccc discard message fixup ddddddd discard message
合并来自其他(远程)分支的提交。
对于还不属于当前分支的提交,挑选它们的更改并创建包含所有这些更改的新提交可能是最好的方法。为此使用
git cherry-pick
:git cherry-pick --no-commit $commit1 git cherry-pick --no-commit $commit2 ... git commit -m "new commit message"
在这两种情况下,您都会创建具有不同 SHA1 值的新提交!编辑历史记录时请务必小心,并尽量避免对 published/shared 存储库进行编辑。