请帮忙。
我总是难以将更改推送到修订号较新的现有远程存储库。即,在我最后一次拉动之后,有人推到了那个存储库。
我正在使用ubuntu 14.04
, and netbeans
and mercurial
and meld
and 我的项目是一个使用 laravel 框架的 php 应用程序。
我目前的解决方案是,
- 备份我的本地存储库;
- 然后,在我的第一个本地存储库中,强制更新
tip
标签; - 使用第一个本地存储库获取远程存储库中的最新版本;
- 拉取远程存储库中的最新版本(我不知道 fetch 和 pull 之间的区别,如果有人能解释一下,我将不胜感激);
- 开放融合;比较两个存储库目录(第一个本地存储库和备份);然后记住哪些文件不同;
- 在netbeans中,在两个目录中的每个不同的文件中应用
alt
++ (格式shift
)f
,这样我就可以删除不必要的空格,并且我可以很容易地看到更改(当我在meld中再次比较两个目录时)具有适当的缩进和更清晰的换行符; - 然后,打开 meld,再次比较两个存储库目录,这一次,我现在可以很容易地理解所做的更改;
- 对每个存储库应用必要的更改,直到它们彼此相等(在此步骤中您必须非常小心,因为它已经是您的备份正在被修改);
- 提交第一个本地存储库的更改。
tip
等于远程存储库中的最新版本; - 然后,推送提交的更改。
我不想继续使用这个解决方案,因为它还要求您有第二个备份存储库(换句话说,存储容量问题)。请帮我找到另一个解决方案。
如果我做所有不同的事情,例如,首先,从远程存储库中提取最新的更改(由我的同事):我收到一个错误:
abort: outstanding uncommitted changes
如果我先推:错误是:
abort: push creates new remote heads on branch 'default'!
(did you forget to merge? use push -f to force)
然后有时,如果我使用终端拉,它需要我合并。当您无法控制首先要合并哪些文件时,在终端中合并非常困难(终端按字母顺序为每个更改的文件打开融合比较工具),
有时您必须先将“格式”应用于每个文件,以便轻松了解所执行更改的目标。
但是如果您退出合并,它将假定您已成功合并文件(或没有?CMIIW。)