Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages


home | help
COMMIT-PATCH(1)			 User Commands		       COMMIT-PATCH(1)

       commit-patch - commit patches to	Darcs, Git, Mercurial, Bazaar,
       Monotone, Subversion, or	CVS repositories

       commit-patch [--amend] [-m message] [-F message-file] [-v] [--dry-run]

       commit-partial [--amend]	[-v] [--dry-run] [--retry] [file ...]

       Normally	version	control	systems	don't allow fine grained commits.
       commit-patch allows the user to control exactly what gets committed (or
       "recorded", in Darcs parlance) by letting the user supply a patch to be
       committed rather	than using the files in	the current working directory.
       If patch-file is	not supplied on	the command line then the patch	will
       be read from standard input.

       commit-partial is like commit-patch except that it will create a	patch
       from the	current	changes	in the current working directory and launch
       your editor so that you can edit	the patch and the commit message
       (using the VISUAL environment variable, or if that isn't	set the	EDITOR
       environment variable, or, if that isn't set, vi.	Any files you specify
       will be passed to your version control's	diff command.

       commit-patch currently supports the following version control systems:
       Darcs, Git, Mercurial, Bazaar, Monotone,	Subversion, and	CVS.

       -a, --amend - Amend a previous commit. Currently	only Darcs and Git
       support this option. When used with Git it will amend the previous
       commit. When used with Darcs, Darcs will	ask you	which patch you	want
       to amend.

       -m, --message=message - An optional message to use as the commit	text.
       If the message is multiple lines	then Darcs, Git, and Mercurial will
       use the first line as the patch name and	the rest as commit details. If
       the "-m"	option is not specified	then the result	will be	the same as
       whatever	the underlying version control system would do if you didn't
       specify a message name on the command line. That	is, commit-patch does
       not interfere with the patch naming process of the underlying version
       control system; Darcs will still	ask you	interactively; CVS and
       Subversion will still launch your editor.

       -F, --message-file=filename - You can optionally	get the	commit message
       from a file. This is generally only useful for scripting	commit-patch.

       -v, --verbose - Turn on debugging. This will print the commands that
       commit-patch is running to get the patch	committed.

       -n, --dry-run - Turn on more paranoid debugging.	This will print	the
       commands	that commit-patch will run to get the patch committed but it
       won't actually run those	commands.

       -r, --retry - Only available in commit-partial. This will reload	the
       last patch that was attempted to	be committed into your editor instead
       of the current changes in the directory.	This is	for cases where	the
       patch fails to commit for some reason and you want to try to fix	it
       instead of starting over.

       commit-patch works by manipulating the working directory	using "patch",
       "interdiff", and	the underlying version control system's	"diff".	 If
       any part	of the process fails, commit-patch will	attempt	to restore the
       working directory to the	state it was before the	command	was run. Any
       errors from the underlying version control system or from patch will be

       The patch specified on the command line must originate from the same
       place as	the current directory. That is,	the following will not work:

	 cvs diff -u > ../a.patch
	 cd ..
	 commit-patch a.patch

       You must	run commit-patch from the same directory that the original
       patch was based from.

       Darcs, Git and Mercurial	put "a/" and "b/" in front of all the paths in
       the diff	output.	Don't worry about this;	commit-patch takes it into

       Typical CVS usage:

	 cvs diff -u > a.patch
	 emacs a.patch
	 commit-patch a.patch

       Mercurial usage with a message specified:

	 hg diff > a.patch
	 emacs a.patch
	 commit-patch -m "This is a commit message" a.patch

       Darcs usage with	a multi-line message specified:

	 darcs diff -u > a.patch
	 emacs a.patch
	 commit-patch -m 'This is the patch name
	 Here are the patch details' a.patch

       o   David Caldwell <>

       o   Jim Radford <>

       Copyright X 2003-2015 by	David Caldwell and Jim Radford.

       commit-patch is distributed under the GNU General Public	License. See
       the COPYING file	in the distribution for	more details.

       commit-patch was	originally called "cvs-commit-patch" and was a bash
       script written in 2003 by Jim Radford (with David Caldwell in the room
       drawing the procedure on	a white	board).	David later converted it do
       "darcs-commit-patch", then integrated them back together	into commit-
       patch. Mercurial	support	was then added.	At some	point David translated
       from bash into perl because funky bash quoting issues were causing
       problems	with a repository that had a space in one of the directory

perl v5.32.1			  2022-04-04		       COMMIT-PATCH(1)


Want to link to this manual page? Use this URL:

home | help