How to Commit Multiline Messages in git commit
Tags: git, webdev, programming, javascript
Published: 2024-06-02 06:44:39

As developers, when using Git to commit code to a remote repository, we need to write information about this modification. On the command line, we use the `git commit` command, such as `git commit -m` which allows you to add a line of information. But sometimes a multi-line message with a title and a specific description may be more indicative of your intent, such as the following:

```txt
Commit Title: Briefly describe what I changed
Commit Description: Detailed instructions for changing it
```

So how to achieve this?

* * *

### 1. Use a text editor

Use `git commit` without the `-m` or `git commit -v`, which will take you to a text editor. So then you can add multiple lines of text using your favorite text editor.

### 2. Multiple `-m` options

If you don’t want to see wordy diffs, you can use multiple `-m` options. Just like this:

```txt
$ git commit -m "Commit Title" -m "Commit Description"
```

This is because if multiple `-m` options are given, their values will be concatenated into separate paragraphs, which can be found in the [git documentation](https://git-scm.com/docs/git-commit?utm_source=webdeveloper.beehiiv.com&utm_medium=newsletter&utm_campaign=how-to-commit-multiline-messages-in-git-commit#Documentation/git-commit.txt--mltmsggt).

Next `git log` will look like this:

```txt
$ git log
commit 1e8ec2c4e820fbf8045b1c7af9f1f4f23262f755
Author: Your Name you@example.com
Date: Sat Sep 24 20:18:15 2022 -0700

Commit Title

Commit Description
```

### 3. Open quotes, press Enter

Another easier way is to type `git commit -m "` and hit `Enter` to enter the multiline, and use closing quotes when closing. This looks like this:

```txt
$ git commit -m "
> Commit Title
> Commit Description"
```

Next `git log` will look like this:

```txt
$ git log
commit 7d75a73e41b578a1e2130372a88a20ed1a0a81e4
Author: Your Name you@example.com
Date: Sat Sep 24 20:22:02 2022 -0700

Commit Title
    Commit Description
```

### 4. Shell Environment Variables

Don’t forget that you can define environment variables in the shell, for example, you can define temporary environment variables with newlines:

```txt
$ msg="
> Commit Title
> Commit Description"

# or
$ msg="$(printf "Commit Title\nCommit Description")"
```

Next, you can:

```txt
$ git commit -m "$msg"
```

That’s it, `git log` will output:

```txt
$ git log
commit 056e35c37d199c0f3904e47d2107140267608c4a
Author: Your Name you@example.com
Date: Sat Sep 24 20:42:11 2022 -0700

Commit Title
    Commit Description
```

### 5. Use the `-F` option

Introduction from the [documentation](https://git-scm.com/docs/git-commit?utm_source=webdeveloper.beehiiv.com&utm_medium=newsletter&utm_campaign=how-to-commit-multiline-messages-in-git-commit#Documentation/git-commit.txt--Fltfilegt):

> -F <file>  
>  — file=<file>
> Take the commit message from the given file. Use ` -` to read the message from the standard input.

So you can write a multi-line message in a temporary file before committing. Like the following:

```txt
$ printf "Commit Title\nCommit Description" > "temp.txt"
$ git commit -F "temp.txt"
```

Or use standard input instead of temporary files:

```txt
$ printf "Commit Title\nCommit Description" | git commit -F-
```

### Conclusion

Here are a few methods I saw, you can choose one of them according to your preference. If you have other ways, feel free to share.

*If you find this helpful, [**please consider subscribing**](https://webdeveloper.beehiiv.com/) to my newsletter for more insights on web development. Thank you for reading!*