2

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

4

3 回答 3

3

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

git reset --soft origin/master
git commit

新提交将是您的所有更改,作为远程​​主提交之上的单个新提交。然后,您可以将此提交推送到远程。用于git show在推送之前验证提交。

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

于 2012-10-26T06:53:18.173 回答
1
git fetch <remote name>
git rebase -i <remote name>/<branch name>

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

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

请注意,rebase/squashing 并不总是与合并提交很好地配合。变基通常会在您合并的内容之后移动您的提交,因此合并提交可能会消失并且您不会遇到问题,但如果您合并的内容不在远程分支中,您需要小心。

于 2012-10-26T06:43:49.557 回答
0

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

现在也许git cherry-pick可能是您正在寻找的东西。

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

如果你在你的分支问题上只有你自己的提交,那就简单多了:你可以压缩那些(git squash)。一些在你的开发分支上不创建太多提交的方法也在修改你的提交(git ammend)。

于 2012-10-26T06:47:12.387 回答