Mercurial: multiline commit message on the command line?

Command LineMercurial

Command Line Problem Overview


How can I specify a multiline commit message for mercurial on the command line?

hg commit -m "* add foo\n* fix bar"

does not work. The log shows:

changeset:   13:f2c6526e5911
tag:         tip
date:        Fri Jan 23 23:22:36 2009 +0100
files:       foobar.cpp
description:
    * add foo\n*fix bar

Command Line Solutions


Solution 1 - Command Line

> Mercurial: multiline commit message on > the command line?

Hit enter.

$ hg commit -m "Did some work
> Now I'm done"

One of the things is that only the first line shows up in hg log:

$ hg log
changeset:   0:d2dc019450a2
tag:         tip
user:        Aaron Maenpaa <[email protected]>
date:        Sat Jan 24 07:46:23 2009 -0500
summary:     Did some work

... but if you fire up "hg view" you can see that the whole message is there.

Edited to add:

... but hg -v log shows the whole message:

$ hg -v log
changeset:   0:d2dc019450a2
tag:         tip
user:        Aaron Maenpaa <[email protected]>
date:        Sat Jan 24 07:46:23 2009 -0500
files:       work
description:
Did some work
Now I'm done

Solution 2 - Command Line

From Windows cmd, do this command for a multiline commit.

hg commit -l con

This allows you to enter a multiple line commit message straight from the command line. To end your message, hit Enter, and on a line by itself hit Ctrl + Z and Enter again.

Why? The -l option to hg commit says to read the commit message from a file, and con specifies that the file is actually the console.

Solution 3 - Command Line

If you're doing it interactively (vs. from a script), just do hg commit without the -m flag. I'm not sure what the behavior is on Linux or Mac, but on Windows it pops up Notepad with a file that you fill out and save for a multiline message.

Solution 4 - Command Line

I know, there is already a solution for linux users, but I needed another solution for windows command line, so I was looking for it...

And I found one: https://www.mercurial-scm.org/pipermail/mercurial/2011-November/040855.html

hg commit -l filename.txt

I hope, it's useful for someone out there ,)

[EDIT] oO - it has already been added to the help

> -l --logfile FILE read commit message from file

Solution 5 - Command Line

Here's another way that is more close to what you tried at first:

hg commit -m "$(echo -e 'foo\nbar')"

Solution 6 - Command Line

In bash (since version 2.0):

hg commit -m $'foo\nbar'

(I.e. put a dollar sign before an opening single quote to make it parse escape sequences (like \n) within the string — note that it doesn't work with double quotes.)

Solution 7 - Command Line

For Windows with PowerShell:

 hg commit --message "foo`nbar"

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionMartinView Question on Stackoverflow
Solution 1 - Command LineAaron MaenpaaView Answer on Stackoverflow
Solution 2 - Command LineCody PiersallView Answer on Stackoverflow
Solution 3 - Command LineJason SView Answer on Stackoverflow
Solution 4 - Command LinekapsiRView Answer on Stackoverflow
Solution 5 - Command LineLeslie P. PolzerView Answer on Stackoverflow
Solution 6 - Command LineSashaView Answer on Stackoverflow
Solution 7 - Command LineCodeFoxView Answer on Stackoverflow