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:

```html
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:

```html
$ 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#Documentation/git-commit.txt--mltmsggt).

Next `git log` will look like this:

```html
$ 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:

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

Next `git log` will look like this:

```html
$ 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:

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

Next, you can:

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

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

```html
$ 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#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:

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

Or use standard input instead of temporary files:

```html
$ 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 found this helpful, consider [subscribing to my newsletter](https://upweb.dev) for weekly web development insights and updates. Thanks for reading!_
