有时候(经常发生)我会犯错误并在推动后做出一种“快速修复”。
但是对于某些提交清晰度,有时我正在进行重新分叉(如果那是在我的分支中)并且make,再次提交所有更改。
有没有合并提交?
答案 0 :(得分:3)
是的,有一种方法,它被称为压缩。
git rebase -i sha1_of_the_first_concerened_commit
然后通过 squash (或 s )替换相关提交下面提交的所有编辑,保存文件,然后继续变基与git rebase --continue
。
下次您推送时,您的推送可能会被拒绝,然后您需要git push -f
。
但在您的具体情况下,没有必要通过这一切,您可以使用commit --amend
代替。
假设您已提交,然后快速修复 file1 。您只需要将文件添加到暂存区域:
git add file1
然后:
git ci --amend
最后强行推动:
git push -f
在重写历史时要小心,当你是唯一一个在回购中工作的人,或者你确定没有人在你之后拉扯,这是好的,否则对其他人来说是痛苦的。
答案 1 :(得分:1)
是。您要查看的内容是rebase
。尝试
$ git help rebase # and read it
另一个选项是git commit --amend
。如果你要提交的提交应该与当前的HEAD合并,你可以修改它。
这两个选项,重写历史记录。因此,如果受影响的提交已经在远程端,您将需要git push -f
向上游发送更改。
对于 rebase 的simpe示例用例,假设您已进行了5次提交,
A--B--C--D--E
^ initial ^ HEAD
并且提交B是提交A,
的快速修复
并且提交E是提交C的快速修复。
因此,您希望将B合并到A,将E合并到C.
$ git rebase -i HEAD~5
你从这开始:
pick A msg
pick B msg
pick C msg
pick D msg
pick E msg
重新排列提交,以使要合并的提交低于要合并的提交;这是B低于A(已经存在)和E低于C.
pick A msg
pick B msg
pick C msg
pick E msg
pick D msg
你告诉git,不是选择提交,而是压缩它;将它合并到上面的那个 - 或者 fixup 它 - 参见手册页。
pick A msg
squash B msg
pick C msg
squah E msg
pick D msg
全部完成,保存文件,git将重新排列并压缩提交 所以现在你有:
A'--C'--D