我如何获取一堆我的git本地提交并将它们合并为一个提交?

时间:2012-10-26 06:38:21

标签: git git-commit

在我的公司,我们最近搬了git。在这个环境中工作的过程中,我最终做了一堆本地提交(在我的本地分支中)。为了保持我的代码更新,我做了拉。现在最终的结果是,当我执行git日志时,我会在该日志中找到我的提交以及其他开发人员的提交。在将我的提交推送到远程之前,我想收集所有本地提交并将它们合并到一个提交中(为了减少日志中的噪声)并将其推送到远程。我怎么用git做到这一点?

3 个答案:

答案 0 :(得分:3)

最简单的方法是,一旦你完成了git pull并且你已经解决了任何冲突并且都是最新的,请将你的分支指针重置为最新的远程提交(我已经假设{ {1}})然后进行新的提交。

origin/master

新提交将作为远程主提交之上的单个新提交进行所有更改。然后,您可以将此提交推送到远程。在推送之前使用git reset --soft origin/master git commit 验证提交。

注意:这假设您只从一个共享分支(git show)中提取,或者您已经提取的任何其他共享分支已经合并到远程分支中master

答案 1 :(得分:1)

git fetch <remote name>
git rebase -i <remote name>/<branch name>

有关如何使用rebase -i(交互式rebase)的更多详细信息,请参阅本指南:

http://gitready.com/advanced/2009/02/10/squashing-commits-with-rebase.html

请注意,rebasing / squashing并不总能很好地与合并提交一起使用。重新绑定通常会在您合并的内容之后移动您的提交,因此合并提交可能会消失,您不会遇到问题,但如果您合并的内容已经不在远程分支中,那么您需要小心。

答案 2 :(得分:0)

你应该改变方法。在本地分支上进行开发时,不应该进行任何池(或提取)。而是尝试更新“主要”开发分支,然后不时地使用“main”分支对您的开发分支进行rebase(git rebase)。

现在也许 git cherry-pick 可能就是你想要的。

您还可以尝试手动重置(git reset --soft)到您在给定(您的开发)分支上的第一次提交,然后仅选择您下次提交为一次提交的更改。

如果你的分支上只有你的提交问题要简单得多:你可以做那些(git squash)。一些方法,不在您的开发分支上创建太多提交也是在修改您的提交(git ammend)。