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