是否有可能在git中合并提交?

时间:2012-07-02 09:41:58

标签: git version-control commit

有时候(经常发生)我会犯错误并在推动后做出一种“快速修复”。

但是对于某些提交清晰度,有时我正在进行重新分叉(如果那是在我的分支中)并且make,再次提交所有更改。

有没有合并提交?

2 个答案:

答案 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