macos - 如何与 Mercurial merge

标签 macos mercurial merge bitbucket

我创建了一个存储库并对文件进行了一些更改。然后我就 promise 并继续工作。经过一些改变,我再次做出了 promise 。 我必须回到第一个版本,所以我这样做了:

hg up 5f01300

第一个版本的文件又回来了。

我做了一些更改并再次提交。

hg commit -m 'Updated'

创建了一个新头,然后我尝试了:

hg push

Mercurial 表示存在“未提交的未提交”内容。

我尝试再次提交:

hg commit -m 'Changes accepted'

然后我输入:

hg merge

所以出现了很多错误,因为有两个头,而且我无法 merge 它们。

有时我尝试像上面那样进行 merge ,并且效果很好。通常,当我第二次尝试重复该过程时,它会中断并且我无法 merge 任何内容。

有人可以教如何正确 merge 吗?

[一些错误]

通常,在第二次时,会发生以下情况:

int main(int argc, char **argv)
{
        printf("hello, world!\n");
<<<<<<< local
        printf("sure am glad I'm not using CVS!\n");
=======
        printf("sure am glad I'm using Mercurial!\n");
>>>>>>> other
        return 0;
}

我必须做:

hg resolve -m hello.c

最佳答案

merge 是 merge 不同版本文件的方式。每当您以两种不同的方式更改文件时,Mercurial 都会在您运行 hg merge 时尝试 merge 它。

当文件的更改不重叠时,Mercurial 可以自动进行 merge 。但是,如果您以两种不同的方式更改同一行,那么您需要帮助 Mercurial merge 这两个编辑。

考虑一个在第一个版本中以 hello, world! 开头的文件,然后在第二个版本中更改为 sure am happy I'm not using CVS!:

"hello, world" --- "sure am glad I'm not using CVS!"

您现在更新回第一个版本并对文本进行不同的更改:

"hello, world" --- "sure am glad I'm not using CVS!"
               \
                \
                 \
                   "sure am glad I'm using Mercurial!"

您现在有一个不同历史记录,当您hg merge 时,Mercurial会告诉您它在文件中检测到冲突。 Mercurial 将搜索 merge tool如果它在您的系统上找不到任何内容,它将转储文件中冲突的更改。该文件如下所示:

<<<<<<< local
sure am glad I'm not using CVS!
=======
sure am glad I'm using Mercurial!
>>>>>>> other

您看到的标记称为 merge 标记,它们向您显示文件中无法自动 merge 的区域。标有 local 的顶部区域是您在输入 hg merge 之前工作副本中的版本。标记为 other 的底部区域是您 merge 的分支上的版本。

Mercurial 知道该文件未解析,您可以使用 hg resolve --list 进行查看。现在,您编辑该文件以某种方式组合两个版本。这是一种组合:

sure am glad I'm using Mercurial and not CVS!

我删除了 merge 标记并留下了我喜欢的版本。现在,您将文件标记为已解决并提交 merge :

$ hg resolve --mark hello.c
$ hg commit

希望对您有所帮助!


另一条评论:你写

[...] I tried: hg push. Mercurial said there were "outstanding uncommitted" stuffs.

当您尝试插入时,Mercurial 从不谈论未提交的更改。推和拉与您的工作副本(未提交的更改所在的位置)无关。因此,使用脏工作副本进行推拉是可以的。您想到的错误可能是

$ hg merge
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
$ hg merge
abort: outstanding uncommitted merges

也就是说,在提交或中止当前 merge 之前,您无法启动新的 merge 。

关于macos - 如何与 Mercurial merge ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19918353/

相关文章:

macos - Bash .profile 未加载

macos - Vim 与 Textmate

mercurial - 意想不到的新头创建

svn - 大型项目的分布式版本控制 - 可行吗?

merge - 上下文感知合并?

objective-c - SIMBL 在取景器中调配

.net - 当我检查 MAUI 与 maui-check 的兼容性时,如何确定错误出在哪里?

mercurial - 有没有考虑到 Mercurial 设计的构建工具?

tfs - TFS:合并回主分支

当 R 中所有行的一列不同时,删除除一个重复行以外的所有行