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

How to properly push to a repository with a newer revision number?

请帮忙。

我总是难以将我的更改推送到修订号较新的现有远程存储库。即有人在我上次拉取后推送到该存储库。

我正在使用 ubuntu 14.04netbeansmercurialmeld,我的项目是一个 php 应用程序,使用 laravel框架。

我目前的解决方案是,

  1. 备份我的本地存储库;
  2. 然后,在我的第一个本地存储库中,强制更新到 tip 标签;
  3. 使用第一个本地存储库获取远程存储库中的最新版本;
  4. 在远程仓库中拉取最新的(我不知道fetch和pull的区别,如果有人能解释一下,我将不胜感激);
  5. 打开融合;比较两个存储库目录(第一个本地存储库和备份);然后记住哪些文件不同;
  6. 在 netbeans 中,在两个目录中的每个不同文件中应用 alt+shift+f(格式),以便我可以删除不必要的空格和通过适当的缩进和更清晰的换行符,我可以很容易地看到更改(当我在 meld 中再次比较这两个目录时);
  7. 然后,打开meld,再次比较两个版本库目录,这一次,我现在可以很容易地理解执行的更改;
  8. 对每个存储库应用必要的更改,直到它们彼此相等(在此步骤中您必须非常小心,因为它已经是您的备份正在被修改);
  9. 提交第一个本地存储库的更改。 tip 等于远程存储库中的最新修订版;
  10. 然后,推送已提交的更改。

我不想继续使用这个解决方案,因为它还需要您有第二个备份存储库(换句话说,存储容量问题)。请帮我找到另一个解决方案。

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

abort: outstanding uncommitted changes

如果我先push:错误是:

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

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

有时您必须先对每个文件应用 "Format" 才能轻松理解所执行更改的 objective。

但是如果你退出合并,它会假设你已经成功合并文件(或者没有?CMIIW。)

简而言之,Mercurial 已经在为您提供提示。您可以随时引入远程更改。但是如果您的工作目录中有未提交的更改,则不能将它们与您的更改合并。

因此只需提交这些(或搁置它们,如果您尚未完成),进行合并,解决任何冲突,然后提交合并。然后你就可以把所有东西都推送到远程服务器了。