Mercurial (hg) commit only certain files Ask Question

Mercurial (hg) commit only certain files Ask Question

I'm trying to commit only certain files with Mercurial. Because of of hg having auto-add whenever I try to commit a change it wants to commit all files. But I don't want that because certain files are not "ready" yet.

There is

hg commit -I thefile.foo

but this is only for one file. The better way for me would be if I can turn off auto-add as in Git. Is this possible?

ベストアンサー1

You can specify the files on the command line, as tonfa writes:

$ hg commit foo.c foo.h dir/

That just works and that's what I do all the time. You can also use the --include flag that you've found, and you can use it several times like this:

$ hg commit -I foo.c -I "**/*.h"

You can even use a fileset to select the files you want to commit:

$ hg commit "set:size(1k - 1MB) and not binary()"

There is no setting that will turn off the auto-add behavior and make Mercurial work like Git does. However, the mq extension might be of interest. That's an advanced extension, but it allows you do to

$ hg qnew feature-x     # create new patch
$ hg qrefresh -s foo.c  # add a file to the current patch
$ hg qrefresh -s bar.c  # add another file to the patch
$ hg qfinish -a         # convert applied patches to normal changesets

I don't really use MQ for this purpose myself, though, since I think it's enough to just specify the filenames on the command line.

おすすめ記事