如何正确推送到具有较新版本号的存储库?

时间:2015-02-26 21:09:03

标签: netbeans mercurial meld

请帮忙。

我总是很难将我的更改推送到现有的远程存储库,其中版本号更新。也就是说,在我上次拉动之后,有人已经推到了那个存储库。

我使用ubuntu 14.04netbeansmercurial以及meld,我的项目是使用laravel框架的php应用程序。

我目前的解决方案是,

  1. 备份我的本地存储库;
  2. 然后,在我的第一个本地存储库中,强制更新tip标记;
  3. 使用第一个本地存储库获取远程存储库中的最新信息;
  4. 拉出远程存储库中的最新信息(我不知道获取和拉取之间的区别,如果有人可以解决这些问题,我一定会感激不尽);
  5. 开放融合;比较两个存储库目录(第一个本地存储库和备份);记住哪些文件不同,然后;
  6. 在netbeans中,在两个目录中的每个文件中应用alt + shift + f(格式),以便我可以删除不必要的空格,我可以很容易看到更改(当我在meld中再次比较两个目录时)有适当的缩进和更清晰的换行符;
  7. 然后,打开meld,再次比较两个存储库目录,这次,我现在可以很容易地理解所执行的更改;
  8. 对每个存储库应用必要的更改,直到它们彼此相等为止(在此步骤中您必须非常小心,因为它已经是您正在修改的备份);
  9. 提交第一个本地存储库的更改。其中tip等于远程存储库中的最新修订版;
  10. 然后,推送已提交的更改。
  11. 我不想继续使用此解决方案,因为它还需要您有第二个备份存储库(换句话说,存储容量问题)。请帮我找到另一种解决方案。

    如果我做了所有不同的事情,比如,首先,从远程存储库中提取最新的更改(我的同事):我收到错误:

    abort: outstanding uncommitted changes
    

    如果我先推:错误是:

    abort: push creates new remote heads on branch 'default'!
    (did you forget to merge? use push -f to force)
    

    然后有时,如果我使用终端,它需要我合并。如果您无法控制哪个文件首先合并(终端按字母顺序打开每个更改文件的融合比较工具),则很难在终端中合并,

    有时你必须申请"格式"首先要对每个文件轻松了解所执行更改的目标。

    但如果您退出合并,它会假设您已成功合并文件(或不合并?CMIIW。)

1 个答案:

答案 0 :(得分:4)

简而言之,Mercurial已经给你提示了。您可以随时进行远程更改。但是,如果您的工作目录中有未提交的更改,则无法将它们与您的更改合并。

所以只需提交那些(或搁置它们,如果你还没有完成),进行合并,解决任何冲突,并提交合并。然后,您可以将所有内容推送到远程服务器。